#include<stdio.h>
#include <REGX52.H>
#include<intrins.h>
void Delay1ms(int a) //@11.0592MHz
{
unsigned char i, j;
int n;
for(n=0;a>n;n++)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
unsigned ch[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,0x7d, 0x07, 0x7f, 0x6f};
void fun(int num,int i)
{
switch(num)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=ch[i];
Delay1ms(1);
// P0=0X00;
}
void main()
{
while(1)
{
fun(1,2);
Delay1ms(500);
fun(2,0);
Delay1ms(500);
fun(3,2);
Delay1ms(500);
fun(4,3);
Delay1ms(500);
fun(5,0);
Delay1ms(500);
fun(6,5);
Delay1ms(500);
fun(7,2);
Delay1ms(500);
fun(8,1);
Delay1ms(500);
}
}
数码管使用共阴极接法8个位选采用74HC138译码器(P22,P23,P4控制Y0-Y7)位选给低电平0相应段选给高电平即可点亮;C为高位、eg:使Y0为低电平则应(000)P2_4=0;P2_3=0;P2_2=0;(由于设备数码管是从右往左排序,为使从左到右故case语句采用倒序)
①共阴数码管码表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,
0 1 2 3 4 5 6 7 8 9 A B
0x39, 0x5e, 0x79, 0x71, 0x00
C D E F 无显示