測速程序:
- #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;// 打開定時(shí)器和計(jì)數(shù)器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; //關(guān)閉中斷
- 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]);
- //時(shí)間
- 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 //定時(shí)器中斷時(shí)間到,就讀取計(jì)數(shù)器值 //3 為定時(shí)器1的中斷號 1 定時(shí)器0的中斷號 0 外部中斷1 2 外部中斷2 4 串口中斷
- {
- TH1=0X3C;
- TL1=0XB0;
- i++;
- if(i==20) //1s才進(jìn)行技術(shù)脈沖值顯示,即每秒更新一次速度 這里一會兒要給。。。。。。。。1
- {
- time++; //記時(shí)間
- time1++;
- kop=TH0;//計(jì)數(shù)器計(jì)入脈沖,每來一個(gè)矩形脈沖計(jì)數(shù)值加1
- kop=kop<<8;
- kop=kop+TL0; //kp單位是cm,周長20cm,20個(gè)空隙,一個(gè)空隙1cm
- beep=1;
- if(kop>45)
- {
- beep=0;
- }
- table1[0]=kop/100; //顯示計(jì)數(shù)器的值即實(shí)際測得速度
- table1[1]=kop%100/10;
- table1[2]=kop%100%10;
- table2[0]=time/100; //顯示計(jì)數(shù)器的值即實(shí)際測得速度
- table2[1]=time%100/10;
- table2[2]=time%100%10;
- i=0;
- TH0=0;//計(jì)數(shù)器速度獲取后清零,進(jìn)行下次獲取
- 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);
- }
- }
- }
-
復(fù)制代碼 |