(case后面的语句是控制三八译码器的过程)下面是代码,不明白的地方是switch语句用break跳出来之后不应该是从刚开始的计时器定时开始重新循环吗,怎么能实现动态显示呢?
#include <reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xa7,0xa1,0x86,0x8e};
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit LED = P0^0;
main()
{
uint8 counter,i,j=0;
ENLED = 0;
ADDR3 = 1;
TMOD = 0x01;
TH0 = 0xB8;
TL0 = 0x00;
TR0 = 1;
while(1)
{
if(1 == TF0)
{
TF0 = 0;
TH0 = 0xB8;
TL0 = 0x00;
counter++;
}
if(50 == counter)
{
P0 = number[i++];
counter = 0;
}
if(i == 16)
{
i = 0;
}
switch(j)
{
case 0:ADDR0 = 0; ADDR1 = 0; ADDR2 = 0;j++;break;
case 1:ADDR0 = 1; ADDR1 = 0; ADDR2 = 0;j++;break;
case 2:ADDR0 = 0; ADDR1 = 1; ADDR2 = 0;j++;break;
case 3:ADDR0 = 1; ADDR1 = 1; ADDR2 = 0;j++;break;
case 4:ADDR0 = 0; ADDR1 = 0; ADDR2 = 1;j++;break;
case 5:ADDR0 = 1; ADDR1 = 0; ADDR2 = 1;j=0;break;
}
}
}
程序我已经用板子试了,是好用的
本回答被提问者采纳电路图没什么用,我问的就是这个循环过程
追答这是八位数码管的程序吗?
追问对的,6个8位数码管通过三八译码器实现动态显示
追答板子上是不是每个数码管都显示一个数字1s后显示另一个数字啊?