|
我使用的板子上有8个动态数码管。可以根据自己的动态数码管个数修改。动态数码管和静态数码管的区别是:动态数码管多了个位选。我使用板子上有一个74HC138芯片,叫做3-8译码器,使用该芯片控制动态数码管位选。下面简单介绍一下这个芯片:该芯片A0~A2是输入口,Y0~Y7是输出口,输入输出受E1,E2,E3控制,E1、E2要接地,E3接VCC才可以正常输出。大家可以自行在网上搜索该芯片的真值表来进行编程。使用该芯片驱动动态数码管有两个好处:
1. 大大节约单片机的I/O口,尤其是51单片机。
2. 增强对动态数码管的驱动能力,显示更清楚。(相比直接用8个I/O口驱动)
段选接了74HC245芯片,该芯片非常简单,总结一句话就是:I/O口输出高电平,它的输出端就输出高电平。
我分别用了两种方法实现了动态数码管的显示,下面直接上代码。
单片机源程序如下:
- #include "reg52.h"
- typedef unsigned char u8;
- typedef unsigned int u16;
- /* 对三线-八线译码器的三个输入引脚定义 */
- sbit LSA = P2^2;
- sbit LSB = P2^3;
- sbit LSC = P2^4;
- /* 用数组储存0~F的值,共阴码表 */
- //u8 code smgduan[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
- // 0x7c,0x39,0x5e,0x79,0x71};
- /* 定义一个1314-520 数码 */
- u8 code smgduan[8] = {0x06,0x4f,0x06,0x66,0x40,0x6d,0x5b,0x3f};
- /* 声明一个直接控制数码管位的函数 */
- //void direct_control();
- /* 延时函数 */
- void delay(u16 i)
- {
- while(i--);
- }
- /* 定义八个数码管显示器的位选函数 ,扫描数码管 */
- void Digdisplay()
- {
- u8 i;
- for(i = 0; i < 8; i++)
- {
- switch(i)
- {
-
- case (0):
- LSA = 0; LSB = 0; LSC = 0; break; // 000
- case (1):
- LSA = 1; LSB = 0; LSC = 0; break; // 001
- case (2):
- LSA = 0; LSB = 1; LSC = 0; break; // 010
- case (3):
- LSA = 1; LSB = 1; LSC = 0; break; // 011
- case (4):
- LSA = 0; LSB = 0; LSC = 1; break; // 100
- case (5):
- LSA = 1; LSB = 0; LSC = 1; break; // 101
- case (6):
- LSA = 0; LSB = 1; LSC = 1; break; // 110
- case (7):
- LSA = 1; LSB = 1; LSC = 1; break; // 111
- }
- P0 = smgduan[i];
- delay(100); //改变参数的值能实现滚动显示。最大为65535,否则会溢出。
- P0 = 0x00; //清空数码管,以防止出现重影。
- }
- }
- void main(void)
- {
-
- while(1)
- {
- Digdisplay();
- // direct_control();
- }
- }
- /* 直接控制数码管位 函数的定义 */
- /*void direct_control()
- {
- u8 i;
- for(i = 0; i < 8; i++)
- {
- switch(i)
- {
- case (0): P1 = 0xfe; break;
- case (1): P1 = 0xfd; break;
- case (2): P1 = 0xfb; break;
- case (3): P1 = 0xf7; break;
- case (4): P1 = 0xef; break;
- case (5): P1 = 0xdf; break;
- case (6): P1 = 0xbf; break;
- case (7): P1 = 0x7f; break; //直接控制8位数码管,不使用3-8译码器
- }
- P0 = smgduan[i];
- delay(100);
- P0 = 0x00;
- }
- } */
复制代码
所有资料51hei提供下载:
DT_S_M_G.zip
(19.43 KB, 下载次数: 10)
|
-
1.png
(27.32 KB, 下载次数: 41)
3线-8线译码器逻辑图
|