AT89c51单片机程序控制两个数码管显示00-59秒表的程序要怎么编啊?

AT89c51单片机程序控制两个数码管显示00-59秒表的程序要怎么编啊?,第1张

display(second)子函数与两个数码管的连接方式有关

void main(void )//主程序

{

TMOD=0x01// 定时器1工作方式一

ET0=1

EA=1

TH0=(65536-10000)/256//定时10ms

TL0=(65536-10000)%256

TR0=0//上电先不启动

while(1)

{

if(key1==0)//判断按键是否按下

{

Delay1ms(10)//延时消抖

if(key1==0)

{

while(key1==0)//等待按键抬起

TR0=!TR0//启动或停止

}

}

if(key2==0&&TR0==0)//判断按键是否按下及是否在走时

{

Delay1ms(10)//延时消抖

if(key2==0)

{

while(key2==0)//等待按键抬起

a=0second=0

}

}

display(second)

}

}

//中断子程序

void Timer0(void) interrupt 1

{

TH0=(65536-10000)/256

TL0=(65536-10000)%256

a++

if(a==100 ) second++

if(second==60) second=0

}

这是两位静态显示电路,程序如下:

#include<reg51.h>

unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}//共阳数码管段码表

unsigned char num//计数变量

unsigned char t0n//T0中断计数

void main()

{

TMOD=0x01//用T0定时,中断方式

TH0=0x3C//晶振12M,定时50ms

TL0=0xB0

IE=0x82

TR0=1

P0=0xc0

P2=0xc0

while(1)

}

//T0中断程序

void T0_int() interrupt 1

{

TH0 =0x3C

TL0 =0xB0

t0n++

if(t0n>=10)//0.5秒到

{

t0n=0

num++//加1

if(num>99)num=0

P0=tab[num/10]

P2=tab[num%10]

}

}

仿真结果

#include<reg51.h>

void delay(int a)

{

while(a--)

}

main()

{

int i

for(i=0i<3i++)

    {

    P1=0x16

    delay(30000)

    P1=0x00

    delay(30000)

    }

    P1=0x16

    P2=0x35

    while(1)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7809134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存