4-数码管显示
4-1静态数码管显示
LED数码管:
数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件
数码管引脚定义:
阴极都连接在一起称为共阴极
阳极都连在一起称为共阳极
stc89c52单片机的中的数码管是共阴极的
电路图分析
74LS138(138译码器)
C是高位,A是低位
000对应0111 1111(LED1为0) 001对应1011 1111
74HC245
双向数据缓冲器
DIR控制信号流通方向
电容104 10 0000=10 1000pF=100nF
假如我要点亮的数字为6,此时要连通的数码管引脚就为acdefg,87658765这一端从下往上就是0111 1101,所以十六进制就为0x7D
代码:
静态数码管显示
实现第3位(LED6)为6
#include <STC89C5xRC.H>
void main()
{
P24=1;
P23=0;
P22=1;//这三位决定哪一个数码管接通,101根据上面的74LS138电路图来看就是LED6
P0=0x7D;
while(1)
{
}
}
#include <STC89C5xRC.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char location,number)
{
switch(location)
{
case 1:P24=1;P23=1;P22=1;break;
case 2:P24=1;P23=1;P22=0;break;
case 3:P24=1;P23=0;P22=1;break;
case 4:P24=1;P23=0;P22=0;break;
case 5:P24=0;P23=1;P22=1;break;
case 6:P24=0;P23=1;P22=0;break;
case 7:P24=0;P23=0;P22=1;break;
case 8:P24=0;P23=0;P22=0;break;
}
P0=NixieTable[number];
}
void main()
{
Nixie(5,8);
while(1)
{
}
}
4.2动态数码管显示
段选,位选概念
其中会产生段选,位选的冲突,所以在段选后要进行请0操作,防止对下一位的位选产生影响
位选:选择要显示哪一个数码管(每一个数码管中有8个段)
段选:要显示数码管当中的哪一个灯管
#include <STC89C5xRC.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Delay(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void Nixie(unsigned char location,number)
{
switch(location)
{
case 1:P24=1;P23=1;P22=1;break;
case 2:P24=1;P23=1;P22=0;break;
case 3:P24=1;P23=0;P22=1;break;
case 4:P24=1;P23=0;P22=0;break;
case 5:P24=0;P23=1;P22=1;break;
case 6:P24=0;P23=1;P22=0;break;
case 7:P24=0;P23=0;P22=1;break;
case 8:P24=0;P23=0;P22=0;break;
}
P0=NixieTable[number];
Delay(1);
P0=0x00;
}
void main()
{
while(1)
{
Nixie(1,4);
// Delay(20);
Nixie(2,5);
// Delay(20);
Nixie(3,6);
// Delay(20);
}
}
数码管驱动方式
以上这些代码都是使用单片机直接扫描:硬件设备简单,但会耗费大量的CPU时间
专用芯片驱动:内部自带显存,扫描电路,单片机只需要告诉他显示什么即可(例:TM1640)