#include<reg52.h>
unsigned char flag,bai,shi,ge,shiwan,wan,qian;
#define uint unsigned int
#define uchar unsigned char
uint a;
sbit wela=P2^7;
sbit dula=P2^6;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39 , 0x5e , 0x79 , 0x71};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar bai,uchar shi,uchar ge,uchar shiwan,uchar wan,uchar qian)
{
dula=1;
P0=table[shiwan];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[wan];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[qian];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
void main()
{
flag=1;
SCON=0x50;//設定串口作業方式0101 0000
PCON=0x00;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
display(bai,shi,ge,shiwan,wan,qian);
}
}
void serial() interrupt 4
{
RI=0;
a=SBUF;
shiwan=a/100000;
wan=a%100000/10000;
qian=a%10000/1000;
bai=a%1000/100;
shi=a%100/10;
ge=a%10;
}
uj5u.com熱心網友回復:
樓主,上位機發送的1是ASCii碼,讀到單片機里需要減去0x30。uj5u.com熱心網友回復:
#include<reg52.h>unsigned char flag,bai,shi,ge,shiwan,wan,qian;
#define uint unsigned int
#define uchar unsigned char
uint a;
sbit wela=P2^7;
sbit dula=P2^6;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39 , 0x5e , 0x79 , 0x71};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar bai,uchar shi,uchar ge,uchar shiwan,uchar wan,uchar qian)
{
dula=1;
P0=table[shiwan];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[wan];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[qian];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
void main()
{
flag=1;
SCON=0x50;//設定串口作業方式0101 0000
PCON=0x00;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
display(bai,shi,ge,shiwan,wan,qian);
}
}
void serial() interrupt 4
{
RI=0;
a=SBUF;
a=a-0x30;
shiwan=a/100000;
wan=a%100000/10000;
qian=a%10000/1000;
bai=a%1000/100;
shi=a%100/10;
ge=a%10;
}這樣寫顯示65489
uj5u.com熱心網友回復:
樓主,你上位機發送的是字符還是十六進制?這次發送的是十六進制1,1-48即是-47,65489轉換成負數就是-47;上次發送的是字符'1',轉換成十六進制是0x31,即49。
uj5u.com熱心網友回復:
我用文本模式發送的。uj5u.com熱心網友回復:
文本模式應該是字符啊,怎么后一次會是65489?麻煩樓主把上位機的發送軟體截個圖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/78654.html
標籤:單片機/工控
上一篇:用單片機數碼管顯示兩位數
下一篇:尋找技術博客,求助
