永发信息网

用C语言keil3软件编写个四位秒表,暂停/开始,复位

答案:1  悬赏:50  手机版
解决时间 2021-11-17 00:45
  • 提问者网友:记得曾经
  • 2021-11-16 15:46
用C语言keil3软件编写个四位秒表,暂停/开始,复位
最佳答案
  • 五星知识达人网友:洒脱疯子
  • 2021-11-16 15:53
最低位是什么?秒还是百分秒?追问00.00 这样的
01.00 算一秒追答刚好有现成的。哈哈,好像为你量身定制的。
//12M晶振。4位共阴数码管,P0 段码,P2.1~P2.3 位控
//显示 00.00~99.99
#include
#define uchar unsigned char
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;

sbit P07=P0^7;
sbit KS=P1^0; //开始/暂停
sbit KR=P1^1; //复位

uchar time,xs,ge,shi,bai,qian;
uchar code tab[ ]= {
0x3F,
0x06,
0x5B,
0x4F,
0x66,
0x6D,
0x7D,
0x07,
0x7F,
0x6F,
};

void delay_ms(unsigned int ms) //1ms延时
{
uchar a;
while(ms--)
for(a=123;a>0;a--);
}

void display();

void T0intinit( ) //定时器T0初始化
{
TMOD=0x01;
TH0=(65536-10000)/256; //10ms定时
TL0=(65536-10000)%256;
EA=1;
ET0=1;
}

void main()
{
T0intinit( );
while(1)
{
display( );
while(!KS) //开始键
{
display( );
if(KS)
TR0=!TR0;
}

while(!KR) //清零键
{
display( );
if(KR)
TR0=0;
qian=0;
bai=0;
shi=0;
ge=0;
}
if(bai==10)
{
bai=0;
qian++;
}
if(qian==10)
{
qian=0;
TR0=0;
}
}
}

void display( )
{
P23=0;
P0=tab[ge];
delay_ms(1);
P23=1;
P22=0;
P0=tab[shi];
delay_ms(1);
P22=1;
P21=0;
P0=tab[bai];
P07=1;
delay_ms(1);
P21=1;
P20=0;
P0=tab[qian];
delay_ms(1);
P20=1;
}

void T0int( ) interrupt 1 //定时器T0中断 方式1
{
TH0=(65536-10000)/256; //重装10ms定时常数
TL0=(65536-10000)%256;
ge++;
if(ge==10)
{
ge=0;
shi++;
}
if(shi==10)
{
shi=0;
bai++;
}
}追问谢谢 请问 这个 数码管输出的事哪个口 还有用是 非门还是什么 能 仿真 截个图么追答//12M晶振。4位共阴数码管,P0 段码,P2.1~P2.3 位控
上面写了。
实物的话,不用非门,P0口上拉8 只500欧电阻。图不知能不能发上。追问你好!共阴的数码管我这边难找呀 你能把程序改下 共阳 的么 输出P3口 麻烦了追答电阻要改为串联限流电阻,不知为什么要用P3口输出 。P0口电流大一倍哩。
#include
#define uchar unsigned char
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;

sbit P37=P3^7;
sbit KS=P1^0; //开始/暂停
sbit KR=P1^1; //复位

uchar time,xs,ge,shi,bai,qian;
uchar code tab[ ]={
0xC0,
0xF9,
0xA4,
0xB0,
0x99,
0x92,
0x82,
0xF8,
0x80,
0x90,
};

void delay_ms(unsigned int ms) //1ms延时
{
uchar a;
while(ms--)
for(a=123;a>0;a--);
}

void display();

void T0intinit( ) //定时器T0初始化
{
TMOD=0x01;
TH0=(65536-10000)/256; //10ms定时
TL0=(65536-10000)%256;
EA=1;
ET0=1;
}

void main()
{
T0intinit( );
while(1)
{
display( );
while(!KS) //开始键
{
display( );
if(KS)
TR0=!TR0;
}

while(!KR) //清零键
{
display( );
if(KR)
TR0=0;
qian=0;
bai=0;
shi=0;
ge=0;
}
if(bai==10)
{
bai=0;
qian++;
}
if(qian==10)
{
qian=0;
TR0=0;
}
}
}

void display( )
{
P23=1;
P3=tab[ge];
delay_ms(1);
P23=0;
P22=1;
P3=tab[shi];
delay_ms(1);
P22=0;
P21=1;
P3=tab[bai];
P37=0;
delay_ms(1);
P21=0;
P20=1;
P3=tab[qian];
delay_ms(1);
P20=0;
}

void T0int( ) interrupt 1 //定时器T0中断 方式1
{
TH0=(65536-10000)/256; //重装10ms定时常数
TL0=(65536-10000)%256;
ge++;
if(ge==10)
{
ge=0;
shi++;
}
if(shi==10)
{
shi=0;
bai++;
}
}追问你好 ! 有点慢 实物刚做出来 没有消隐 显示的 1的话 还有5个也有点亮 这个情况 看了下 好像是程序有点问题 你能看下么追答程序看不出有什么问题。我是4位显示的,你怎么还有另外5位也有点亮?
是不是串联的电阻用小了?
不然延时时间改大点 delay_ms(1); //改成delay_ms(2);试试追问对 我用的事四位u 我的意思 一个数码管 abcdefg 比如显示1 是ab 但是 还有其他淡淡的亮追答延时改大点试试
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯