接下來我們撿起來lcd1602的顯示 與串口通信。實現的功能是通過上位機給單片機通過串口發送信息,然後將發送的信息在lcd1602上顯示出來。
(碼字好累啊,這是第二遍碼字了剛剛這篇博客都要寫完了,要粘貼最後代碼的時候,被bug掉了,csdn的粘貼代碼段千萬不要有空行,分分鐘要你老命,記得保存到草稿箱)
材料:單片機開發板 lcd1602 單片機小精靈 串口調試助手
1、首先我們新建工程,過程略
2、之前我有寫過一lcd的庫文件,可以實現簡單的顯示功能,我們將此頭文件打包放在工程根目錄下。
庫文件將在文章最後共享出來
然後設置include paths,把庫函數所在文件夾添加進去
程序中也包含進去
#include "lcd.h"
設置一下 lcd.h裏的參數,打開原理圖
對應的我們打開lcd.h修改下lcd.h 的參數
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P1^4;
sbit LCD1602_RW=P1^5;
sbit LCD1602_RS=P1^6;
對於這個lcd庫函數調用非常方便例如
LcdInit(); //初始化
LcdLine(1,1);//把光標定位在第一行第一個單元
LcdWriteData(‘a’);顯示a字符
3、然後設置串口中斷,這裏我偷懶了,用的單片機小精靈直接生成的c語言代碼
直接複製粘貼就好,然後在這個框架上進行修改,波特率600 這裏無所謂,速度慢點而已
復(媽蛋這個復字又刪除不了了,趕緊保存一下)。
4、下面是我寫的代碼
#include "reg52.h"
#include "lcd.h"
void InitUART(void);
void SOneByte(unsigned char c);
void UARTInterrupt(void);
unsigned char k;
unsigned char displaybuf[2][16]={" "," "};
unsigned char f1=0;
unsigned char f2=0;
int main()
{
int a,b;
InitUART();
LcdInit();
LcdLine(1,1);
while(1)
{
for(a=0;a<2;a++)
{
LcdLine(a+1,1);
for(b=0;b<16;b++)
LcdWriteData(displaybuf[a][b]);
}
}
}
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xA0;
TL1 = TH1;
PCON = 0x80;
EA = 1;
ES = 1;
TR1 = 1;
}
void SOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
if(f1<16) displaybuf[0][f1++]=SBUF;
else if(f1==16&&f2<16) displaybuf[1][f2++]=SBUF;
else
{
for(;f1>0;f1--)
{
displaybuf[0][f1]=' ';
displaybuf[1][f1]=' ';
}
f2=f1;
displaybuf[0][f1++]=SBUF;
}
SBUF=k;
SOneByte(SBUF);
}
else
{
TI = 0;
}
}
5、編譯鏈接生成hex 燒錄即可
編(啊啊啊這個編又刪不掉了 趕緊保存)
6、編譯燒錄後,用串口調試工具進行測試
搞定!1月3號就考試了,1天看一門課,難受。
鏈接:https://pan.baidu.com/s/1OmqfIiVFvTS_1MRG3uCaiQ
提取碼:apfe
複製這段內容後打開百度網盤手機App,操作更方便哦