问:求单片机c语音编写:计时器,要求两个数码管。从0计时到99。有启动/开关,同一个按钮。 复位键

问:求单片机c语音编写:计时器,要求两个数码管。从0计时到99。有启动/开关,同一个按钮。 复位键一个。89c51单片机。急

第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();
//
调显示函数

}
}本回答被提问者和网友采纳