仿真報錯的請看這里!!!
使用proteus中12864液晶再也不用擔心沒有字庫了?
http://www.zg4o1577.cn/bbs/dpj-59193-1.html
單片機源程序如下:
- /* ***************************************************** */
- // QQ交流 :1181826414
- /* ***************************************************** */
- // 工 程 : 51單片機開發板
- // 文件名 : LCD12864.c
- // 處理器 : STC89C52RC
- // 編譯環境 : Keil4 C51
- // 系統時鐘 : 11.0592MHZ
- // 版 本 : V1.0
- // 生成日期 : 2017-09-20
- // 修改日期 :
- // 簡單描述 : 本文件是帶字庫LCD12864顯示程序
- /* ***************************************************** */
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define Lcd_Bus P0 //數據總線
- /* ***************************************************** */
- // 位定義
- /* ***************************************************** */
- sbit RS=P2^4; //數據/命令選擇端(H/L)
- sbit RW=P2^5; //數/寫選擇端(H/L)
- sbit E=P2^6; //使能信號
- /* ***************************************************** */
- // 函數名稱:DelayMS()
- // 函數功能:延時毫秒數(ValMS)
- // 入口參數:無
- // 出口參數:無
- /* ***************************************************** */
- void DelayMS(uint ValMS)
- {
- uint uiVal,ujVal;
- for(uiVal = 0; uiVal < ValMS; uiVal++)
- for(ujVal = 0; ujVal < 121; ujVal++);
- }
- /* ***************************************************** */
- // 函數名稱hk_busy()
- // 函數功能:檢測狀態標志位(判斷是忙/閑)
- // 入口參數:無
- // 出口參數:無
- /* ***************************************************** */
- void chk_busy()
- {
- Lcd_Bus=0x00;
- RS=0;
- RW=1;
- E=1;
- DelayMS(1);
- while(Lcd_Bus & 0x80); // 若LCD忙,停止到這里,否則走起
- E=0; // 之后將EN初始化為低電平
- }
-
- /* ***************************************************** */
- // 函數名稱rite_com()
- // 函數功能:LCD寫指令
- // 入口參數:指令(cmdcode)
- // 出口參數:無
- /* ***************************************************** */
- void write_com(unsigned char cmdcode)
- {
- chk_busy(); //忙檢查
- RS=0;
- RW=0; //RS=0,RW=0;表示MCU寫指令到暫存器IR
- E=1;
- Lcd_Bus=cmdcode; //Lcd_Bus=P0;
- E=0; //E由高到低變化配合W進行寫指令或寫數據
- }
- /* ***************************************************** */
- // 函數名稱rite_data()
- // 函數功能:LCD寫數據
- // 入口參數:數據(Dispdata)
- // 出口參數:無
- /* ***************************************************** */
- void write_data(unsigned char Dispdata)
- {
- chk_busy(); //忙檢查
- RS=1;
- RW=0; //RS=1;RW=0;表示MCU寫數據到暫存器IR
- E=1;
- Lcd_Bus=Dispdata; //Lcd_Bus=P0;
- E=0; //E由高到低變化配合W進行寫指令或寫數據
- }
- /* ***************************************************** */
- // 函數名稱:lcm_init()
- // 函數功能:LCD初始化
- // 入口參數:無
- // 出口參數:無
- /* ***************************************************** */
- void lcm_init()
- {
- write_com(0x30); //選擇8bit數據流 0X30=0011,0000
- DelayMS(10);
- write_com(0x0C); //開顯示(無游標,不反白)
- DelayMS(10);
- write_com(0x01); //清除顯示,并且設定地址指針為00H
- DelayMS(10);
- }
- //============================================================//寫數據或指令(被調用層)
- void lcm_w_test(bit i,unsigned char word)
- {
- if(i == 0) //根據i的狀態區分指令或數據
- {
- write_com(word);//寫數據或指令(0,指令)
- }
- else
- {
- write_data(word);//寫指令或數據(1,數據)
- }
- }
- //-----------------------------------------------------------//清屏函數
- void lcm_clr(void){
- lcm_w_test(0,0x01);
- }
- //===========================================================//向LCM發送一個字符串,長度64字符之內(被調用層),
- void lcm_w_word(unsigned char *s)
- {
- while(*s>0) //*s指針
- {
- write_data(*s);//用指針顯示數據地址
- s++; //自加顯示下一個數據地址
- }
- }
- void welcome(void) //初始化開機顯示
- {
- lcm_w_test(0,0x81); //寫指令和地址
- lcm_w_word ("空山新雨后,"); //寫顯示數據
- lcm_w_test(0,0x91);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
字庫LCD12864液晶.zip
(297.99 KB, 下載次數: 1752)
2017-9-21 00:04 上傳
點擊文件名下載附件
|