单片机源程序如下:
- #include "MAIN.H"
- #include "DELAY.H"
- #include "lcd1602.h"
- #include "uart.h"
- #include<string.h>
- #define Uart1_Buf_Max 70//串口数据缓存长度
- #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]; //串口数据缓存
- u8 point1 = 0; //绶存指针
- u8 a,flag;
- u8 xdata Uart2_Rec_Buf[Uart2_Buf_Max]; //串口数据缓存
- u8 point2 = 0;
- /************* 本地函数声明 **************/
- /************* 外部函数和变量声明 *****************/
- bit B_TX2_Busy = 0;
- /******************** IO配置函数 **************************/
- void GPIO_config(void)
- {
- P5M0 &= ~(1<<5); //设置P5.5为准双向口
- P5M1 &= ~(1<<5);
- }
- /******************** 主函数 **************************/
- void UartInit(void) //9600bps@11.0592MHz
- {
- //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
- // 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
- //相关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位数据,可变波特率
- AUXR |= 0x40; //定时器1时钟为Fosc,即1T
- AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
- TMOD &= 0x0F; //清除定时器1模式位
- TMOD |= 0x20; //设定定时器1为8位自动重装方式
- TL1 = 0xDC; //设定定时初值
- TH1 = 0xDC; //设定定时器重装值
- ET1 = 0; //禁止定时器1中断
- TR1 = 1; //启动定时器1
- S2CON = 0x50; //8位数据,可变波特率
- AUXR |= 0x04; //定时器2时钟为Fosc,即1T
- T2L = 0xE0; //设定定时初值
- T2H = 0xFE; //设定定时初值
- AUXR |= 0x10; //启动定时器2
- UART2_INT_ENABLE();
- ES = 1;
- EA = 1;
- }
- /*----------------------------
- 发送串口数据
- ----------------------------*/
- void SendData(unsigned char ch)
- {
- SBUF = ch; //写数据到UART数据寄存器
- while(TI == 0);
- TI = 0;
- }
- /*----------------------------
- 发送字符串
- ----------------------------*/
- void SendString(char *s)
- {
- while (*s) //检测字符串结束标志
- {
- SendData(*s++); //发送当前字符
- }
- }
- 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) // 串口命令识别函数
- {
- 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发送串口数据
- ----------------------------*/
- void Uart2SendData(unsigned char ch)
- {
- while(B_TX2_Busy); //不忙后发送数据
- S2BUF = ch; //写数据到UART数据寄存器
- B_TX2_Busy = 1;
- }
- /*----------------------------
- 通过串口2发送字符串
- ----------------------------*/
- void Uart2SendString(char *s)
- {
- while (*s) //检测字符串结束标志
- {
- Uart2SendData(*s++); //发送当前字符
- }
- }
- bit Uart2Hand(unsigned char *a) // 串口命令识别函数
- {
- 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黑下载附件…………
复制代码
所有资料51hei提供下载:
08.LCD1602液晶显示.zip
(41.51 KB, 下载次数: 35)
|