100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示

【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示

时间:2022-03-28 22:17:19

相关推荐

【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示

一、要求

在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。

二、数码管

1.七段数码管

七段数码管,其实内部由8个发光二极管构成,其中七个为长条形状,构成“8”字,还有一个为小小的圆形,构成小数点。七段数码管各段按地址从高到低名称依次是dp、g、g、e、d、c、b、a。

七段数码管有共阳数码管和共阴数码管之分。

(1)共阳数码管

共阳数码管是将各段的发光二极管的正极连接在一起,将负极分别与各自的控制信号连接。在使用时,其控制信号是低电平时点亮,高电平时熄灭。

(2)共阴数码管

共阴数码管是将各段发光二极管的负极连接在一起,将正极分别与各自控制信号连接。在使用时,控制信号是高电平点亮,低电平熄灭。

2.七段数码表的码表

3.静态显示

静态显示就是将每个数码管的段码分别与单片机I/O引脚相连,从而保证每个数码管上显示的数字总是呈现静止不变的状态。

三、硬件电路分析

如上图所示,本次设计中使用的是两个4位七段数码管,该数码管是共阳数码管。他们的位选公共端通过一个74HC573锁存器与单片机P0口连接,而两个4位七段数码管的段选端通过另外一个74HC573锁存器连接在P0口。位选和段选虽然都是通过了锁存器连接在了单片机同一个I/O口即P0口上,但段选和位选并不会发生冲突。因为与位选相连接的锁存器控制信号是Y6C,而与段选相连接的锁存器控制信号是Y7C,两者锁存器控制信号不同,所以不会发生引脚冲突的情况。由硬件电路连接可以看出,Y6C、Y7C状态实际上就是74HC138的Y6、Y7输出状态,而Y6、Y7输出状态受CBA控制,CBA连接在单片机的P2.7~P2.5脚。

综上所述,要实现对两个4位七段数码管现实的控制,主要就是对P0口和P2.5~O2.7口状态进行设置。

四、程序

#include <reg52.h>#include <intrins.h>#define uchar unsigned char uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e};//共阳段码表void delay_ms(uchar xms)//@11.0592MHz{uchar i,j;while(xms){ _nop_();_nop_();_nop_();i = 11;j = 190;do{while (--j);} while (--i);xms--;}}void channel(uchar n) //74HC138输出选择,n表示第几个输出{switch(n){case 4 :P2 = (P2 & 0x1f) | 0x80;break;case 5 :P2 = (P2 & 0x1f) | 0xa0;break;case 6 :P2 = (P2 & 0x1f) | 0xc0;break;case 7 :P2 = (P2 & 0x1f) | 0xe0;break;}}void SEG_mode(uchar x,uchar y) //x-第x个数码管显示,y-显示的字符{channel(6); //打开位选P0 = 0x01 << x;channel(7);P0 = y;}void SEG_show() //数码管显示{uchar i,j;for(i = 0;i < 8;i++){for(j = 0;j < 16;j++){SEG_mode(i,table[j]);delay_ms(1000);}}for(j = 0;j < 16;j++){channel(6); //开位选P0 = 0xff;channel(7); //开段选P0 = table[j];delay_ms(1000);}}void system_init() //系统初始化,将继电器个蜂鸣器关闭{channel(5);P0 = 0x00;}void main(){system_init();while(1){SEG_show();}}

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