00 :00 . 00
分 秒 分秒
代码:
- /***************************************************************
- 文件名:秒表.c
- 晶振频率:12MHz
- ****************************************************************/
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define dataport P0
- uchar code weima[]={
- 0xfe,0xfd,0xfb,0xf7,
- 0xef,0xdf,0xbf,0x7f};
- uchar code duanma[]={
- 0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f};
- uchar tempdata[8];
- uchar tt0,tt1,tt2;
- sbit wela=P2^2;
- sbit dula=P2^3;
- void display(uchar,uchar);
- void Init_Timer0(void);
- void delayms(uint);
- void main(void)
- {
- Init_Timer0();
- while(1)
- display(0,6);
- }
- void Init_Timer0(void)
- {
- TMOD=0x01;
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- IE=0x82;
- //EA=1;
- //ET0=1;
- TR0=1;
- }
- void T0_isr(void)interrupt 1
- {
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- tt0++;
- if(tt0==100) //1秒
- {
- tt0=0;
- tt1++;
- if(tt1==60)
- {
- tt1=0;
- tt2++;
- if(tt2==60)
- tt2=0;
- }
- }
- tempdata[0]=duanma[tt2/10]; //分前一位
- tempdata[1]=duanma[tt2%10]; //分后一位
- tempdata[2]=duanma[tt1/10]; //秒前一位
- tempdata[3]=duanma[tt1%10]; //秒后一位
- tempdata[4]=duanma[tt0/10]; //分秒前一位
- tempdata[5]=duanma[tt0%10]; //分秒后一位
- }
- void display(uchar firstbit,uchar num)
- {
- uchar i;
- for(i=0;i<num;i++)
- {
- dataport=0;
- dula=1;
- dula=0;
- dataport=weima[i+firstbit];
- wela=1;
- wela=0;
- dataport=tempdata[i];
- dula=1;
- dula=0;
- delayms(2);
- }
- }
- void delayms(uint ms)
- {
- uint i;
- while(ms--)
- for(i=110;i>0;i--);
- }
复制代码不知道问题出现在哪,数码管显示不对,高手指点下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
数码管显示很乱,根本就没法读数,
我设计本意是显示6位,而数码管显示了8位
说明下:P0口接8位共阴数码管
一周热门 更多>