初级会员
- 积分
- 127
- 金钱
- 127
- 注册时间
- 2016-5-23
- 在线时间
- 14 小时
|
1金钱
题目如下
结果如下
无论我怎么更换位选信号 原本应该显示出来的五位数码管永远只能出来两位,以下是我的代码。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,i,yi,er,san,si,wu;
uint a;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint xms)
{
uint i,j;
for(i=0;i<xms;i++)
for(j=110;j>0;j--);
}
void display(uchar yi,uchar er,uchar san,uchar si,uchar wu)
{
dula=1;
P0=table[yi];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(1);
dula=1;
P0=table[er];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(1);
dula=1;
P0=table[san];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(1);
dula=1;
P0=table[si];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(1);
dula=1;
P0=table[wu];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(1);
}
void init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void main()
{
init();
while(flag==1)
{
wu=a/65536;
si=a%65536/4096;
san=a%65536%4096/256;
er=a%65536%4096%256/16;
yi=a%65536%4096%256%16;
display(yi,er,san,si,wu);
}
}
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
|
最佳答案
查看完整内容[请看2#楼]
刚入门吧,C语言基础太差
错误一:你串口每次都接收一个字符就做运算a=SBUF,SBUF是一个char型数据,最大就只有255,正确做法,应该接收两个字符后进行移位再相与
错误二:分离一个数字每一位的方法,学C语言这么基础的东西还没搞懂?
wu=a/10000;
si=a%10000/1000;
san=a%1000/100;
er=a%100/10;
yi=a%10;
|