请高手帮我解决一个51单片机程序 ,怎么达不到不到题目的要求

题目是这样的:以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;
}

第1个回答  2011-05-22
以16进制发送一个0-65536之间的任一数....
----
不可能,串口传输的数据,是0~255。
第2个回答  2011-05-22
串口发送的是字符 字符(char)型unsigned char的最大值就是255,怎么可以发出大于255的呢
第3个回答  2011-05-22
可以用2 个字节发送
第4个回答  2011-05-24
因串口通讯每次只能发送1个字节,也就是0x00~0xFF,所以你每次只能收到1个字符。
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()函数中完成获取万千百十个的各位数字的运算。

如果原来上位机连续发送0x55,0xAA而你的显示为170(0x55对应的85显示太快,可能看不见),说明其它程序没问题,否则还需要检查。

请高手帮我解决一个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单片机上电后不运转,不执行程序。什么原因?
很可能是晶振的问题。起振的话,晶振两脚上有一只脚可以看到振荡波形的。你还可以查一下单片机的EA脚,这个是配置启动顺序的,外部还是内部,EA为高电平可能是有问题的,你该尝试下接地。单片机程序不执行,我遇到过上述两种情况,EA没接,还有就是晶振的电容和晶振碰到一块去了。

请高手指点,如何实现51单片机程序烧写
1、利用编程器烧录,这是比较古老的方法了,上个世纪和本世纪初,基本利用这种方法烧录单片机程序。2、ISP,利用串口或JTAG口将程序下载到单片机。现在大多数单片机都是如此。3、IAP,可以在单片机运行状态下,利用串口、JTAB,USB或其他硬件设计的介质,将程序更新到单片机。

请高手指点,如何实现51单片机程序烧写
1、利用编程器烧录,这是比较古老的方法了,上个世纪和本世纪初,基本利用这种方法烧录单片机程序。2、ISP,利用串口或JTAG口将程序下载到单片机。现在大多数单片机都是如此。3、IAP,可以在单片机运行状态下,利用串口、JTAB,USB或其他硬件设计的介质,将程序更新到单片机。

C51代码功能不能实现,请高手帮忙看看
用keil编译,能否通过,通过后,烧录到开发板就看到运行效果对不对了。要仿真,更简单了,用proteus画一个仿真图,加载HEX代码,运行仿真,也能看运行效果。这样都做下来,自己就知道程序对不对了,而不是只写个程序就算学单片机啦。主程序要有while(1)主循环语句。最后一个while(!KEY);删掉。

我的毕业设计题目是有关51单片机,请“单片机”高手帮帮忙!
51单片机能做,思路就是需要一个温度传感器,再用一个模数转换器,将温度传感器产生的模拟信号转换为数字信号,通过单片机驱动显示,将其显示出来,当然还可以扩展为:有温度点最大值、最小值查询,平均值查询等多功能的,这个就是你自己的能力和思维扩散 ...

单片机程序不执行
我也遇到过类似的问题,有三种情况,一是你的程序太大,单片机空间不够,第二是因为你的程序中没有加void ,第三种情况是由于没有及时清除看门狗记数器

51 单片机 程序出错 不执行定时器中断1 同时delay函数也有错 求高手...
1.独立按键的判断在程序中如果没有用sbit定义过不能写为 P2^n 的形式,在程序体内这种写法表示的是异或 2.中断程序里,进入中断程序以后如果不是特殊需要,先关断自身的中断控制位,退出中断的时候再打开 3.在单片机里写程序的时候能省资源就省,52单片机是8位的,如果变量范围不超过255就不要用int...

我用51单片机写程序操作液晶,怎么就是不显示,不知道程序有什么问题,求...
你这个程序只是上LCD初始化后就不走了。也没让它显示,所以才不显示的。

c51程序在52单片机上可以运行,在51单片机上运行不了。求高手回答,谢谢...
78E516也有内部看门狗的,而且还有几个寄存器是52里没有的,下面是我改过的REG52.h 另外,78E516的ROM区前4K是用于BOOT的,如果里面的程序没有跳出来的话,就永远进不了你的应用程序区了,好好看看CHPENR 那几个寄存器的使用方式。\/ --- Copyright (c) KEIL ELEKTRONIK GmbH and Franklin Softwar...

相似回答
大家正在搜