C语言 单片机问题

#include <reg51.h>
void delay(unsigned int i);

void main ()
{
unsigned int m; //定义变量
unsigned char led1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定义数码段值
unsigned char led2[]={0x01,0x02,0x04,0x08,0x10,0x20}; //定义数码管位值
while(1)
{
for(m=0;m<200;m++) //循环次数
{
P2=led2[0]; //0位显示1
P0=led1[0];
delay(1);

P2=led2[1]; //1位显示2
P0=led1[0];
delay(1);

P2=led2[2];
P0=led1[1]; //2位显示3
delay(1);

P2=led2[3]; //3位显示4
P0=led1[0];
delay(1);

P2=led2[4];
P0=led1[4];
delay(1);

P2=led2[5];
P0=led1[5];
delay(1);
}
}

}

void delay(unsigned char i)
{
unsigned char j,k;
for(j=0;j<i;j++)
for(k=0;k<255;k++);
}

现在显示的是 001045,按下按钮后显示00 0000。
需要怎么搞?中段到底要怎么写啊,一直都不是很懂。老师讲课总是听的懵懵懂懂的,谢谢!

#include <reg51.h>
void delay(unsigned int i);

void main ()
{
unsigned int m; //定义变量
unsigned char led1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定义数码段值
unsigned char led2[]={0x01,0x02,0x04,0x08,0x10,0x20}; //定义数码管位值
while(1)
{
for(m=0;m<200;m++) //循环次数
{
P2=led2[0]; //0位显示1
P0=led1[0];
delay(1);

P2=led2[1]; //1位显示2
P0=led1[1];
delay(1);

P2=led2[2];
P0=led1[2]; //2位显示3
delay(1);

P2=led2[3]; //3位显示4
P0=led1[3];
delay(1);

P2=led2[4];
P0=led1[4];
delay(1);

P2=led2[5];
P0=led1[5];
delay(1);
}
}

}

void delay(unsigned char i)
{
unsigned char j,k;
for(j=0;j<i;j++)
for(k=0;k<255;k++);
}
你第2,3,4个数码管段码值不对应,程序改好了追问

你好 你没有懂我的意思哦~现在在6位 LED上面显示的是 “001045 ”这个数字,
老师要我加按钮后,按下了按钮就全部置为 “000000”

追答

#include
bit flag=1;
unsigned char led1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定义数码段值
unsigned char led2[]={0x01,0x02,0x04,0x08,0x10,0x20}; //定义数码管位值
void delay(unsigned int m);

void int0() interrupt 0 //外部中断0
{
P0=led1[0];
P2=0x3f;
flag=0;
}

void main ()
{
unsigned char i;
EA=1; //CPU开放中断
IT0=0; //电平触发方式
EX0=1; //开外部中断0
while(flag)
{
for(i=0;i<6;i++)
{
P2=led2[i];
P0=led1[i];
delay(10);
}
}
delay(10);
while(1);//原地等待
}

void delay(unsigned int m) //延时程序
{
unsigned char j,k;
for(j=0;j<m;j++)
for(k=0;k<255;k++);
}

追问

你好好人啊,有没有QQ呢~我是一名学生,快要考试了,可是中段那些都还不会。有没有什么简单易懂的教程?谢谢!我的QQ 187100579

追答

2624401589,你先还是把书本弄通了再说吧

温馨提示:内容为网友见解,仅供参考
无其他回答

单片机C语言编译错误:requires ANSI-style prototype
遇到单片机C语言编译错误:requires ANSI-style prototype,其实这是由于设置不当引起的。要解决这个问题,首先从新建文档开始:1. 在Keil软件中,从【File】菜单中选择【new】,创建一个空白文档,然后将你编写的源代码复制粘贴进去。2. 保存文件至指定位置,点击左上角的保存图标。在保存对话框中,确保...

c语言单片机考试题目急用
5、j

单片机C语言中断问题
你有个地方没弄清楚。单片机执行的是机器码,机器码对应的是汇编指令。而C语言表述的句子,会编译成若干汇编指令。就是说没有C指令这一说,以51举例,_nop_()对应汇编的NOP,但是一个简单的a*b,编译后可能长度就有好几百字节。每条指令执行的周期不同。有些只要一个周期,有些需要几个周期。中断...

单片机复习题(C语言)
1.MCS-51单片机是___8___位机,其最大程序容量可达___64___K字节,有___4___个并行口和___32___条I\/O管脚。2.MCS-51单片机正常工作所必须的外部硬件电路是___电源___、___时钟___、__复位___。3.MCS-51单片机复位电平是___高___电平,正常工作时复位端为__低___电平,复位...

C语言单片机主要运用到那些
C语言就是其中的一种。对用惯了汇编的人来说,总觉得高级语言’可控性’不好,不如汇编那样随心所欲。但是只要我们掌握了一定的C语言知识,有些东西还是容易做出来的,以下是笔者实际工作中遇到的几个问题,希望对初学C51者有所帮助。一、C51热启动代码的编制 对于工业控制计算机,往往设有有看门狗电路...

关于单片机C语言的问题
5:a(),b(),c()函数同主程序一样,不会影响中断服务程序的执行,除非里面包含有影响中断的语句,例如开关中断等;6:程序是按语句顺序一句一句连续执行的,所谓单步运行状态,是通过开发系统中的监控程序和硬件的帮助,让用户程序运行一条指令就停止,目的是便于调试。实际在用户系统中运行的程序是没有...

C语言单片机程序 初学大家帮忙看看错在哪里了 #include <reg51.h...
也有可能是你烧写程序的时候 数据传输的过程中出错了,校验出错 一般是传输过程中某个或者某些bit或者byte出错 建议你重新编译 重新下载烧写试试, 单片机这东西就是经常出些小问题,有时候我们买的开发板或者有些数据线质量不过关也会导致一些莫名其妙的问题,多尝试尝试 相信你能解决的 ...

为什么我的单片机c语言中for循环有问题呢,如下
这个是不会成功的.因为单片机中的P1不是变量,是端口.给P1赋值是把对应值输出到端口,读取P1是读取端口.两个是完全无关的操作.for(P1=0XFE;P1!=0X7F;P1=left(P1));中P1!=0xF7就对端口P1进行了读取,left(P1)又读取,P1=这样的是输出到端口P1. 读取的情况就不能确定了,如果外围电路没有变化,...

要想弄好单片机,C语言要学到什么程度
此外,深入学习C语言还意味着理解其在嵌入式系统中的特殊应用,例如中断处理、定时器管理、串口通信等。这需要对C语言的底层机制有较深的理解,同时也需要掌握单片机的硬件知识。总之,学习C语言不仅仅是为了代码的编写,更是为了能够理解和解决实际工程中的问题。通过不断的学习和实践,学习者可以逐步提高...

C语言水平低下,问个关于单片机编程的低级问题
x = a\/s ,只有x是浮点数是不够的,因为看代码,a是整形的了,s 呢?如果s不是浮点的,两个整形相除,结果还是整形,x也只能得到整形。把式子改成 x = (float)a \/(float)s,可保万无一失。其次,要把小数传给串口,并不是把一个数字的字节一个一个发出去就行的。要自己算好要保留多少...

相似回答
大家正在搜