本人學習單片機有段時間了,前段時間在網上淘了一個最小系統板,和LCD1602A液晶顯示屏。折騰了半天不知道什么原因始終無顯示,檢查連接線沒問題, 最小系統板也沒問題。后來我分析可能是液晶顯示屏是壞的,于是又在網上淘了兩片,6元錢一片。回來一測試依舊沒有顯示。問題在哪呢?把代碼發給朋友看,朋友檢查了也沒有問題,始終就是第一排黑色方塊。今天閑來沒事又拿出來擺弄,結果打開電源居然有顯示了,但是關閉電源后再開又沒有了,我就反復開關電源了一百多次依舊沒有反應,后來我想既然有一次有顯示代碼就應該沒有問題。那就是硬件了。于是花了兩個小時自己焊接了一個最小系統板,一次成功。由于沒有畫圖直接焊接的,現在把代買與大家分享。大蝦請繞行。
制作出來實物圖如下:
再發一張
有顯示了
焊接技術就這樣,勿噴
代碼一個文件
單片機源程序如下:
- #include <STC89C5xRC.H>
- #define uchar unsigned char
- #define uint unsigned int
- #define LCD1602_DB P0
- sbit LCD1602_RS = P2^0; //數據/命令選擇端
- sbit LCD1602_RW = P2^1; //讀寫選擇端
- sbit LCD1602_EN = P2^2; //使能信號
- void InitLcd1602(); //初始化液晶函數
- void Lcd1602Show(uchar x,uchar y,uchar *str); //顯示數據函數
- /************************************這是主函數******************************************/
- void main()
- {
- uchar str[] = "This is demo!";
- InitLcd1602(); //初始化液晶
- Lcd1602Show(2,0,str); //指定坐標顯示字符串
- Lcd1602Show(0,1,"WeChat:6731663"); //指定坐標顯示字符串
- while(1);
- }
- /***********************************LCD遇忙等待函數****************************************/
- void LcdWaitReady()
- {
- uchar sta;
- LCD1602_DB = 0xFF;
- LCD1602_RS = 0;
- LCD1602_RW = 1;
- do{
- LCD1602_EN = 1;
- sta = LCD1602_DB;
- LCD1602_EN = 0;
- }while(sta & 0x80); //數據端口最高位一直為高電平時它會一直等待。
- }
- /***********************************液晶寫指令函數*****************************************/
- void LCD1602WriteCMD(uchar cmd)
- {
- LcdWaitReady(); //LCD遇忙等待
- LCD1602_RS = 0;
- LCD1602_RW = 0;
- LCD1602_DB = cmd;
- LCD1602_EN = 1; //使能引腳高脈沖
- LCD1602_EN = 0;
- }
- /***********************************初始化液晶函數*****************************************/
- void InitLcd1602()
- {
- LCD1602WriteCMD(0x38); //顯示模式設置:16*2顯示,5*7點陣,8位數據接口
- LCD1602WriteCMD(0x0C); //顯示開關及光標設置:顯示開,光標關。
- LCD1602WriteCMD(0x06); //光標+1,并且整屏不動
- LCD1602WriteCMD(0x01); //顯示清零,所有數據清零。
- }
- /**********************************液晶當前坐標函數****************************************/
- void LcdSetCursor(uchar x,uchar y)
- {
- uchar addr;
- if(y==0)
- {
- addr = 0x00 + x;
- }
- else
- {
- addr = 0x40 + x;
- }
- LCD1602WriteCMD(addr | 0x80); //LCD數據指針必須是0x80開頭
- }
- /***********************************液晶寫數據函數*****************************************/
- void LcdWriteDate(uchar dat)
- {
- LcdWaitReady(); //遇忙等待
- LCD1602_RS = 1;
- LCD1602_RW = 0;
- LCD1602_DB = dat;
- LCD1602_EN = 1; //使能引腳高脈沖
- LCD1602_EN = 0;
- }
- /***********************************液晶顯示函數*******************************************/
- void Lcd1602Show(uchar x,uchar y,uchar *str)
- {
- LcdSetCursor(x,y); //LCD當前坐標函數
- while(*str != '\0') //字符串沒有結束時執行
- {
- LcdWriteDate(*str++); //傳遞完STR數據在對地址加加
-
- }
- }
復制代碼
所有資料51hei提供下載:
LCD1602-1.rar
(25.52 KB, 下載次數: 151)
2018-8-7 16:46 上傳
點擊文件名下載附件
代碼和HEX文件
|