51单片机控制数码管循环显示0到9,延时2秒,到9后重新开始.

#include<reg51. h>

#define uchar unsi gned char #define uint unsigned int

uchar code table []= {0x3f, 0x06, 0x5b, 0x4f, 0x66,

0x6d, 0x7d, 0x07, 0x7f, 0x6f}; void delay(unsigned int i) {
unsigned int k
for(k=0;k<i;k++)
}
void main ()

while(1)

{
int i;
for (i=0;i<10;i++)
P0=tab1e[i];
delay (500); }
}

这样哪有问题吗 我找书上改的 我是初学者 大家说的详细点哈

你这是用于一位静态数码管的显示程序,P0口接有一位共阴数码管。程序中有不少的错误。修改如下,这是仿真测试通过的:

#include<reg51.h>


仿真结果如下,请及时采纳。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-14
单片机有很多种,编程要根据不同单片机进行。
编程思想为:
main{
设置单片机上与数码管相连的引脚为输出,
设置单片机中断接口(即中断按钮)的中断控制寄存器里的中断使能,
设置整体中断使能,
循环子程序xunhuan(); 显示0到9,
}
xunhuan(){
循环子程序具体怎么循环
};
ISR_zhongduan(){
此处为中断时要做的事。
比如楼主说的,可以将输出只为0,然后延时一段时间
}
//解释如下:
主程序一开始设置一些基本的输入输出寄存器的值,比如数码管的输出,按钮的输入,然后是中断的提前设置(那个脚触发中断,上升沿还是下降沿中断),然后就是一直运行循环子程序了,直到中断一次运行一次中断子程序,然后回到原来跳出来的地方接着循环。
循环子程序可以不编,直接写在主程序里用for或while循环,但是写子程序比较容易修改。
中断子程序就是按钮按下之后要做的事情,做完又回到循环子程序跳出来的那个地方接着循环了,直到下次又按下按钮。
这是一个思想,对任何一种单片机都适用,但具体下来就要去看单片机的datasheet,说明书了。 如果想学可以直接从如下关键字去学只是块: 中断原理, GPIO, P0, P1, P2, 单片机最基本主程序构成.....追问

有程序嘛

第2个回答  2019-04-14
这个程序非常简单,建立一个0~9的for循环,直接把循环变量做段码数组下标送段码,再调用延时2S的子程序就OK了。
第3个回答  2021-01-09
请设计一个单静态数码管从0-9间隔2秒自动轮流显示的程序
#include <reg51.h>
unsigned char show[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit P32=P3^2;
int j,num;
gr()interrupt 1 using 3
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
j++;
if(j==40)
{j=0;
num++;
if(num==10)
num=0;
}
}
main()
{ET0=1;
EA=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
P0=show[num];
}
}
第4个回答  2019-04-14
单片机有很多种,编程要根据不同单片机进行。追问

at89c51的那种

相似回答