请c语言高手帮忙,写一个程序,51单片机显示1234,2S后显示5678 ,一直循环!
#include<reg51.h>
#define uchar unsigned char
bit flag=1;
uchar j,k;
uchar code tab[]={
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
};
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
void delay(unsigned int ms)
{
uchar i;
while(ms--)
for(i=0;i<123;i++);
}
void disp()
{
if(flag)
k=0;
else
k=4;
P0=tab[k+0];
P2_0=0;
delay(1);
P2_0=1;
P0=tab[k+1];
P2_1=0;
delay(2);
P2_1=1;
P0=tab[k+2];
P2_2=0;
delay(2);
P2_2=1;
P0=tab[k+3];
P2_3=0;
delay(2);
P2_3=1;
}
void t0init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
t0init();
while(1)
disp();
}
void t0int() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
j++;
if(j==40)
{
j=0;
flag=!flag;
}
}
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
{
dula=1;
P0=table[a];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[b];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[c];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[d];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[e];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[f];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
上面这段是我以前写得。table是数码管的编码表。dula和wela是锁存器的片选。只用一个IO口控制数码管。
最好看下说明书
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code LED_W[8] = {0,1,2,3,4,5,6,7};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i = 0,j = 0;
while(1)
{
P0 = table[i+1]; // i 值的 个位数
P2 = LED_W[j]; //点亮第一位数码管
Delay(2);
j++;
i++;
if(j == 8) //利用 j 值的变化,来控制数码管数值变化间隔的时间
{
j = 0;
i = 0;
}
}
}
看一下 看看有没有什么启发 可以 建个 表 然后 指针去查询的