单个数码管循环显示0到9的程序。

单个数码管循环显示0到9的程序。,第1张

函数中的P2 = LED_CODE[led]led++可以删去,没有任何的意义

,因为定时和循环显示都在中断函数里面完成了,主雀樱函数只是起了一个绝孝初始化的作用,led++影响LED_CODE[led]的值,它使LED_CODE[10] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }数组中的10个值依次赋给P2,依次显示0——9的数字,即当led = 0时,P2接受0xC0,对应数码显示0,当led = 1时,P2接受LED_CODE[1]=0xF9,对应显示1,依次类推,从而顷宏丛显示0——9。

#include <reg51.h>

unsigned int num,a

sbit key0=P1^0

sbit key1=P1^1

sbit key2=P1^2

sbit key3=P1^3

bit flag

unsigned char code led_code[20] = {

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}

void delay(unsigned char i)

{

unsigned char j

for(i>0i--) for(j=110j>启蔽氏0j--)

}

void keyscan()

{

/*实现加法功能*/

if(key0==0) {

delay(7)

if(key0==0) {

num++

if(num==10) num=0

while(key0==0)

}

}

/*实现减法功能*/

if(key1==0) {

delay(7)

if(key1==0) {

num--

if(num==-1) num=9

while(key1==0)

}

}

/*实现清零功能*/

if(key2==0) {

delay(7)

if(key2==0) {

num=0

while(key2==0)

}

}

/*实现定时器1方式1定并宽时1S使得数码悄散管加1显示功能*/

if(key3==0) {

delay(7)

if(key3==0) {

flag = ~flag

while(key3==0)

}

}

}

void T1_ini()

{

TMOD=0X10

TH1=(65536-50000)/256

TL1=(65536-50000)%256

EA=1

ET1=1

TR1=1

}

void timer1() interrupt 3

{

a++

TH1=(65536-50000)/256

TL1=(65536-50000)%256

}

void display()

{

P3=led_code[num]

}

void main()

{

T1_ini()

while(1)

{

keyscan()

display()

if(a >= 20 &&flag) {

a = 0

num++

if(num==10) num=0

}

}

}

试试看。

可以这样实现:

定义一个消隐段码信洞(现在你已经实现了数字0~9的段码),该段码使数码管所有段(即LED)全部熄灭,定义在段码表LED_code[10]位置(LED_code[9]对应数字9);

之后你可樱历以在点亮数码管之前取段脊坦搜码的程序中增加前导0的判断(很简单,请自己思考怎么实现),若判断是前导0,则P0=~LED_code[10](取代楼主之前的P0=~LED_code[led_num[i]],此时led_num[i]=0)。

OK!


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

原文地址: https://outofmemory.cn/yw/12414232.html

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

发表评论

登录后才能评论

评论列表(0条)

保存