|
proteus仿真
單片機源程序如下:
- /*等精度plj*/
- #include<at89x52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- #define duan P0 //段驅(qū)動
- #define wei P2 //位掃描
- #define shuju P1 //外部取數(shù)據(jù)
- sbit clear=P3^7; //清除外部數(shù)據(jù)
- sbit on=P3^6; //閘門信號
- uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0,1,2,3,4,5,6,7,8,9字型碼
- uchar weixuan[8]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c};
- int output[8]; //待顯示的輸出BCD碼
- uchar shuju2; //外部計數(shù)器接收緩存
- ulong jz; //基準(zhǔn)
- ulong js; //計數(shù)
- ulong huancun; //緩存
- bit cs; //允許數(shù)據(jù)更新標(biāo)志位
- int i;
- //短延時
- void delay(uchar time)
- {
- for(;time!=0;time--);
- }
- //長延時
- void ldelay()
- {
- uint dd=1100;
- while(dd--);
- }
- //八位掃描顯示子程序
- void display(ulong p)
- {
- output[7]=smgduan[p%100000000/10000000];
- output[6]=smgduan[p%10000000/1000000];
- output[5]=smgduan[p%1000000/100000];
- output[4]=smgduan[p%100000/10000];
- output[3]=smgduan[p%10000/1000];
- output[2]=smgduan[p%1000/100];
- output[1]=smgduan[p%100/10];
- output[0]=smgduan[p%10];
- for(i=0;i<8;i++)
- {
- wei=0xff;
- wei=weixuan[i];
- duan=output[i];
- delay(100);
- wei=0xff;
- }
- }
- void main()
- {
- on=0; //閘門關(guān)閉
- clear=1; //計數(shù)器清零
- clear=0; //清零關(guān)閉
- TMOD=0x55;
-
- EA=1;
- EX1=1;
- IT1=1;
- ET0=1;
- ET1=1;
-
- TR1=1;
- TR0=1;
- on=1; //閘門開啟
- while(1)
- {
- display(huancun);
- if(cs) //閘門關(guān)閉時處理數(shù)據(jù)
- {
- cs=0;
- shuju2=shuju;
- huancun=TH0;
- huancun<<=8;
- huancun+=TL0;
- huancun<<=4;
- huancun+=(shuju2&0x0f);
- js+=huancun;
- huancun=TH1;
- huancun<<=8;
- huancun+=TL1;
- huancun<<=4;
- huancun+=(shuju2>>4);
- jz+=huancun;
- huancun=(float)js/(float)jz*24000000;
- display(huancun);
- jz=0;
- js=0;
- TH0=0;
- TL0=0;
- TH1=0;
- TL1=0;
- clear=1;
- clear=0;
- on=1;
- }
- else
- {
- ldelay(); //處理數(shù)據(jù)時間補償 防止閃爍
- }
- }
- }
- //定時器0
- void jsq0() interrupt 1 using 2
- {
- js+=0x000001;
- if(js>=0xc00000)
- {
- on=0; //關(guān)閉閘門
- }
- }
- //等精度計數(shù)結(jié)束,允許處理數(shù)據(jù)
- void end() interrupt 2 using 1 //外部中斷1
- {
- cs=1;
- }
- //定時器1
- void jsq1() interrupt 3 using 3
- {
- jz+=0x000001;
- if(jz>=0xc00000)
- {
- on=0; //關(guān)閉閘門
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
頻率計.zip
(157.89 KB, 下載次數(shù): 50)
2020-4-3 14:16 上傳
點擊文件名下載附件
|
評分
-
查看全部評分
|