|
lcd1602.c和lcd1602.h文件加入工程即可。
PIC18F25K80 開(kāi)發(fā)環(huán)境MPLAB X IDE v3.35,PIC的芯片都可以,需要適當(dāng)修改void LCD_DelayMs(uint16_t Ms)函數(shù)。
PIC18F25K80_LCD1602.X.rar
(1.63 KB, 下載次數(shù): 34)
2016-9-14 13:03 上傳
點(diǎn)擊文件名下載附件
PIC18F25K80_LCD1602源程序
- /*
- * File: lcd1602.c
- * Author: BG8LY
- *
- * Created on 2016年9月13日, 下午12:16
- */
- #include <xc.h>
- #include <stdint.h>
- #include "lcd1602.h"
- //LCD ms毫秒延時(shí)函數(shù)
- void LCD_DelayMs(uint16_t Ms)
- {
- uint16_t x,y;
- for(x=Ms; x>0; x--)
- {
- for(y=250; y>0; y--);
- }
- }
- //忙檢測(cè)
- void LCD_Read_Busy(void)
- {
- LCD_BUSY_TRIS = 1; // 置忙檢測(cè)端口設(shè)置為輸入
- do
- {
- LCD_E = 0;
- LCD_RS = 0;
- LCD_RW = 1;
- Nop();
- LCD_E = 1;
- Nop();
- Nop();
- }while(LCD_BUSY);
- LCD_BUSY_TRIS = 0; // 恢復(fù)忙檢測(cè)位端口為輸出
- }
- //寫指令,busyDect=0時(shí)不需要忙檢測(cè)
- void LCD_Write_Reg(uint8_t Cmd, uint8_t BusyDect)
- {
- if(BusyDect==1)
- {
- LCD_Read_Busy();
- }
- LCD_E = 0;
- LCD_RS = 0;
- LCD_RW = 0;
- DATA_PORT = Cmd;
- Nop();
- LCD_E = 1;
- Nop();
- Nop();
- LCD_E = 0;
- }
- //寫字節(jié)數(shù)據(jù),寫數(shù)據(jù)總需要忙檢測(cè)
- void LCD_Write_Data(uint8_t Data)
- {
- LCD_Read_Busy();
- LCD_E = 0;
- LCD_RS = 1;
- LCD_RW = 0;
- DATA_PORT = Data;
- Nop();
- LCD_E = 1;
- Nop();
- Nop();
- LCD_E = 0;
- }
- //寫數(shù)據(jù)到(x,y)
- void LCD_Display_Char(uint8_t x, uint8_t y, uint8_t Data)
- {
- x &= 0x0F; // 限制列數(shù)不大于16個(gè)字符
- y &= 0x01; // 限制行數(shù)不大于2行
- if(y == 0x01)
- {
- x |= 0x40;
- }
- x | = 0x80;
-
- LCD_Write_Reg(x, 1);
-
- LCD_Write_Data(Data);
- }
- //從(x,y)開(kāi)始寫字符串
- void LCD_Display_String(uint8_t x, uint8_t y, char *str)
- {
- x &= 0x0F; // 限制列數(shù)不大于16個(gè)字符
- y &= 0x01; // 限制行數(shù)不大于2行
- if(y == 0x01)
- {
- x |= 0x40;
- }
- x | = 0x80;
-
- LCD_Write_Reg(x, 1);
-
- while(*str != '\0')
- {
- LCD_Write_Data(*str++);
- }
- }
- //LCD清屏
- void LCD_Clear(void)
- {
- LCD_Write_Reg(0x01,1); // 清屏
- LCD_Read_Busy();
- }
- //LCD初始化
- void LCD_Init(void)
- {
- // LCD 控制端口初始化
- LCD_RS_TRIS = 0; // 數(shù)據(jù)命令選擇端口方向->輸出
- LCD_RW_TRIS = 0; // 讀寫選擇端口方向->輸出
- LCD_E_TRIS = 0; // 使能信號(hào)端口方向->輸出
- DATA_PORT_TRIS = 0x00; // 數(shù)據(jù)端口方向->輸出
-
- // LCD 功能寄存器初始化
- LCD_DelayMs(5);
- LCD_Write_Reg(0x38,0);
- LCD_DelayMs(5);
- LCD_Write_Reg(0x38,0);
- LCD_DelayMs(5);
- LCD_Write_Reg(0x38,0); // 三次寫入0x38,初始化1602,前三次不用忙檢測(cè),以后需要
- LCD_Write_Reg(0x38,1); // 設(shè)置5*7的1602模式
- LCD_Write_Reg(0x08,1); // 關(guān)閉顯示
- LCD_Write_Reg(0x01,1); // 清屏
- LCD_Write_Reg(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置:讀寫一字指針+1,屏幕不動(dòng)
- LCD_Write_Reg(0x0C,1); // 開(kāi)顯示,不顯示光標(biāo),光標(biāo)不閃爍
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|