用单片机的定时器和外部中断资源,将定时器设置为一秒定时,信号接到INT0,设置为下降沿触发。在一秒内计算外部中断的次数即为方波的频率。
源程序:
#include  #define    uint unsigned int #define uchar unsigned char sbit q=P2^3; sbit b=P2^2; sbit s=P2^1; sbit g=P2^0; sbit flog=P2^4; int num=0;int t=0;int count=0; uchar code table0[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90}; void delay(int k) {     int i,j;     for(i=0;i } void init() {     TMOD=0x01;            //定义T0定时方式1     TH0=(65536-50000)/256;     TL0=(65536-50000)%256;     IT0=1;     EX0=1;     TR0=1;     ET0=1;     EA=1; } void inter0() interrupt    0 {     count++; } void timer0() interrupt 1 {     t++;     if(t==20)     {        t=0;        num=count;        count=0;     }     TH0=(65536-50000)/256;     TL0=(65536-50000)%256; } void display(int n) {     int ge,shi,bai,qian;     if(n>=1000)     {        flog=0;        qian=(n/1000)/1000;        bai=((n/1000)/100)-10*qian;        shi=((n/1000)%100)/10;        ge=(n/1000)%10;      }     else     {        flog=1;        qian=n/1000;        bai=(n/100)-10*qian;        shi=(n%100)/10;        ge=n%10;     }     q=b=s=g=1;     q=0;b=s=g=1;     P0=table0[qian];     delay(4);     q=b=s=g=1;     b=0;q=s=g=1;     P0=table0[bai];     delay(4);     q=b=s=g=1;     s=0;q=b=g=1;     P0=table0[shi];     delay(4);     q=b=s=g=1;     g=0;q=b=s=1;     P0=table0[ge];     delay(4); } void main() {     init();     while(1)       display(num);  }下载本文