|
這是基于iap15w4k61s4 主控 lcd1286的顯示
38BEFE958B57549B5504FE451FD5814C.jpg (293.23 KB, 下載次數: 82)
下載附件
字符串顯示
2021-12-8 11:17 上傳
32678D24E895977977238785AAA6DA75.jpg (262.12 KB, 下載次數: 68)
下載附件
顯示漢字
2021-12-8 11:17 上傳
主函數
- #include <STC15F2K60S2.H>
- #include <stdint.h>
- #include <lcd.h>
- #include <hal_delay.h>
- #include "key.h"
- int main()
- {
- LCD_Init();
- key_Init();
- delay_ms(100);
- LCD_ShowString(3,3,4,"CSDN");
- BUZZER_TEST();
- while(1)
- {
-
- KEY_Check();
- }
-
- }
復制代碼 lcd.c
- #include <STC15F2K60S2.H>
- #include <math.h>
- #include "lcd.h"
- #include "hal_delay.h"
- /***************************************************************************
- * 描 述 : LCD12864液晶判忙程序。如LCD為“忙”狀態,一直等待直到LCD空閑
- * 參 數 : 無
- * 返回值 : 無
- **************************************************************************/
- void Busy(void)
- {
- uchar busy;
-
- do
- {
- RW = 1; RS = 0; //讀
- E = 1; //使能液晶模塊.0=關閉使能端,1=打開使能端
- P7M0=0x00;
- P7M1=0x00; //設置P2.0~P2.7為準雙向口
- busy=P7; //讀取P2狀態
- delay_5us(10);
- E = 0; //關閉液晶模塊使能端.0=關閉使能端,1=打開使能端
- }while(busy&0x80); //判斷BUSY位是否工作:1=內部在工作,0=空閑
- }
- /***************************************************************************
- * 描 述 : LCD12864液晶模塊從當前地址讀RAM數據
- * 參 數 : 無
- * 返回值 : Dat:讀取的數據
- **************************************************************************/
- uchar ReadDat(void)
- {
- uchar Dat;
-
- P7 = 0xff;
- Busy(); //判忙
-
- RW = 1;RS = 1; //讀
- E = 1; //使能液晶模塊.0=關閉使能端,1=打開使能端
- Dat=P7; //保存讀取的數據
- delay_5us(1);
- E = 0; //關閉液晶模塊使能端.0=關閉使能端,1=打開使能端
- delay_5us(1);
- return Dat;
- }
- /***************************************************************************
- * 描 述 : LCD12864液晶命令寫入程序
- * 參 數 : cmd[in]:寫入的命令
- * 返回值 : 無
- **************************************************************************/
- void Write_Cmd(uchar cmd)
- {
- Busy(); //判忙
-
- RW=0; RS=0; //寫指令
- P7M1 = 0;
- P7M0 = 0xff; //設置P2.0~P2.7為推挽輸出
- P7=cmd; //寫入命令
-
- E=1; //使能液晶模塊.0=關閉使能端,1=打開使能端
- delay_5us(1);
- E=0; //關閉液晶模塊使能端.0=關閉使能端,1=打開使能端
- delay_5us(1);
- }
- /***************************************************************************
- * 描 述 : LCD12864液晶數據寫入程序
- * 參 數 : dat[in]:寫入的數據
- * 返回值 : 無
- **************************************************************************/
- void Write_Data(uchar dat)
- {
- Busy(); //判忙
- RW=0;RS=1; //寫數據
-
- P7M1 = 0;
- P7M0 = 0xff; //設置P2.0~P2.7為推挽輸出
- P7=dat; //寫入數據
-
- E =1; //使能液晶模塊
- delay_5us(3);
- E =0; //關閉液晶模塊使能端
- }
- /**************************************************************************
- * 描 述 : 指定位置顯示單個字符
- * 參 數 : row[in]:行,范圍1~4
- * :column[in]:列,范圍0~7
- * :chr[in]:字符編碼
- * 返回值 : 無
- **************************************************************************/
- void LCD_ShowChar(uchar row,uchar column,uchar chr)
- {
- uchar Address;
-
- //row判斷第幾行,column判斷第幾列,0x80為液晶行初始地址
- if(row == 1)Address=0x80+column;
- if(row == 2){Address=0x90+column;}
- if(row == 3){Address=0x88+column;}
- if(row == 4){Address=0x98+column;}
- Write_Cmd(Address); //寫入地址命令到LCD12864
- Write_Data(chr); //寫入顯示數據到LCD12864
- }
- /***************************************************************************
- * 描 述 : 字符串顯示
- * 參 數 : row[in]:行,范圍1~4
- * :column[in]:列,范圍0~7
- * :num[in]:字符個數,注意一個漢字=2個字符
- * :s[in]:指向待顯示的字符串
- * 返回值 : 無
- **************************************************************************/
- void LCD_ShowString(uchar row,uchar column,uchar num,uchar *s)
- {
- uchar Address;
-
- //row判斷第幾行,column判斷第幾列,0x80為液晶行初始地址
- if(row == 1)Address=0x80+column;
- if(row == 2){Address=0x90+column;}
- if(row == 3){Address=0x88+column;}
- if(row == 4){Address=0x98+column;}
- Write_Cmd(Address); //寫入顯示起始地址
- while(num) //寫入顯示數據的大小
- {
- Write_Data(*(s++)); //寫入顯示數據到LCD12864
- num--;
- }
- }
- /***************************************************************************
- * 描 述 : 填充,當如數數據為0的時候即可實現清屏
- * 參 數 : dat[in]:填充的數據
- * 返回值 : 無
- **************************************************************************/
- void Fill_GDRAM(uchar dat)
- {
- uchar i,j,k;
- uchar GDRAM_X=0x80;
- uchar GDRAM_Y=0x80;
- for(i=0;i<2;i++)
- {
- for(j=0;j<32;j++)
- {
- for(k=0;k<8;k++)
- {
- Write_Cmd(0x34);
- Write_Cmd(GDRAM_Y+j);
- Write_Cmd(GDRAM_X+k);
- Write_Data(dat);
- Write_Data(dat);
- }
- }
- GDRAM_X=0x88;
- }
- Write_Cmd(DRAM_ON);//開啟繪圖模式
- Write_Cmd(0x30); //恢復基本指令集,關閉繪圖模式
- }
- /***************************************************************************
- * 描 述 : LCD12864液晶初始化程序
- * 參 數 : 無
- * 返回值 : 無
- **************************************************************************/
- void LCD_Init(void)
- {
- P7M1 = 0; P7M0 = 0;
- P4M1 = 0; P4M0 = 0;
- E = 0;
- delay_ms(1);
- Write_Cmd(0x30); // 基本指令集
- delay_ms(1);
- Write_Cmd(0x02); // 地址歸位
- delay_ms(1);
- Write_Cmd(0x0c); // 整體顯示打開,游標關閉
- delay_ms(1);
- Write_Cmd(0x06); // 游標右移
- delay_ms(1);
- Write_Cmd(0x80); // 設定顯示的起始地址
- delay_ms(1);
- Write_Cmd(0x01); // 清除顯示
- delay_ms(10); // 這個延時必須要有,否則可能會出現花屏
- }
- /*********************************END FILE********************************************/
復制代碼
51hei.png (5.03 KB, 下載次數: 70)
下載附件
2021-12-8 16:56 上傳
Keil代碼下載:
12864_SHOW.zip
(63.44 KB, 下載次數: 40)
2021-12-8 11:18 上傳
點擊文件名下載附件
正常顯示能用 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|