标题:
单片机通过串行口给传感器发送字符后,传感器向单片机发送测量数值。程序不太懂。
[打印本页]
作者:
小丑的面具59
时间:
2017-5-9 22:30
标题:
单片机通过串行口给传感器发送字符后,传感器向单片机发送测量数值。程序不太懂。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcden=P2^2;
uchar table[]="aa 01 03 0f 00";
uchar table1[];
unsigned char a,b,m;
uchar sendflag=0;
uchar receflag=0;
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
bit lcd_busy()
{
bit result;
lcdrs=0;
lcdrw=1;
lcden=1;
delay(10);
result=(bit)(P0&0X80);
lcden=0;
return(result);
}
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
lcdrs=0;
lcdrw=0;
lcden=0;
delay(5);
P0=cmd;
lcden=1;
delay(5);
lcden=0;
}
void lcd_wdat(uchar dat)
{
while(lcd_busy());
lcdrs=1;
lcdrw=0;
lcden=0;
P0=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcd_init()
{
delay(15);
lcd_wcmd(0x01);
lcd_wcmd(0x38);
delay(5);
lcd_wcmd(0x38);
delay(5);
lcd_wcmd(0x0c);
delay(5);
lcd_wcmd(0x01);
delay(5);
}
void lcd_pos(uchar pos) //设定显示位置
{
lcd_wcmd(pos | 0x80);
}
void senddata() //发送数据
{
ES=0;
for(a=0;a<14;a++)
{
SBUF=table[a];
while(!TI);
TI=0;
}
ES=1;
}
void serial()interrupt 4
{
if(RI)
{
RI=0;
delay(1000);
if(b)
{
b=0;
b++;
b<14;
receflag=1; //发送完了清标志
}
table1[b]=SBUF;
}
}
void display() //数据显示
{
if(receflag)
{
lcd_pos(0x00);
for(m=0;m<16;m++)
{
lcd_wdat(table1[b]);
}
receflag=0;
}
}
void main(void)
{
TMOD=0X20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
lcd_init();
while(1)
{
senddata();
delay(2000);
display();
}
}
作者:
zl2168
时间:
2017-5-10 10:15
提问模糊!不得要领。你那个传感器是什么东东?能串行接收和发送数据?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1