|
我现在做的程序跟你的是一样的,我用到了T0作为频率计数器,T1作为定时器,T2用作串口发送,同时可以在数码管显示测出来的频率.
- #include
- #include
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char senddata_hun=5;
- unsigned char senddata_ten;
- unsigned char senddata_low;
- unsigned char senddata_dot;
- unsigned char data display_buffer[5];
- code unsigned char seg8code[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f,0x00};//不带小数点的段显示
- code unsigned char seg8code_dot[]={0xbf,0x86,0xdb,0xcf,0xe6,
- 0xed,0xfd,0x87,0xff,0xef,0x00};//带小数点的段显示
- uint counter,sub;
- int temp,temp1;
- bit flag;
- void delay1(unsigned char m) //延时程序
- {
- char j,k;
- for(j=0;j
- for(k=125;k>0;k--);
- }
- void send(unsigned char dat)
- {
- SBUF=dat; //这儿只发送0,用十六进制则显示30,用串口调
- while(TI==0);
- TI=0;
- }
- void dis_data(unsigned char *d) //显示程序,P1作为片选,P2作为数码管八个段位驱动显示,共阳极接法
- {
- P1=0xFE;
- P2=d[4];
- delay1(10);
- P1=0xfd;
- P2=d[3];
- delay1(10);
- P1=0xfb;
- P2=d[2];
- delay1(10);
- P1=0xf7;
- P2=d[1];
- delay1(10);
- }
- void data_process(int dat)
- { int tho_wei,hun_wei,ten_wei,low_wei;
-
- tho_wei=dat/1000;
- dat=dat%1000;
- hun_wei=dat/100;
- dat=dat%100;
- ten_wei=dat/10;
- low_wei=dat%10;
- display_buffer[1]=seg8code[tho_wei];
- display_buffer[2]=seg8code[hun_wei];
- display_buffer[3]=seg8code[ten_wei];
- display_buffer[4]=seg8code[low_wei];
- }
- void initial()
- {
- TMOD=0x16;//设定T0和T1模式
- ////////初始化标志位
- temp=0;
- counter=60;
- flag=0;
- //////////T1参数设定,每定时50MS 中断一次///
- TH1=0x4C;
- TL1=0x00;
- TR1=1;
- ET1=1;
- ///////////T0参数设定,每计数200次中断一下/////
- TH0=0x38;
- TL0=0x38;
- TR0=1;
- ET0=1;
- ///////////串口通讯使用T2作为波特率发生器/////////////
- TCLK=1;
- TH2=0xFF; //9600bps波特率
- TL2=0xD9;
- RCAP2H=0xFF;
- RCAP2L=0xD9;
- SCON=0x40;
- TR2=1;
- //////////////////////////
- EA=1;
- }
- void main()
- {
- initial();
- while(1)
- { data_process(temp1); //测出来的数据处理程序
- dis_data(display_buffer); //显示程序
- delay1(5); //延时
- if(flag)
- {
- send(senddata_hun);
- send(senddata_ten);
- send(senddata_low);
- send(senddata_dot);
- //分别发送四个字节的数据,分别是数码管显示器上的百位,十位,个位,和小数位
- initial();
- }
- }
- }
- void time0_int(void) interrupt 1
- {
- temp++;
- }
-
- void counter1_cou(void) interrupt 3
- {
- counter--;
- if(!counter)
- {
- sub=TL0-56;
- flag=1;
- temp=temp*200+sub;
- temp1=temp;
- temp=0;
- EA=0;
- }
- TH1=0x4C;
- TL1=0x00;
- }
复制代码
|
|