现有一个51单片机系统,P2口接一个共阳极的LED数码管,编写程序满足如下要求:

现有一个51单片机系统,P2口接一个共阳极的LED数码管,编写程序满足如下要求:在数码管中每隔1秒钟依次显示0~9共10个数字(数码管显示0-9的值为0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90),循环显示。
#include <REG51.H>
void delay()
{
unsigned int i;
for(i=0;i<10000;i++);
}
void main ()
{
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char k;
while(1)
{
for (k=0;k<10;)
{ P1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;
k++;
delay(10000);
}
}
}
怎么错了?

你怎么不用中断来写呢。用delay来写也行,但是运行效率不高,你别“P1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;”这样赋值,你用
main()
{
char i=0;
delay()
{
//这部分你自己写了
}
while(1)
{
delay();
switch(i)
{
case 0:
P1=0xc0;
i++;
break;
case 1:
//你自己仿照一下吧,这里
i++;
break;
//这里 ,你自己仿照一下吧,一直到 case 7:
case 8:

P1=0x90;
i=0;
break;
default:
break;
}
}
}
这里只给了你初步入门的思路,正是写程序别这么干,delay()能不用别用,这东西会让你的CPU堵塞,使得其利用率大大降低,的如果代码大了,可能会让你的CPU运行起来很卡。另外你程序里出现的是P1,但你的题目描述是P2,如果真是P2口,那么我给你的程序中P1要改为P2,还有就是还不知你的硬件接的对不,要注意一点,51单片机是弱上拉的。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-09
当然错了,delay函数申明时是没有参数的,你调用是加了参数:delay(10000);
第2个回答  2015-12-01
……
    while(1)  {
      for (k = 0; k < 10; k++)  {
        P1 = led[k];
        delay(10000);
      }
    }
}

追问

这样。

追答……
    while(1)  {
      for (k = 0; k < 10; k++)  {
        P1 = led[k];
        delay();  
      }
    }
}

现有一个51单片机系统,P2口接一个共阳极的LED数码管,编写程序满足如下要 ...
另外你程序里出现的是P1,但你的题目描述是P2,如果真是P2口,那么我给你的程序中P1要改为P2,还有就是还不知你的硬件接的对不,要注意一点,51单片机是弱上拉的。

编程实现51单片机,P2口连接一个共阳极数码管,每到1s更新显示0~9s,要求...
include <intrins.h> define uchar unsigned char define uint unsigned int uchar code TABLE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};\/\/七段码表 主程序中:TMOD=0X10;TH1=(65536-50000)\/256;TL1=(65536-50000)%256;ET1=1;\/\/开定时器1中断 EA=1;\/\/开总...

89C51单片机的p3口接一个共阳极的数码管
\/\/单片机:使用51系列兼容的即可;\/\/4×4矩阵键盘:接在P1口;\/\/两位数码显示器: P0口输出七段码,P2口输出位选码。\/\/=== \/\/C语言程序如下。\/ 文件名: KEY_LED.c 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。\/ include <reg51.h> include <intrins.h> define uint un...

单片机P1口接共阳极数码管,公共端已接高电频,请写程序使数码管循环显...
0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};void delay(int a){int i;while(a--)for(i=0;i<110;i++);}main(){int i;while(1) { P1=table[i]; i++; i%=16; delay(200); }}

用51单片机并行口设计显示一个数码的电路,使数码管循环显示“0...
这是共阳极的数码管,至于你要显示0~F这个在编程实现

51单片机led灯与数码管问题
如果能看到的数字跟期望的一致,根据经验,这种情况一般程序是对的,是仿真的问题 建议下载到实际电路板上跑跑看,如果数字有闪动,可调整动态扫描的速度。实在要仿真,也可以尝试调整一下显示器件的 最小触发时间

LED数码管动态显示2017的51单片机汇编语言
共阳极接法。abcdefg 为 P0 口,位选端为 P2 口。八个数码管同时显示 01234567。电路与程序,如下所示:

51单片机P0口驱动LED数码管的这个电路图对吗
很明显,不对!就算电压加到1000V,数码管也不会亮。哎 网上总是误导、、、使用的共阴极的数码管。加之单片机的P0口没有内部上拉,所以只有外部加上拉电阻了。电阻使用470欧的效果最好。阴极可以直接接地。不用再加限流了。建议使用共阳极的数码管。损耗较小。

51单片机四位一体共阳极数码管显示编程?
设 P0 为输出七段码(共阳极数据);四位数码管有4个阳极,设位码分别与P2.4--P2.7对应,并且=1时表示可点亮数码管;sbit wma1=b2^4; \/\/对应左起第1个数码管的阳极 sbit wma2=b2^5; \/\/对应左起第2个数码管的阳极 sbit wma3=b2^6;sbit wma4=b2^7;void main(){ wma1=0; wma2...

51单片机仿真软件中数码管叫什么
数码管(其实就是LED)如果是共阳极,那么单片机可以驱动显示。如果是共阴极,单片机则不能驱动显示(或者灯光微弱),因为单片机的IO口无法提供足够高的电流,此时需要外部电路器件提供一个大电流驱动的芯片。51单片机介绍 51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、...

相似回答