完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include "AT89X51.h" int delay(); void inti_lcd(); void show_lcd(int); void cmd_wr(); void ShowState(); void clock(unsigned int Delay) ; void DoSpeed(); //计算速度 //正转值 #define RIGHT_RUN 1 //反转值 #define LEFT_RUN 0 ***it RS=0xA0; ***it RW=0xA1; ***it E=0xA2; char SpeedChar[]="SPEED(n/min):"; char StateChar[]="RUN STATE:"; char STATE_CW[]="CW"; char STATE_CCW[]="CCW"; char SPEED[3]="050"; unsigned int RunSpeed=50; //速度 unsigned char RunState=RIGHT_RUN; //运行状态 main() { /*定时器设置*/ TMOD=0x66; //定时器0,1都为计数方式;方式2; EA=1; //开中断 TH0=0xff; //定时器0初值FFH; TL0=0xff; ET0=1; TR0=1; TH1=0xff; //定时器1初值FFH; TL1=0xff; ET1=1; TR1=1; IT0=1; //脉冲方式 EX0=1; //开外部中断0:加速 IT1=1; //脉冲方式 EX1=1; //开外部中断1:减速 inti_lcd(); DoSpeed(); ShowState(); while(1) { clock(RunSpeed); P0_1=P0_1^0x01; } } //定时器0中断程序:正转 void t_0(void) interrupt 1 {RunState=RIGHT_RUN; P0_0=1; P1=0x01; cmd_wr(); ShowState();} //定时器1中断:反转 void t_1(void) interrupt 3 { RunState=LEFT_RUN; P0_0=0; P1=0x01; cmd_wr(); ShowState(); } //中断0:加速程序 void SpeedUp() interrupt 0 { if(RunSpeed>=12) RunSpeed=RunSpeed-2; DoSpeed(); P1=0x01; cmd_wr(); ShowState(); }//中断1:减速程序 void SpeedDowm() interrupt 2 { if(RunSpeed<=100) RunSpeed=RunSpeed+2; DoSpeed(); P1=0x01; cmd_wr(); ShowState(); } int delay() //判断LCD是否忙 { int a; start: RS=0; RW=1; E=0; for(a=0;a<2;a++); E=1; P1=0xff; if(P1_7==0) return 0; else goto start;} void inti_lcd() //设置LCD方式 { P1=0x38;//设置16x2显示 cmd_wr(); delay(); P1=0x01; //清除 cmd_wr(); delay(); P1=0x0f; cmd_wr(); delay(); P1=0x06;//光标移动设置 cmd_wr(); delay(); P1=0x0c;//显示开及光标设置 cmd_wr(); delay();} void cmd_wr() //写控制字 { RS=0; RW=0; E=0; E=1;} void show_lcd(int i) //LCD显示子程序 { P1=i; RS=1; RW=0; E=0; E=1;} void ShowState() //显示状态与速度 { int i=0; while(SpeedChar[i]!=' |