数码管滚动显示
我想让一个6位的共阴极数码管滚动显示一个 123,就是1 2 3 u u u( u 表示什么也不显示 )
u 1 2 3 u u
u u 1 2 3 u
这样的,一直滚动显示
程序该怎么写啊? @沉思的牛 :handshake 通过移位位选 你需要把你的电路给出来 你需要给出电路,6个数码管肯定要动态扫描,最常用的有38译码器,和锁存器,来动态扫描显示 #include <REGX52.H>
typedef unsigned char uint8;
typedef unsigned int uint16;
uint8 a;
code uint8 number123 = {0x06,0x5b,0x4f,
0x00,0x00,0x00};
uint16 counter = 0;
sbit P22 = P2^0;
sbit P21 = P2^1;
sbit P20 = P2^2;
sbit P24 = P2^4;
void refresh();
void int_init();
void timer1_init();
MAIN()
{
P24 = 1;
a = 0; a = 1; a = 2; a = 3; a = 4; a = 5;
timer1_init();
int_init();
while(1);
}
void refresh()
{
static uint8 j=0;
switch(j)
{
case 0: P20 = 0; P21 = 0; P22 = 0; j++;P1 = number123];break;
case 1: P20 = 0; P21 = 0; P22 = 1; j++;P1 = number123];break;
case 2: P20 = 0; P21 = 1; P22 = 0; j++;P1 = number123];break;
case 3: P20 = 0; P21 = 1; P22 = 1; j++;P1 = number123];break;
case 4: P20 = 1; P21 = 0; P22 = 0; j++;P1 = number123];break;
case 5: P20 = 1; P21 = 0; P22 = 1; j=0;P1 = number123];break;
default:break;
}
}
void timer1_init()
{
TMOD |= 0x10;
TMOD &= 0xdf;
TH1 = 0xFC;
TL1 = 0x67;
TR1 = 1;
}
void int_init()
{
ET1 = 1;
EA = 1;
}
void interrupt_timer1() interrupt 3
{
static uint8 k=0;
TH1 = 0xFC;
TL1 = 0x67;
counter++;
if(1000==counter)
{
counter = 0;
switch(k)
{
case 0: a = 0; a = 1; a = 2; a = 3; a = 4; a = 5;break;
case 1: a = 5; a = 0; a = 1; a = 2; a = 3; a = 4;break;
case 2: a = 4; a = 5; a = 0; a = 1; a = 2; a = 3;break;
case 3: a = 3; a = 4; a = 5; a = 0; a = 1; a = 2;break;
case 4: a = 2; a = 3; a = 4; a = 5; a = 0; a = 1;break;
case 5: a = 1; a = 2; a = 3; a = 4; a = 5; a = 0;break;
default:break;
}
k++;
if(6 == k) k=0;
}
refresh();
} :huffy:
页:
[1]