请c语言高手帮忙,写一个程序,51单片机显示1234,2S后显示5678 ,一直循环!

只有4位管,段口和位口可以你来设置,共阴管!我主要是在显示程序上没有思路!希望你帮一下忙!谢谢

#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;

}

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-17
段口和位口各声明一个数组。数码管编码一个数组。动态扫描就是。
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口控制数码管。
第2个回答  2011-08-17
具体 硬件怎么连接 还真不知道 你的led 的 引脚 接口啊 显示 发光二极管的 顺序也不知道

最好看下说明书

#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;
}
}
}

看一下 看看有没有什么启发 可以 建个 表 然后 指针去查询的

...51单片机显示1234,2S后显示5678 ,一直循环!
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();...

怎么用c语言编写数码管1234和5678来回闪烁
1.51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include<reg51.h> \/\/51单片机头文件#include <intrins.h> \/\/包含有左右循环移位子函数的库#define uint unsigned int \/\/宏定义#define uchar unsigned char \/\/宏定义sbit beep=P2^3;void delay(uint z) \/\/延时函数,z的...

用51单片机C语言编写程序实现6位共阴极数码管循环显示0123456789ABCDEF...
\/\/数码管段选 \/* 8 9a b c def*\/code uchar wen[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};\/\/数码管位选uchar huancun[] = {0x00,0x00,0x00,0x00,0x00,0x00};\/\/数码管段选缓存sbit duan = P2^6;\/\/段选sbit wei = P2^7;\/\/位选void delay(uchar x)\/\/延时函数...

大神,求51单片机做简易计算器的那个c语言程序
\/\/4*4键盘检测程序,按下键后相应的代码显示在液晶屏上 \/\/显示5位后,第6次显示操作符号 \/\/再显示下一个数 \/\/ 键值与功能对应表 \/\/键值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \/\/功能 0 1 2 3 4 5 6 7 8 9 + - × ÷ = 清零 include<reg52.h> sbit beep...

51单片机设计,求用一个按键能显示一个七段数码管1~7的c语言程序。
include<reg51.h> define uchar unsigned char uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};sbit key=P1^0;main(){ uchar i,key;i=1;while(1){ P1=table[i];if(key==0){ while(key==0);i++;if(i>7)i=1;} } } ...

实现单片机信号灯1-8依次循环点亮的程序怎么写
电路很简单八个led灯接在p1口.运行后看到的效果是 从第一个灯开始 随着时间变化 二进制数的递减 所有的灯都会依次的点亮,当全部的灯都被点亮后再重新开始这个过程 一直循环下去 单片机是不是很有趣?下面是c语言程序源码 include <reg51.h> void delay100ms(); \/\/如果函数是在主函数后面定义...

51单片机动态显示学号后8位
table[10]={...};\/\/0-9的七段码 while(1){for(i=0;i<8;i++){weila=1;\/\/打开位锁存器P0=1<

51单片机显示八位数码管的C语言程序
1、最开始,我们先打开keil。2、接着,我们要定义好库函数,想要实现动态数码灯,这个步骤是很重要的。3、接着,我们加上一条循环语句。4、最后,我们把先前定义的延时语句delayms写好。5、最后,点击这里进行编译,生成一个hex文件。6、如果这里无错误警告的话,就说明我们的程序写对了,那我们就可以...

用c语言循环语句怎么写一个51单片机的时钟啊,用8个数码管显示时间。
disdat[3]=min%10;disdat[4]=min\/10;disdat[5]=10;disdat[6]=hour%10;disdat[7]=hour\/10; }void flash(){switch(flashbit){case 0:break;case 1:disdat[6]=0x10;disdat[7]=0x10;delay(50);dischg();delay(80);break;case 2:disdat[3]=0x10;disdat[4]=0x10;delay(50);...

51单片机的共阴数码管怎么显示数字(c语言)
要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。以显示数字“0”为例,c语言程序如下:include<reg52.h> define uchar unsigned char define uint unsigned int \/\/数码管的段码编码 Uchar table[10] ={0x3f,0x06,...

相似回答