本次学习有很多知识点,我将分条总结
一.单个数码管
单个数码管分为共阴极和共阳极,第一个电路是共阴极数码管,若使这个数码管可使用,3.8那边应该接阴极,第二张图是共阳极数码管,若使数码管可用应在3.8那边接阳极。
二.多个数码管
多个数码管和单个数码管很相似,区别是共阴极的数码管,阳极和其他数码管阳极相连,共阳极的同上。每个数码管的共极另一端都和其他数码管对应相连,比如A连接A,B连接B,这也使得没有办法让所有数码管同时显示不同的信息,比如我选中了LED1和LED2,我让LED1显示5就不能同时让LED2显示6,最多让LED1与LED2同时显示5.
当然,如果我们给11线上电,所有的数码管A线都会上电,如果我们只想让某一个数码管亮,我们就可以选择他们共极那段是否给相应的电,比如我们选的是共阴极数码管,那我们只需要在我们想要的那个数码管共极接上低电平其他数码管接高电平即可实现只让选定数码管亮的结果。
三.数码管原理图
数码管左边的74HC245芯片有三个作用:1.增强驱动能力(电流放大)2.缓冲隔离 3.双向总线收发。在这个实验主要作用是增强驱动能力,单片机的驱动能力弱,电流小,如果直接连接LED,LED不会很亮,但是经过74HC245后LED亮度增强,是因为74HC245用外部电源去供电,电流足以使LED亮。
74HC245芯片的DIR引脚是方向控制引脚 :
DIR=1:A → B 方向(P0 口的数据,送到 B 侧,也就是数码管段引脚)DIR=0:B → A 方向(反过来,从数码管侧读回数据到 P0)
OE引脚是输出使能引脚,低电平有效
OE=0:芯片开启,总线连通,可以传输数据
OE=1:芯片高阻态,两边断开
单片机从左边输入信号给74HC245,然后信号被放大输入给LED
RP5是限流电阻,保护电路
J21是3针跳线帽-
1 脚:VCC
2 脚:LE(74HC245 的 DIR 方向控制脚)
3 脚:P1_0(单片机 P10 IO 口)
作用
1.短接 1 脚和 2 脚→ LE 直接接到 VCC(固定高电平)→ 74HC245 方向永久固定 A→B,P0 的数据一直输出到数码管段,不需要单片机控制方向
2.短接 2 脚和 3 脚 → LE 接到单片机 P1.0→ 由单片机程序,用 P1_0 软件控制 DIR 方向,可切换传输方向
四.138译码器
主要作用是可以让端口变少,用左边(P22,P23,P24)三个端口控制右边(Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7)8个端口。例如左边端口是100,则会控制右边Y0(LED1),此处用到二进制
G1,G2A,G2B是使能脚只有G1接VCC,G2A,G2BV接GND时候芯片可以正常译码工作。
整体过程就是单片机向 74LS138 输入 3 位译码信号,138 译码后输出低电平选通信号,送到数码管公共端(COM 位选端),选择当前需要点亮的是哪一位数码管(位选);同时单片机 P0 口输出段码,经过 74HC245 增强驱动能力后送到数码管 a~dp 段引脚,控制该位数码管显示的数字 / 字符(段选)。动态扫描时轮流选通每一位,利用人眼视觉暂留,实现多位数码管同时稳定显示。
五.数组
这里重点是x[0]指的是第一个元素,x[1]指的是第二个元素,x[2]指的是第三个元素
六.子函数
代码展示
过程中遇到的问题
1.为什么在seitch(Location)里面case1后面的代码是000而不是001?
因为他俩没有必然联系,不能因为case1就让后面位001,前面case+数字只是因为switch函数的排序,而后面的代码是二进制,从000到111一共8个数,对应8个LED
2.为什么代码为000指的是第一个LED,为什么001不是指第一个LED?
同样的,他们没有必然联系,只是排序。他们之间对应关系如下图
3.子函数知识掌握不牢
这是错误代码
子函数的形式是
返回值类型 函数名(形参列表)
{
函数内部代码;
return 返回值; // 如果返回值是void,这一句可以省略
}
先写返回值类型,即char int等等,再写定义的函数名字,再写括号里面的形参列表,形参要定义类型!!!
1).我写代码时候返回值类型写错了,应该写void,因为我们在下面使用这个子函数后不需要返回值
2).我的形参没有定义类型
应该为这样
4.我把子函数写入了void main,这样会嵌套使用,C51 中函数不能在 main 函数内部进行嵌套定义,main 函数与子函数属于平级关系;main 函数内部只可以对子函数进行调用,不能把子函数的定义写进 main 的大括号里面。
应该是这样
5.忘记写while循环
失误点:主函数忘记添加while(1)死循环。若不加该循环,main 函数执行完一遍代码后就会退出主函数,程序停止运行;while(1)需要放置在 main 函数内部末尾,让程序持续循环扫描数码管,实现数码管稳定动态显示。
6.把138译码器与LED关系搞反
失误点:混淆 74HC138 译码器输出与数码管位序对应关系。开发板数码管编号是从右往左依次为 LED1~LED8,之前误按从左到右理解,导致 switch 位选编码写反,最终显示的数字出现在错误的数码管位置,修正 case 译码编码顺序后显示位置恢复正常。
138输入P22,P23,P24 译码输出 对应的数码管 位置
000 Y0 LED8 最左侧
001 Y1 LED7 左数第二位
010 Y2 LED6 左数第三位
011 Y3 LED5 左数第四位
100 Y4 LED4 左数第五位
101 Y5 LED3 左数第六位
110 Y6 LED2 左数第七位
111 Y7 LED1 最右侧
最后成果展示