本想通过计算机向
单片机传送数据,然后在数码管上显示,同时单片机把接受到的数据传回给计算机,在串口助手上显示,但得到的现象跟预期不大一样,求大神指出编程问题所在。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uint temp=0,mm,nn,aa,flag;
void display(uchar bai);
void init();
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;
SBUF=temp;
while(!T1);
ti=0;
ES=1;
flag=0;
}
display(temp);
}
}
void init()
{ SCON=0X50;
TMOD=0X20;
PCON=0X80;
TH1=0XF3;
TL1=0xF3;
EA=1;
TR1=1;
ES=1;
}
void display(uchar bai)
{
LSA=0,LSB=0,LSC=0;
P1=table[bai];
}
void chuangkou() interrupt 4
{
RI=0;
temp=SBUF;
flag=1;
}
发送的数据2,3,4,5,6都发过了,不知道是不是跳不出中断服务程序,静态数码管没显示了。。
现在需要说明一下运行情况:
一,在计算机未发送数据时,数码管显示什么,是否正常,temp最好初始化一个固定的数值。
二,计算机发送数据后,单片机是否能正确返回,如果可以正常返回的话,那就是只有显示有问题。
三,计算机最好发送小于0x0f的数据,大于这个值得数据如果能正确显示的话,显示的并不是正常数值,需要按数据位和数码管的段对应来判断是什么数值。
改为静态数码管后,就不用LSA,LSB,LSC,控制了,计算机发送数据后可以正确返回数据,但是数码管刚开始时为0,发送数据后就不亮,发的数据是1,2,3,4,这些小于16的数。
感谢大佬,我修改你的程序后,可以了,但是有个问题,为什么要用三个数码管显示,还有就是为啥不能直接显示我想要的数,就是输入3得到3,而是得到3的ASCII码051呢,我有点疑惑,还有就是为啥我用静态数码管显示不了呢
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uint temp=0,aa=0,flag=0;
uchar bai,shi,ge;
uchar x=0;
void display();
void init();
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=temp;
while(!TI);
TI=0;
ES=1;
}
/*************数据分解***************/
bai=temp/100; // 百位
shi=temp/10%10; // 十位
ge =temp%10; // 个位
display();
}
}
void init()
{
SCON=0X50;
TMOD=0X20;
PCON=0X80;
TH1=0XF3;
TL1=0xF3;
EA=1;
TR1=1;
ES=1;
}
void display()
{
aa++;
if(aa>=100) //0~65535根据主循环速度调整到约1ms为佳
{
aa=0;
switch(x)
{
case 0:
P1=0x00; //消隐
LSA=0,LSB=0,LSC=0;
//显示百位
P1=table[bai];
x=1; //循环动态显示
break;
case 1:
P1=0x00;
LSA=1,LSB=0,LSC=0; //显示十位
P1=table[shi];
x=2;
break;
case 2:
P1=0x00;
LSA=0,LSB=1,LSC=0; //显示个位
P1=table[ge];
x=0;
break;
}
}
}
void chuangkou() interrupt 4
{
RI=0;
temp=SBUF;
flag=1;
}
一周热门 更多>