|
單片機(jī)源程序如下:
- #include "MAIN.H"
- #include "DELAY.H"
- #include "lcd1602.h"
- #include "uart.h"
- #include<string.h>
- #define Uart1_Buf_Max 70//串口數(shù)據(jù)緩存長度
- #define Uart2_Buf_Max 70
- #define uint unsigned int
- #define uchar unsigned char
- /************* 本地常量聲明 **************/
- write_com(unsigned char);
- /************* 本地變量聲明 **************/
- u8 count = 0;
- u8 idata Rec_Buf[Uart1_Buf_Max]; //串口數(shù)據(jù)緩存
- u8 point1 = 0; //綬存指針
- u8 a,flag;
- u8 xdata Uart2_Rec_Buf[Uart2_Buf_Max]; //串口數(shù)據(jù)緩存
- u8 point2 = 0;
- /************* 本地函數(shù)聲明 **************/
- /************* 外部函數(shù)和變量聲明 *****************/
- bit B_TX2_Busy = 0;
- /******************** IO配置函數(shù) **************************/
- void GPIO_config(void)
- {
- P5M0 &= ~(1<<5); //設(shè)置P5.5為準(zhǔn)雙向口
- P5M1 &= ~(1<<5);
- }
- /******************** 主函數(shù) **************************/
- void UartInit(void) //9600bps@11.0592MHz
- {
- //注意: STC15W4K32S4系列的芯片,上電后所有與PWM相關(guān)的IO口均為
- // 高阻態(tài),需將這些口設(shè)置為準(zhǔn)雙向口或強(qiáng)推挽模式方可正常使用
- //相關(guān)IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
- // P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
- PCON &= 0x7F; //波特率不倍速
- SCON = 0x50; //8位數(shù)據(jù),可變波特率
- AUXR |= 0x40; //定時器1時鐘為Fosc,即1T
- AUXR &= 0xFE; //串口1選擇定時器1為波特率發(fā)生器
- TMOD &= 0x0F; //清除定時器1模式位
- TMOD |= 0x20; //設(shè)定定時器1為8位自動重裝方式
- TL1 = 0xDC; //設(shè)定定時初值
- TH1 = 0xDC; //設(shè)定定時器重裝值
- ET1 = 0; //禁止定時器1中斷
- TR1 = 1; //啟動定時器1
- S2CON = 0x50; //8位數(shù)據(jù),可變波特率
- AUXR |= 0x04; //定時器2時鐘為Fosc,即1T
- T2L = 0xE0; //設(shè)定定時初值
- T2H = 0xFE; //設(shè)定定時初值
- AUXR |= 0x10; //啟動定時器2
- UART2_INT_ENABLE();
- ES = 1;
- EA = 1;
- }
- /*----------------------------
- 發(fā)送串口數(shù)據(jù)
- ----------------------------*/
- void SendData(unsigned char ch)
- {
- SBUF = ch; //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
- while(TI == 0);
- TI = 0;
- }
- /*----------------------------
- 發(fā)送字符串
- ----------------------------*/
- void SendString(char *s)
- {
- while (*s) //檢測字符串結(jié)束標(biāo)志
- {
- SendData(*s++); //發(fā)送當(dāng)前字符
- }
- }
- void Send(unsigned char *s,unsigned int len)
- {
- for(a = 0;a<len;a++)
- {
- SendData(*s++); // *s指向ReBuf[0],*s指向下一個ReBuf[1];
- }
-
- }
- bit Hand(unsigned char *a) // 串口命令識別函數(shù)
- {
- if(strstr(Rec_Buf,a)!=NULL)
- return 1;
- else
- return 0;
- }
- void CLR_Buf(void) // 串口緩存清理
- {
- memset(Rec_Buf, 0, Uart1_Buf_Max); //清空
- point1 = 0;
- }
- /*----------------------------
- 通過串口2發(fā)送串口數(shù)據(jù)
- ----------------------------*/
- void Uart2SendData(unsigned char ch)
- {
- while(B_TX2_Busy); //不忙后發(fā)送數(shù)據(jù)
- S2BUF = ch; //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
- B_TX2_Busy = 1;
- }
- /*----------------------------
- 通過串口2發(fā)送字符串
- ----------------------------*/
- void Uart2SendString(char *s)
- {
- while (*s) //檢測字符串結(jié)束標(biāo)志
- {
- Uart2SendData(*s++); //發(fā)送當(dāng)前字符
- }
- }
- bit Uart2Hand(unsigned char *a) // 串口命令識別函數(shù)
- {
- if(strstr(Uart2_Rec_Buf,a)!=NULL)
- return 1;
- else
- return 0;
- }
- void Uart2CLR_Buf(void) // 串口緩存清理
- {
- memset(Uart2_Rec_Buf, 0, Uart2_Buf_Max); //清空
-
- point2 = 0;
-
- }
- void main(void)
- {
- unsigned char add;
- unsigned char hh;
- hh=Uart2_Rec_Buf[20],10;
- GPIO_config();
- UartInit();
- Init_LCD1602();
- LCD1602_write_com(0x80); //指針指向第1行第0個位置
- LCD1602_write_word("weidu ");
-
-
-
-
-
-
- LCD1602_write_com(0x80+0x40); //指針指向第2行第0個位置
- LCD1602_write_word("jingdu ");
- Send(&Uart2_Rec_Buf[32],11);
-
-
- hh=Uart2_Rec_Buf[32];
- LCD1602_write_word("hh ");
- write_com(0x80+0x40+add);
-
- write_date(0x30+hh);
- delay_ms(200);
-
- while(1)
- {
-
-
- SendString("\r\n");
- Send(&Uart2_Rec_Buf[0],70);
-
- SendString("\r\nweidu:\r\n");
- Send(&Uart2_Rec_Buf[20],10);
-
- SendString("\r\nnanbeibanqiu:\r\n");
- Send(&Uart2_Rec_Buf[30],1);
- SendString("\r\n");
-
- SendString("jindu:\r\n");
- Send(&Uart2_Rec_Buf[32],11);
- SendString("\r\n");
-
- SendString("dongxibanqiu:\r\n");
- Send(&Uart2_Rec_Buf[43],1);
- SendString("\r\n");
- SendString("shijian(shi fen miao):\r\n");
- Send(&Uart2_Rec_Buf[7],6);
- SendString("\r\n");
-
- SendString("shijian(nian yue ri):\r\n");
- Send(&Uart2_Rec_Buf[61],2);
- Send(&Uart2_Rec_Buf[59],2);
- Send(&Uart2_Rec_Buf[57],2);
- SendString("\r\n");
-
-
- SendString("dimiansudu:\r\n");
- Send(&Uart2_Rec_Buf[45],6);
- SendString("\r\n");
-
- SendString("dimianhangxiang:\r\n");
- Send(&Uart2_Rec_Buf[51],6);
- SendString("\r\n");
- SendString("cipianjiaofangxiang:\r\n");
- Send(&Uart2_Rec_Buf[66],1);
- SendString("\r\n");
-
- /*
- flag = 0;
- point1=0;
- point2=0;
- ES = 1; */
- clrStruct();
- SendString("\r\n");
- Send(&Uart2_Rec_Buf[0],70);
-
- SendString("\r\nweidu:\r\n");
- Send(&Uart2_Rec_Buf[20],10);
-
- SendString("\r\nnanbeibanqiu:\r\n");
- Send(&Uart2_Rec_Buf[30],1);
- SendString("\r\n");
-
- SendString("jindu:\r\n");
- Send(&Uart2_Rec_Buf[32],11);
- SendString("\r\n");
-
- SendString("dongxibanqiu:\r\n");
- Send(&Uart2_Rec_Buf[43],1);
- SendString("\r\n");
- SendString("shijian(shi fen miao):\r\n");
- Send(&Uart2_Rec_Buf[7],6);
- SendString("\r\n");
-
- SendString("shijian(nian yue ri):\r\n");
- Send(&Uart2_Rec_Buf[61],2);
- Send(&Uart2_Rec_Buf[59],2);
- Send(&Uart2_Rec_Buf[57],2);
- SendString("\r\n");
-
-
- SendString("dimiansudu:\r\n");
- Send(&Uart2_Rec_Buf[45],6);
- SendString("\r\n");
-
- SendString("dimianhangxiang:\r\n");
- Send(&Uart2_Rec_Buf[51],6);
- SendString("\r\n");
- SendString("cipianjiaofangxiang:\r\n");
- Send(&Uart2_Rec_Buf[66],1);
- SendString("\r\n");
-
-
- }
- }
- void Usart2() interrupt 8 using 1
- {
- UART2_INT_DISABLE();
-
- if(RI2)
- {
- CLR_RI2(); //清除RI位
- Uart2_Rec_Buf[point2] = S2BUF;
- if(Uart2_Rec_Buf[0]!=
- )
- {
- point2=0;
- return;
- }
- point2++;
- if(point2>=Uart2_Buf_Max)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
08.LCD1602液晶顯示.zip
(41.51 KB, 下載次數(shù): 35)
2019-3-13 09:39 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|