|
好的 給你我寫的C51的單片機(jī)和USART HMI串口屏通訊的程序。
單片機(jī)建議用STC89C52 P0口可以不用加上拉電阻。
程序是串口屏上建按鈕,按一下,發(fā)送指令給單片機(jī)。單片機(jī)接收后提取指令后再判斷。
判斷后再驅(qū)動(dòng)相應(yīng)的IO為高電平或低電平。可以直接接LED發(fā)光管觀察輸出結(jié)果。
至于串口屏的程序,建議參照串口屏的編程要求輸出定義的指令。
例如:
if(照明1.val==1) //開啟
{
printh ED 02 00 01
}
if(照明1.val==0) //關(guān)燈
{
printh ED 02 00 00
}
其中:ED 02 00 01 和 ED 02 00 00 就是我自己定義的通訊指令。 這個(gè)可以和單片機(jī)配套使用。
#include <Reg52.h>
sbit LED0=P0^0;//指示燈
sbit LED1=P0^1;//指示燈
sbit LED2=P0^2;//指示燈
sbit LED3=P0^3;//指示燈
sbit LED4=P0^4;//指示燈
sbit LED5=P0^5;//指示燈
sbit LED6=P0^6;//指示燈
sbit LED7=P0^7;//指示燈
sbit LED8=P1^0;//指示燈
sbit LED9=P1^1;//指示燈
sbit LED10=P1^2;//指示燈
sbit LED11=P1^3;//指示燈
sbit LED12=P1^4;//指示燈
sbit LED13=P1^5;//指示燈
sbit LED14=P1^6;//指示燈
sbit LED15=P1^7;//指示燈
sbit LED16=P2^0;//指示燈
sbit LED17=P2^1;//指示燈
sbit LED18=P2^2;//指示燈
sbit LED19=P2^3;//指示燈
sbit LED20=P2^4;//指示燈
sbit LED21=P2^5;//指示燈
sbit LED22=P2^6;//指示燈
sbit LED23=P2^7;//指示燈
sbit K1=P3^2;
unsigned char CT;
unsigned char UT;
unsigned char CN[4];
void delayms(unsigned int i)
{
unsigned int j;
while(i--)
{
for(j = 0; j < 125; j++);
}
}
//向串口輸出一個(gè)字符(非中斷方式)
void ComOutChar(unsigned char OutData)
{
ES = 0;
TI = 0;
SBUF = OutData; //輸出字符
while(!TI); //空語句判斷字符是否發(fā)完
TI = 0; //清TI
ES = 1;
}
void UART_Send_Str(char *s)
{
int i=0;
while(s!=0)
{
ComOutChar(s);
i++;
}
}
void UART_Send_END(void)
{
ComOutChar(0xFF);
ComOutChar(0xFF);
ComOutChar(0xFF);
}
void UART_Send_APP(void)
{
ComOutChar(CN[0]);
ComOutChar(CN[1]);
ComOutChar(CN[2]);
ComOutChar(CN[3]);
}
void UART_Send_start(void)
{
delayms(10);
UART_Send_END();
delayms(10);
}
void CSToOut(void)
{
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x00 && CN[3]==0x01) {LED0=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x00 && CN[3]==0x00) {LED0=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x01 && CN[3]==0x01) {LED1=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x01 && CN[3]==0x00) {LED1=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x02 && CN[3]==0x01) {LED2=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x02 && CN[3]==0x00) {LED2=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x03 && CN[3]==0x01) {LED3=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x03 && CN[3]==0x00) {LED3=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x04 && CN[3]==0x01) {LED4=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x04 && CN[3]==0x00) {LED4=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x05 && CN[3]==0x01) {LED5=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x05 && CN[3]==0x00) {LED5=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x06 && CN[3]==0x01) {LED6=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x06 && CN[3]==0x00) {LED6=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x07 && CN[3]==0x01) {LED7=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x01 && CN[2]==0x07 && CN[3]==0x00) {LED7=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x00 && CN[3]==0x01) {LED8=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x00 && CN[3]==0x00) {LED8=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x01 && CN[3]==0x01) {LED9=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x01 && CN[3]==0x00) {LED9=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x02 && CN[3]==0x01) {LED10=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x02 && CN[3]==0x00) {LED10=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x03 && CN[3]==0x01) {LED11=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x03 && CN[3]==0x00) {LED11=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x04 && CN[3]==0x01) {LED12=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x04 && CN[3]==0x00) {LED12=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x05 && CN[3]==0x01) {LED13=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x05 && CN[3]==0x00) {LED13=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x06 && CN[3]==0x01) {LED14=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x06 && CN[3]==0x00) {LED14=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x07 && CN[3]==0x01) {LED15=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x02 && CN[2]==0x07 && CN[3]==0x00) {LED15=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x00 && CN[3]==0x01) {LED16=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x00 && CN[3]==0x00) {LED16=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x01 && CN[3]==0x01) {LED17=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x01 && CN[3]==0x00) {LED17=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x02 && CN[3]==0x01) {LED18=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x02 && CN[3]==0x00) {LED18=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x03 && CN[3]==0x01) {LED19=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x03 && CN[3]==0x00) {LED19=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x04 && CN[3]==0x01) {LED20=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x04 && CN[3]==0x00) {LED20=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x05 && CN[3]==0x01) {LED21=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x05 && CN[3]==0x00) {LED21=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x06 && CN[3]==0x01) {LED22=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x06 && CN[3]==0x00) {LED22=0;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x07 && CN[3]==0x01) {LED23=1;UART_Send_APP();}
if (CN[0]==0xED && CN[1]==0x03 && CN[2]==0x07 && CN[3]==0x00) {LED23=0;UART_Send_APP();}
}
//串口初始化 晶振為11.0592M 方式1 波特率9600
void InitCom(void)
{
SCON = 0x50; //串口方式1,允許接收
TMOD = 0x20; //定時(shí)器1定時(shí)方式2
TCON = 0x40; //設(shè)定時(shí)器1開始計(jì)數(shù)
TH1 = 0xFD;
TL1 = 0xFD;
RI = 0; //清收發(fā)標(biāo)志
TI = 1;
TR1 = 1; //啟動(dòng)定時(shí)器
}
//串口接收中斷
void ComInINT(void) interrupt 4 using 1
{
if (RI == 1)
{
RI = 0;
UT = SBUF;
if(UT==0xED)
{
CN[0] = SBUF;
}
else if(CN[0]==0xED)
{
CT++;
CN[CT] = SBUF;
if (CT == 3)
{
CSToOut();
CT = 0;
CN[0] = 0;
CN[1] = 0;
CN[2] = 0;
CN[3] = 0;
}
}
}
}
void main(void)
{
P0 = 0;
P1 = 0;
P2 = 0;
InitCom(); //設(shè)置波特率為9600
EA = 1;
ES = 1; //開串口中斷
while(1)
{
if (K1==0) //按下按鈕 用于測(cè)試發(fā)給串口屏
{
//UART_Send_start();
//UART_Send_Str("page 臥室");
//UART_Send_END();
}
}
}
|
評(píng)分
-
查看全部評(píng)分
|