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