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--);
- }
复制代码不知道问题出现在哪,数码管显示不对,高手指点下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
文件名:秒表.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(void);
void Init_Timer0(void);
void delayms(uint);
void main(void)
{
Init_Timer0();
while(1)
display();
}
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(void)
{
dataport=0xfe;
wela=1;
wela=0;
dataport=tempdata[0]; dula=1;
dula=0;
delayms(1);
dataport=0xfd;
wela=1;
wela=0;
dataport=tempdata[1];
dula=1;
dula=0;
delayms(1);
dataport=0xfb;
wela=1;
wela=0;
dataport=tempdata[2];
dula=1;
dula=0;
delayms(1);
dataport=0xf7;
wela=1;
wela=0;
dataport=tempdata[3];
dula=1;
dula=0;
delayms(1);
dataport=0xef;
wela=1;
wela=0;
dataport=tempdata[4];
dula=1;
dula=0;
delayms(1);
dataport=0xdf;
wela=1;
wela=0;
dataport=tempdata[5];
dula=1;
dula=0;
delayms(1);
dataport=0xbf;
wela=1;
wela=0;
dataport=tempdata[5];
dula=1;
dula=0;
delayms(1);
}
void delayms(uint ms)
{
uint i;
while(ms--)
for(i=110;i>0;i--);
}
这段代码中的dataport=tempdata[0-5]; 更改成dataport=duanma[X];
看看能否静态显示个个数字
一周热门 更多>