电子说
目录
一、前言
二、芯片使用
1、74hc245
2、74ls138译码器
三、硬件连接
四、软件代码
五、效果展示
六、代码链接
数码管进行显示成果后,可根据自己的想法进行改进。本设计采用八位数码管进行循环显示0~f,其中涉及到段码及位码的调用,可更深一步的理解数码管的使用。
本设计中数码管的段选使用74hc245进行驱动。可以为数码管提供足够且稳定的电压,数码管与74hc245芯片之间需加电阻进行分压以保护数码管不会因为电压过大而烧毁。
芯片引脚功能:
第1脚DIR,为输入输出端口转换用, DIR=“1”高电平时信号由“A”端输入“B”端输出, DIR=“0”低电平时信号由“B”端输入“A”端输出。
第2~9脚“A”信号输入输出端,A1=B1﹑﹑﹑﹑﹑﹑A8=B8,A1与B1是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。 第11~18脚“B”信号输入输出端,功能与“A”端一样,不在描述。
第19脚G,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用
第10脚GND,电源地。
第20脚VCC,电源正极。
序号 | 名称 | 功能 |
---|---|---|
1 | DIR | 输入输出转换端口,高电平A到B,低电平B到A。 |
2~9 | A0~A7 | 输入输出端口 |
10 | GND | 电源负极 |
11~18 | B7~B0 | 输入输出端口 |
19 | OE | 使能端,高电平信号不导通,低电平导通 |
20 | VCC | 电源正极 |
本设计中数码管的位选使用138译码器进行驱动,使用的数码管为共阴极数码管。
芯片引脚功能:
A0~A2对应Y0——Y7;A0,A1,A2以二进制形式输入,然后转换成[十进制,对应相应Y的序号输出低电平,其他均为高电平;
序号 | 名称 | 功能 |
---|---|---|
1~3 | A0、A1、A2 | 地址输入端 |
4、5 | E3、E2 | 选通端(低电平有效) |
6 | E1 | 选通端(高电平有效) |
8 | GND | 电源负极 |
7、9~15 | Y7~Y0 | 输出端 |
16 | VCC | 电源正极 |
实物图
原理图
最小单片机系统
驱动电路
位码控制电路
main主函数
主函数较为简单,对数码管显示函数的调用,以及定时器函数的初始化。
void main() { Timer0Init(); //定时器0初始化 while(1) { DigDisplay(); //数码管显示函数 } }
void Timer0() interrupt 1
定时器函数,用于调整循环的快慢以及显示数字的变化
TH0=(65536-6000)/256; //给定时器赋初值,定时10ms TL0=(65536-6000)%256; a--; if(a==0) { j++; a=100; if(j==16) { j=0; } }
大致讲解:在进行位选后,相对应的段码就会选出来。程序中i用于位选。对应的段码是m。m=j+i是由于0~f有16位
数码管段码、位码显示函数。
void DigDisplay() { u8 i; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } m=j+i; if(m>=16) m=m-16; P0=smgduan[m];//发送段码 delay(100); //间隔一段时间扫描 P0=0x00;//消隐 } }
关注公众号“小小创客者”回复“数码管循环显示数字”获得代码及仿真,如有错误欢迎指正。
审核编辑 黄昊宇
全部0条评论
快来发表一下你的评论吧 !