第1个回答 推荐于2016-05-20
#include <reg51.h>
#define uchar unsigned char
#define uint
unsigned int
uint num;
uchar code seg_data[ ] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0xff};//0~9
的段
码表
,0xff
为熄灭符
uchar data disp_buf[2] = {0x00,0x00};//
显示缓冲区
/********
以下是延时函数
********/
void Delay_ms(uint xms)
//
延时程序,
xms
是形式参数
{
uint i, j;
for(i=xms;i>0;i--)
// i=xms,
即延时
xms, xms
由实际参数传入一个值
for(j=115;j>0;j--);
//
此处分号不可少
}
/********
以下是显示函数
********/
display()
{
disp_buf[0]=num/10;
//
取出计数值的十位
disp_buf[1]=num%10;
//
取出计数值的个位
P0=seg_data[disp_buf[1]];
//
显示个位
P2=0x7f;
//
开个位显示
(
开第
8
只数码管
)
Delay_ms(5);
//
延时
5ms
P0=seg_data[disp_buf[0]];
//
显示十位
P2=0xbf;
//
开十位显示
(
开第
7
只数码管
)
Delay_ms(5);
//
延时
5ms
P2=0xff;
//
关闭显示
}
/********
以下是计数值读取函数
********/
uint read()
{
uchar tl,th1,th2;
uint val;
while(1)
{
th1=TH0;
//
第
1
次读取
TH0
tl=TL0;
th2=TH0;
//
第
2
次读取
TH0
if(th1==th2)
break;
//
若两次读取的相同,则跳出循环,开始计算计数值,若两
次读取的不同则继续循环
}
val=th1*256+tl;
//
计算计数值
return val;
//
返回计数值
}
/********
以下是主函数
********/
void main()
{
TMOD=0x05;
//
设置定时器
T0
为工作方式
1
计数方式
TH0=0;TL0=0;
//
将计数器寄存器初值清零
TR0=1;
while(1)
{
num=read();
//
调计数值读取函数
if(num>=100)
{
num=0;
//
若计数值大于
100
,则
num
清
0
TH0=0;
//
将计数器寄存器值清零
TL0=0;
}
display();
//
调显示函数
}
}本回答被提问者和网友采纳