题目是这样的:以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定。求高手给我指出错误
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wela=P2^7;
sbit dula=P2^6;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint a,wan,qian,bai,shi,ge;
void init();
void display(uchar wan,uchar qian,uchar bai,uchar shi,uchar ge);
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
while(1)
{
if(RI==1)
{
RI=0;
a=SBUF;
init();
display(wan,qian,bai,shi,ge);
}
}
}
void init()
{
wela=1;
P0=0xe0;
wela=0;
dula=1;
P0=0x00;
dula=0;
wan=a/10000;
qian=a/1000%10;
bai=a/100%10;
shi=a/10%10;
ge=a%10;
}
void display(uchar wan,uchar qian,uchar bai,uchar shi,uchar ge)
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[wan];
dula=0;
delay(1);
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=table[qian];
dula=0;
delay(1);
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
dula=1;
P0=table[bai];
dula=0;
delay(1);
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
dula=1;
P0=table[shi];
dula=0;
delay(1);
P0=0xff;
wela=1;
P0=0xef;
wela=0;
dula=1;
P0=table[ge];
dula=0;
delay(1);
P0=0xff;
}
请高手帮我解决一个51单片机程序 ,怎么达不到不到题目的要求
1、将 uint a,wan,qian,bai,shi,ge; 改为 uint a,wan,qian,bai,shi,ge;2、main()中:应接收2次后再调用init(),可以设定一个计数变量记录接收次数,计数到2后归0;3、单独再设一个uint变量或通过参数传递方式将两次计数得到的16位二进制数在init()函数中完成获取万千百十个的各位数字...
跪求51单片机延时程序计算方法:百度度不到,死去活来的求,是用DEL:MOV...
1. 初始化R7为10,表示需要执行D1指令10次。2. 初始化R6为200,表示需要执行D2指令200次。3. 初始化R5为250,表示需要执行DJNZ指令250次。4. 通过DJNZ指令循环:当R5的值不为0时,跳转回D2;当R6的值不为0时,跳转回D2;当R7的值不为0时,跳转回D1。5. 最终,所有循环执行完毕,程序返回...
C51代码功能不能实现,请高手帮忙看看
要仿真,更简单了,用proteus画一个仿真图,加载HEX代码,运行仿真,也能看运行效果。这样都做下来,自己就知道程序对不对了,而不是只写个程序就算学单片机啦。主程序要有while(1)主循环语句。最后一个while(!KEY);删掉。
单片机程序不执行
我也遇到过类似的问题,有三种情况,一是你的程序太大,单片机空间不够,第二是因为你的程序中没有加void ,第三种情况是由于没有及时清除看门狗记数器
51 单片机 程序出错 不执行定时器中断1 同时delay函数也有错 求高手...
3.在单片机里写程序的时候能省资源就省,52单片机是8位的,如果变量范围不超过255就不要用int变量,而且如果不涉及到负数就用unsigned定义 4.在中断程序中如果不是必要,不要定义变量,使用全局变量完成和其他功能函数的耦合情况,如果必须要定义的话,在中断声明中规定相应的寄存器组完成现场保护,避免...
我的毕业设计题目是有关51单片机,请“单片机”高手帮帮忙!
51单片机能做,思路就是需要一个温度传感器,再用一个模数转换器,将温度传感器产生的模拟信号转换为数字信号,通过单片机驱动显示,将其显示出来,当然还可以扩展为:有温度点最大值、最小值查询,平均值查询等多功能的,这个就是你自己的能力和思维扩散 ...
我用51单片机写程序操作液晶,怎么就是不显示,不知道程序有什么问题,求...
你这个程序只是上LCD初始化后就不走了。也没让它显示,所以才不显示的。
请高手指点,如何实现51单片机程序烧写
51单片机程序烧写有以下几种方法:1、利用编程器烧录,这是比较古老的方法了,上个世纪和本世纪初,基本利用这种方法烧录单片机程序。2、ISP,利用串口或JTAG口将程序下载到单片机。现在大多数单片机都是如此。3、IAP,可以在单片机运行状态下,利用串口、JTAB,USB或其他硬件设计的介质,将程序更新到单片机...
请高手看看下面的51单片机的程序,编译时说:C(92): error C100: unprin...
"void timer0() interrupt 1 、\/\/定时器中断"\/\/之前多了一个顿号.
求教一个51单片机程序。。(LCD电子时钟)
完全不知所云,所以希望能请教一下高手关于LCD时钟的事情。做一个LCD时钟需要些什么东西啊,具体步骤是怎么做的呢?现在手上有一块单片机开发板,还有一个1602显示屏,设计要求如下:以单片机控制的时钟,在LCD显示器上显示当前的时间。设计的基本要求:1.使用文字型LCD显示器显示当前时间。2.显示格式为“时时:分分:妙...