之前課程設計做的 誤差很小 分享給大家 里面有程序和仿真 也做過實物 可以按鍵切換量程10倍和1倍
仿真效果
信號頻率
單片機源程序如下:
- #include <reg52.h >
- #include <intrins.h >
- #define uint unsigned int
- #define uchar unsigned char
- sbit k1=P3^0;
- sbit k2=P2^0;
- sbit LED=P2^1;
- unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共陰數碼管
- unsigned char code dispcode[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//顯示0-9 /修改 新增0x00
- unsigned char count [8]={0, 0, 0, 0, 0, 0, 0, 0};//定義數組存放顯示數據的各位
- unsigned int T0count =0;
- unsigned char time1tick =0;
- unsigned char i =0,a=0,j=0,y=0;
- unsigned int x ;//int最大是65536
- void pulse_init (void)
- {
- TMOD =0x16;//T0工作在方式2,計數器模式,T1工作方式為方式1,定時器模式
- TH0=0x00;
- TL0=0x00;
- TH1=(65536-50000)/256;//50ms中斷一次,中斷20次完成1秒定時,計算初值
- TL1=(65536-50000)%256;
- ET0=1;
- ET1=1;
- //EX0=1;
- //EX1=1;
- EA=1;
- }
- void delay (uint ms)
- {
- unsigned char i,j;
- for(i =0; i<ms; i ++)
- for(j =0; j<250;j ++)
- {
- _nop_();
- _nop_();
- _nop_();
- }
- }
- static void time0_int (void) interrupt 1 using 0
- {
- T0count ++;
- }
- void t1(void) interrupt 3 using 0
- {
- time1tick++;
- TH1=(65536-50000)/256;//50ms中斷一次,中斷50次完成1秒定時,計算初值
- TL1=(65536-50000)%256;
- if (time1tick==10*a)
- {
- time1tick=0;
- TR0=0;
- TR1=0;
- ET0=0;
- ET1=0;
- }
- }
- void display (void)
- {
- x=256*T0count+TL0;//轉換成10進制
- i=7; //數碼管的顯示高位為數據的低位
- while(x)//賦值
- {
- count[i]=x%10;
- x=x/10;
- i--;
- }
- while(i--)
- {
- count[i]=10;//修改
- }
- for(i=0;i<8;i++)
- {
- if(i==7&&j==1)
- {
- P1=0x80;
- delay(1);
- }
- P0=dispbit[i];
- P1=dispcode[count[i]];
- delay(1);
- }
- }
- //void int0_int(void) interrupt 0
- //{
- // j=1;
- //}
- //void int1_int(void) interrupt 3
- //{
- // j=0;
- //}
- void main()
- {
- if(!k2)
- {delay(5);
- if(!k2)
- j=0;
- else
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
頻率計.zip
(81.66 KB, 下載次數: 144)
2018-4-19 18:15 上傳
點擊文件名下載附件
|