基于红外遥控步进电机的设计 下载本文

内容发布更新时间 : 2024/11/15 15:25:06星期一 下面是文章的全部内容请认真阅读。

}

/*------------------------------------------------ 写入字符函数

------------------------------------------------*/

/* 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;