测速程序:
- #include<reg52.h>
- //液晶及测速
- #define uint unsigned int
- #define uchar unsigned char
- #define zhouchang 20 //20cm
- unsigned int i=0;
- sbit P36=P3^6;
- sbit beep=P2^0;
- unsigned char j;
- unsigned int kop;
- uchar code table[]="2013 (^_^) 4-17 ";
- uchar table1[]=" -I- ";
- uchar table2[3];
- uchar code haode[16]=" WE ^_^ THE ";
- uchar code haode1[16]=" CHAM ARE PION";
- uchar code hao[16]= " p_q ^_^ ";
- uchar code hao1[16]=" -I- -- -I- ";
- uchar flag=1;
- uchar time1=0;
- //液晶端口
- sbit rs = P3^1;//Pin4
- //sbit rw= P3^5; //Pin5
- sbit lcden = P3^0;//Pin6
- uchar time=1;
- sbit dula=P2^6; //锁存器控制端定义
- sbit wela=P2^7;
- uchar num;
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void write_com(uchar com)
- {
- // rw=0;
- rs=0;
- P1=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_data(uchar date)
- {
- // rw=0;
- rs=1;
- P1=date;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_sfm(uchar add,uchar date)
- {
- write_com(0x80+0x40+add);
- write_data(0x30+date);
- }
- void init()
- {
- dula=0;
- wela=0;
- lcden=0;
- /*write_com(0x38);
- write_com(0x0e);
- write_com(0x06);
- write_com(0x01);
- write_com(0x80+0x10);
- */
- write_com(0x38);
- write_com(0x0c);
- write_com(0x06);
- write_com(0x01);
- write_com(0x80);
- }
- void zhongduan_init()
- {
- EA = 1;
- TH0=0x00;
- TL0=0x00;
- ET0=1;
- ET1=1;
- TMOD = 0x15;// 打开定时器和计数器T0,因此矩形脉冲输入端接P3.4
- TH1=0x3C; //50ms
- TL1=0xB0;
- TR0 = 1;
- TR1 = 1;
- }
- void main()
- {
- P2=0xff;
- init();
- // flag=0;
- zhongduan_init();
- while(1)
- {
- if(flag==0)
- {
- EA=0; //关闭中断
- write_com(0x80);
- for(num=0;num<15;num++)
- {
- write_data(table[num]);
- delay(20);
- }
- //速度
- write_sfm(1,table1[0]);
- write_sfm(2,table1[1]);
- write_sfm(3,table1[2]);
- //时间
- write_sfm(10,table2[0]);
- write_sfm(11,table2[1]);
- write_sfm(12,table2[2]);
-
- // write_sfm(8,0x73);
- flag=1;
- EA=1;
- // while(1); //开启中断
- }
- }
- }
-
-
- timer3() interrupt 3 //定时器中断时间到,就读取计数器值 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
- {
- TH1=0X3C;
- TL1=0XB0;
- i++;
- if(i==20) //1s才进行技术脉冲值显示,即每秒更新一次速度 这里一会儿要给!!!!!!!!!1
- {
- time++; //记时间
- time1++;
- kop=TH0;//计数器计入脉冲,每来一个矩形脉冲计数值加1
- kop=kop<<8;
- kop=kop+TL0; //kp单位是cm,周长20cm,20个空隙,一个空隙1cm
- beep=1;
- if(kop>45)
- {
- beep=0;
- }
- table1[0]=kop/100; //显示计数器的值即实际测得速度
- table1[1]=kop%100/10;
- table1[2]=kop%100%10;
- table2[0]=time/100; //显示计数器的值即实际测得速度
- table2[1]=time%100/10;
- table2[2]=time%100%10;
- i=0;
- TH0=0;//计数器速度获取后清零,进行下次获取
- TL0=0;
- flag=0;
- if(time1==20)
- {
-
- write_com(01);
- write_com(0x80);
- for(num=0;num<15;num++)
- {
- write_data(haode[num]);
- delay(20);
- }
-
- write_com(0x80+0x53);
- for(num=0;num<15;num++)
- {
- write_data(haode1[num]);
- delay(20);
- }
- delay(300);
- }
- if(time1==10)
- {
-
- write_com(01);
- write_com(0x80);
- for(num=0;num<15;num++)
- {
- write_data(hao[num]);
- delay(20);
- }
-
- write_com(0x80+0x53);
- for(num=0;num<15;num++)
- {
- write_data(hao1[num]);
- delay(20);
- }
- delay(400);
- }
- }
- }
-
复制代码 |