今天学习数码管:
首先在原理图上找到数码管:
开发板有两块数码管, 由电路图可以看出, com1,com2,com3,com4控制哪个数码管点亮,a1,b1………dp1控制选择的数码管如何亮. 并且数码管是共阴极, 那么将数码管点亮为[0,1,2,3,4,5,6,7,8,9]的代码为[0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90]
找到com1,com2,com3,com4 和a1,b1………dp1的控制端口:
和控制蜂鸣器的方法一样, 需要先用74HC02置高Y6C和Y7C来控制数码.
首先选择点亮哪个数码管,要先置低74HC02的Y6口.对应译码器为110,也就是P2 = (P2&0x1F) | 0xC0;之后对P0写入数据控制数码管.
然后控制a1,b1………dp1以选择数码管数字,置低74HC02的Y7口, 对应74HC138译码器写入111,也就是P2 = (P2&0x1F) | 0xE0; 之后对P0写入以选择数码管点亮的数字
下面贴上数码管的代码:
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar discom; //数码管选择位
sbit BUZZ=P0^6;
sbit RELAY=P0^4;
void CloseBUZZ();
void Display();
void main()
{
CloseBUZZ();
while (1)
{
Display();
}
}
void CloseBUZZ()
{
P2=(P2&0x1f)|0xa0;
BUZZ=0;
RELAY=0;
P2&=0x1f;
}
void Display()
{
P0=0xFF; //首先将数码管消隐,(将单个数码管的灯管全部关闭)
P2=(P2&0x1f)|0xe0;
P2&=0x1f;
P0=(1<<discom);
P2=(P2&0x1f)|0xc0; //选择点亮哪个数码管
P2&=0x1f;
P0=table[discom]; //选择数码管点亮的数字
P2=(P2&0x1f)|0xe0;
P2&=0x1f;
discom++;
if (discom==8)
discom=0;
}
显示效果为数码管从左向右依次显示 0,1,2,3,4,5,6,7,8,9