}
/*------------------------------------------------ 写入字符函数
------------------------------------------------*/
/* void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) {
if (y == 0) {
LCD_Write_Com(0x80 + x); } else {
LCD_Write_Com(0xC0 + x); }
LCD_Write_Data( Data); }*/
/*------------------------------------------------ 初始化函数
------------------------------------------------*/ void LCD_Init(void) {
LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5);
LCD_Write_Com(0x38); DelayMs(5);
LCD_Write_Com(0x38); DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/
LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5);
LCD_Write_Com(0x0C); /*显示开及光标设置*/ }
/*void speed1(void) {
if(Speed<14) Speed++;
TempData[0]=zf[f];
TempData[1]=Tab[Speed/10];
TempData[2]=Tab[Speed]; }
void speed2(void) {
if(Speed>1) Speed--;
TempData[0]=zf[f]; TempData[1]=Tab[Speed/10]; TempData[2]=Tab[Speed]; }*/
/*------------------------------------------------ 主函数
------------------------------------------------*/ main() {
unsigned int i=512;//旋转一周时间
EX0init(); //初始化外部中断 TIM0init(); Init_Timer1();
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定 LCD_Clear(); //清屏
LCD_Write_String(0,0,\ LCD_Write_String(0,1,\ Coil_OFF;
while(1)//主循环 {
if(irok) //如果接收好了进行红外处理 {
Ircordpro(); irok=0; }
if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等 {
Ir_work(); }
} }
/*------------------------------------------------ 定时器0初始化
------------------------------------------------*/ void TIM0init(void)//定时器0初始化 {
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值 TH0=0x00; //重载值
TL0=0x00; //初始化值 256微秒 ET0=1; //开中断 TR0=1; }
/*------------------------------------------------ 定时器初始化子程序
------------------------------------------------*/ void Init_Timer1(void) {
TMOD |= 0x01; //使用模式1,16位定时器,使用\符号可以在使用多个定时器时不受影响 //TH1=0x00; //给定初值 //TL1=0x00;
EA=1; //总中断打开
ET1=1; //定时器中断打开 TR1=1; //定时器开关打开 }
/*------------------------------------------------ 外部中断0初始化
------------------------------------------------*/ void EX0init(void) {
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2) EX0 = 1; //使能外部中断 EA = 1; //开总中断 }
/*------------------------------------------------ 定时器0中断处理
------------------------------------------------*/
void tim0_isr (void) interrupt 1 {
irtime++; //用于计数2个下降沿之间的时间 }
/*------------------------------------------------ 定时器中断子程序
------------------------------------------------*/ void Timer1_isr(void) interrupt 3 {
static unsigned char times,i;
TH1=(65536-500)/256; //重新赋值 1ms TL1=(65536-500)%6;
if(StartFlag)
{if(zfFlag==0) {
if(times==(20-Speed)) {
times=0; switch(i) {
case 0:Coil_A1;i++;break; case 1:Coil_B1;i++;break; case 2:Coil_C1;i++;break; case 3:Coil_D1;i++;break; case 4:i=0;break; default:break; } }
times++; }
else {
if(times==(20-Speed)) {
times=0; switch(i) {
case 0:Coil_D1;i++;break; case 1:Coil_C1;i++;break; case 2:Coil_B1;i++;break; case 3:Coil_A1;i++;break;