如何在10位LED数码管显示自己的学号

如何在10位LED数码管显示自己的学号,第1张

#include <reg51.h>

unsigned char num,num2=0//num用于计数,刷新数码管,num2用于选择要显示的数字

unsigned char code display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}//数码

unsigned char com[]={0x01,0x02,0x04,0x08}//位选地址

void main()

{

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

TH0 = (65536-917)/256 //1ms延时初值计算

TL0 = (65536-917)%256

EA=1//开总中断

ET0=1//定时器0中断

TR0=1//开始计时

while(1){

if(num==10){ //定时器中断10次,也就是10ms

num=0 //清零

P1=~com[num2]//送入位选信号

P2=0xff//消影

P2=display[num2]//送入段选信号

num2++//num2=0~3,四个数码管轮流显示。

if(num2>=4)

num2=0

}

}

}

void Timer0() interrupt 1 //定时器中断

{

TH0 = (65536-917)/256 //重新赋值

TL0 = (65536-917)%256

num++//

}

然后就是一个使用点的例子,实现59s的计时,电路图和上边是一样的,直接上代码:

#include <reg51.h>

unsigned char code display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}

unsigned char com[]={0x01,0x02,0x04,0x08}

unsigned char num,num2=0,time[4]

unsigned int num3

void main()

{

TMOD=0x01

TH0 = (65536-917)/256

TL0 = (65536-917)%256

EA=1

ET0=1

TR0=1

time[0]=0

time[1]=0

time[2]=0

time[3]=0

while(1){

if(num==10){

num=0

P1=~com[num2]

P2=0xff

P2=display[time[num2]]

num2++

if(num2>=4)

num2=0

}

if(num3==1000)//计数1000次,计时1s

{

time[3]++//更新第四位

if(time[3]>=10)

{

time[3]=0

time[2]++//更新第三位

if(time[2]>=6)

time[2]=0

}

num3=0

}

}

}

void Timer0() interrupt 1

{

TH0 = (65536-917)/256

TL0 = (65536-917)%256

num++

num3++

}

使用上述代码,就可以实现了

把LED看作是8位的I/O输出,然后看是阴极的还是阳极的,也就是给高电平点亮,还是低电平点亮。这个买LED的时候有说明的。然后要显示某个数字时,同时点亮所需的其中几个字段。就比如1点亮右边两个等等...把同时要点亮的字段编成一个码就叫段码。0000 0011H 这是二进制编码,最后两个是高电平对应最右边两个段,这是0x03就是对于的1的段码,把这个写到8位的I/O口就点其中一个LED为1. 然后编写程序片选不同的LED,然后I/O写上不同的段码就能显示数字了。

1、首先我们打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并启动器添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。

2、导入51单片机的头文件以及LCD1602的头文件。

3、创建一个延时函数,可以传入想要具体延时的时长,其内部实现是由一个二重循环,两个循环的次数相乘积。

4、然后创建写命令的函数,指定RS和E同时为0时,才可以写入命令,设定完成后,将com写入输出端口,规定写命令时,E为正脉冲,然后空 *** 作一个机器周期等待机器反应。

5、然后创建写数据的函数,规定写数据时,E为正脉冲,规定当RS=1和RW=0时才可以写入数据,然后将数据从输出端口输出,最后让E产生正跳变。

6、然后创建初始化LCD1602的函数,指定显示模式位两行显示,5*7,8位数据、整体显示,无光标,无闪烁、写入一个字符后地址指针加1,最后进行清屏 *** 作。

7、最后在主函数中首先执行LCD1602的初始化函数,首先创建一个无限循环,然后添加两个字符串,这里以两行显示百度经验的网址为例,再进行延时以及使用清屏函数进行刷新。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存