700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Proteus仿真:LED动态扫描显示接口示例

Proteus仿真:LED动态扫描显示接口示例

时间:2021-07-14 03:47:33

相关推荐

Proteus仿真:LED动态扫描显示接口示例

实现目标

先显示8.8.8.8.8.8.8.8.,即点亮显示器所有段,持续500ms,然后显示“HELLO-21”,并保持

Proteus仿真图

C51代码

#include <intrins.h>#include <REGX52.H>#define TRUE 1#define dataPort P0 /*定义P0为段输出口*/#define ledConPort P2 /*定义P2为位输出口*/unsigned char code ch[8]={0x76,0x79,0x38,0x38,0x3f,0x40,0x5b,0x06}; /*定义‘HELLO-93’对应的数值*void time(unsigned int ucMs);//延时单位:msvoid main(void){unsigned char i,counter=0; /*各LED灯状态值数组的索引*/for(i=0;i<30;i++){//1、显示"8.8.8.8.8.8.8.8.",即点亮显示器所有段,持续约500ms;for(counter=0; counter<8; counter++){ledConPort=counter;dataPort= 0xff; /*点亮选中的LED灯*/time(5); /*延时5毫秒*/}}ledConPort=0xff;time(2000); //2、灭显示器,持续约2秒while(TRUE)//3、显示"HELLO-93",保持。{for(counter=0; counter<8; counter++){ledConPort=counter;dataPort= ch[counter]; /*点亮选中的LED灯*///time(300); /*延时300毫秒,时间较长,可观察动态扫描变化情况*/time(5); /*延时5毫秒,感觉不出扫描显示*/}}}/*********** 延时单位:ms *******************/void time(unsigned int ucMs)//延时单位:ms{unsigned char j;while(ucMs>0){for(j=0;j<10;j++) delay_100us();ucMs--;}}

笔记

dataPort对应的是P0,观察仿真图可以看出,P0接的是位驱动,啥意思呢?就是该显示器有8个LED显示器,位驱动就是控制其中哪一个显示器显示的内容。比如我们需要使得第二个显示器显示字母H,那么首先控制位驱动=1(1是第二个,从0开始计数),然后在段驱动输入H对应的十六进制数 0x76ledConPort 对应的是P2,观察仿真图可以发现,连接的是段驱动,也就是控制一个LED显示器具体的显示内容

思路:其实就是利用人眼睛的视觉停留效果,为了显示“HELLO-21”,本质上就是先显示“H”,再显示"E"… 只是其中的间隔时间非常短,眼睛察觉不出来,视觉上就好像几个字母同时显示。所有代码中利用for循环,首先选择哪一个led显示器,再输出其具体的显示内容,依次循环即可

for(counter=0; counter<8; counter++){ledConPort=counter;dataPort= ch[counter]; /*点亮选中的LED灯*///time(300); /*延时300毫秒,时间较长,可观察动态扫描变化情况*/time(5); /*延时5毫秒,感觉不出扫描显示*/}

上述代码简单理解就是:

首先

ledConPort=0;表示选中第一个LED显示器

dataPort= ch[0] ,表示第一个显示器显示字符“H”

然后

ledConPort=1;表示选中第二个LED显示器

dataPort= ch[1] ,表示第二个显示器显示字符“E”

.

.

.

.

综上:首先选择哪一个显示器,再定义其输出的内容,再延时即可

本文Proteus仿真图及源程序获取见:

运行结果

说明

参考课本:单片机原理与嵌入式系统设计

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。