03-共阳极数码管的静态显示
共阳数码管的静态显示
由电路图可知此为共阳数码管
#include <REGX52.H>
unsigned int code num[16] ={
0xc0, // 0 1100 0000
0xf9, // 1 1111 1001 abged 为0
0xa4, // 2 1010 0100
0xb0,//3
0x99,//4
0x92,//5
0x82,//6
0xf8,//7
0x80,//8
0x90,//9
0x88,//A
0x83,//B
0xc6,//C
0xa1,//D
0x86,//E
0x8e,//F
};
// 以毫秒级别的倍数减少
void Delay(unsigned int xms) {
//while(t--);
//while(t--);
unsigned int i,j;
for(i = 0; i < xms;i++) {
for(j = 0;j < 299; j++);
}
}
void _74HC138(unsigned char n) {
switch(n) {
case 4: // LED使能
P2 = (P2 & 0x1f) | 0x80; // 1000 0000
break;
case 5: // 蜂鸣器和继电器使能
P2 = (P2 & 0x1f) | 0xa0; // 1010 0000
break;
case 6: // 数码管位选使能
P2 = (P2 & 0x1f) | 0xc0; // 1100 0000
break;
case 7: // 数码管段选使能
P2 = (P2 & 0x1f) | 0xe0; // 1110 0000
break;
case 0:
P2 = (P2 & 0x1f) | 0x00; // 1110 0000
break;
}
}
void SystemInit(void) {
_74HC138(5);
P0 = 0x00;
_74HC138(4);
P0= 0xff;
}
void showSMG_Bit(unsigned char dat,pos) {
_74HC138(6); // 数码管位选使能
P0 = 0x01 << pos; // 0x01 << 0000 0001
_74HC138(7); // 数码管段选使能
P0=dat;
}
void SMG_Static(void) {
unsigned char i,j;
for(i=0;i<8;i++) {
for(j =0;j<10;j++) {
// 参数1段选 参数2位选
showSMG_Bit(num[j], i);
Delay(500);
}
}
for(i=0;i<16;i++) {
_74HC138(6); // 数码管位选使能
P0 = 0xFF;
_74HC138(7);
P0=num[i];
Delay(4000);
}
}
void main(void) {
unsigned char i,j;
SystemInit();
// 调用该函数可实现上述功能
SMG_Static();
// 第二种方法
for(i=0;i<8;i++) {
_74HC138(6); // 数码管位选使能
P0=0x01<<i; // 从左往右依次点亮 0000 0001 => 0000 0010 =>以此类推
for(j =0;j<10;j++) {
_74HC138(7);
P0=num[j];
Delay(500);
}
}
_74HC138(6);
P0 = 0XFF; // 位选全部点亮
for(i=0;i<16;i++) {
_74HC138(7);
P0=num[i];
Delay(4000);
}
}