12864顯示一個點
單片機源程序如下:
#include "delay.h"
#include "12864.h"
unsigned char x,y;
int main(void)
{
SystemInit(); //系統(tǒng)初始化
delay_init(72); //延時初始化
LCD12864_InitPort(); //端口初始化
LCD12864_Init(); //液晶初始化
for(x=0;x<4;x++)
{
for(y=0;y<16;y++)
{
LCD12864_Pos(x,y);
LCD12864_Wdat(0x2E);
delay_ms(1000);
LCD12864_Clr(); // 清屏
}
}
while(1);
}
- #include "stm32f10x.h"
- #include"12864.h"
- #include"delay.h"
- /************************************************************************************************
- @f_name: void GPIO_Init(void)
- @brief: 初始化硬件端口配置
- @param: None
- @return: None
- ************************************************************************************************/
- void LCD12864_InitPort(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE);
- GPIO_InitStructure.GPIO_Pin = LCD_GPIO_CMD; // 指令口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出模式
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_GPIO_DAT; //數(shù)據(jù)口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //開漏輸出模式
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOG,&GPIO_InitStructure); //初始化IO口配置
-
- GPIO_Write(GPIOG,0xff00); //該行指令似乎可以去掉
- }
- /************************************************************************************************
- @f_name: LCD12864_busy()
- @brief: 檢測忙狀態(tài)
- @Function: 讀取引腳15的輸入數(shù)據(jù).
- @annotation: 結(jié)合前文 RS=0、RW=1, 以及12864中文字庫說明書之基本指令表: 讀取忙碌標志和地址,
- 可知:該行指令的實際作用是: 判斷12864是否處于(讀取數(shù)據(jù))忙狀態(tài).
- @note: 因為判斷的是數(shù)據(jù)位(DB0-DB7)忙狀態(tài), 所以忙狀態(tài)位必須與DB7位一致.
- @param: None
- @return: None
- ************************************************************************************************/
- u8 LCD12864_busy(void)
- {
- u8 x;
- LCD_RS(0);
- LCD_RW(1);
- LCD_EN(1);
- NOP();
- NOP();
- x = Text_Busy; // 讀取引腳15的輸入數(shù)據(jù).
- LCD_EN(0);
- return x;
- }
- /************************************************************************************************
- @f_name: void LCD12864_Wcmd(u8 dat)
- @brief: 寫指令
- @param: u8 dat 輸入指令
- @return: None
- ************************************************************************************************/
- void LCD12864_Wcmd(u8 dat) // 寫指令
- {
- while(LCD12864_busy()); //忙檢測
- LCD_RS(0);
- LCD_RW(0);
- LCD_EN(0);
- NOP();
- NOP();
- LCD_WriteData(dat);
- NOP();
- NOP();
- LCD_EN(1);
- NOP();
- NOP();
- LCD_EN(0);
- }
- /************************************************************************************************
- @f_name: void LCD12864_Wdat(u8 dat)
- @brief: 寫數(shù)據(jù)
- @param: u8 dat 輸入數(shù)據(jù)
- @return: None
- ************************************************************************************************/
- void LCD12864_Wdat(u8 dat) //寫數(shù)據(jù)
- {
- while(LCD12864_busy()); //忙檢測
- LCD_RS(1);
- LCD_RW(0);
- LCD_EN(0);
- NOP();
- NOP();
- LCD_WriteData(dat);
- NOP();
- NOP();
- LCD_EN(1);
- NOP();
- NOP();
- LCD_EN(0);
- }
- /************************************************************************************************
- @f_name: void LCD12864_Init(void)
- @brief: 液晶初始化
- @param: None
- @return: None
- ************************************************************************************************/
- void LCD12864_Init(void)
- {
- LCD_PSB(1); //并口方式
- LCD_RST(0); //液晶復位
- delay_ms(3);
- LCD_RST(1); //置高電平等待復位
- delay_ms(3);
- // LCD12864_Wcmd(0x34); //擴充指令操作
- delay_ms(5);
- LCD12864_Wcmd(0x30); //基本指令操作
- delay_ms(5);
- LCD12864_Wcmd(0x0C); //顯示開,關光標
- delay_ms(5);
- LCD12864_Wcmd(0x01); //清屏
- delay_ms(5);
- }
- /************************************************************************************************
- @f_name: void LCD12864_Clr(void)
- @brief: 清屏
- @param: None
- @return: None
- ************************************************************************************************/
- void LCD12864_Clr(void)
- {
- LCD12864_Wcmd(0x34); //擴充指令操作 “繪圖”
- delay_ms(5);
- LCD12864_Wcmd(0x30); //基本指令操作
- delay_ms(5);
- LCD12864_Wcmd(0x01); //清屏
- delay_ms(5);
- }
- /************************************************************************************************
- @f_name: void LCD12864_Pos(u8 x,u8 y)
- @brief: 設置顯示位置
- @param: u8 x:X軸 u8 y:Y軸
- @return: None
- ************************************************************************************************/
- void LCD12864_Pos(u8 x,u8 y)
- {
- u8 pos;
- if (x==1) {x=0x80;}
- else if (x==2) {x=0x90;}
- else if (x==3) {x=0x88;}
- else if (x==4) {x=0x98;}
- else x=0x80;
- pos = x+y ;
- LCD12864_Wcmd(pos); //顯示地址
- }
- /************************************************************************************************
- @f_name: void LCD12864_PhotoDis(u8 *bmp)
- @brief: 顯示圖形
- @param: u8 *bmp 圖形數(shù)組
- @return: None
- ************************************************************************************************/
- void LCD12864_PhotoDis(u8 *bmp)
- {
- u8 i,j;
- LCD12864_Wcmd(0x34); //關閉圖形顯示
-
- for(i=0;i<32;i++)
- {
- LCD12864_Wcmd(0x80+i); //先寫入水平坐標值
- LCD12864_Wcmd(0x80); //寫入垂直坐標值
- for(j=0;j<16;j++) //再寫入兩個8位元的數(shù)據(jù)
- LCD12864_Wdat(*bmp++);
- delay_ms(1);
- }
-
- for(i=0;i<32;i++)
- {
- LCD12864_Wcmd(0x80+i);
- LCD12864_Wcmd(0x88);
- for(j=0;j<16;j++)
- LCD12864_Wdat(*bmp++);
- delay_ms(1);
- }
- LCD12864_Wcmd(0x36); //寫完數(shù)據(jù),開圖形顯示
- }
- /************************************************************************************************
- @f_name: void LCD_ShowString(u8 x,u8 y,const u8 *p)
- @brief: 顯示字符串
- @param: u8 *bmp 圖形數(shù)組
- @return: None
- ************************************************************************************************/
- void LCD_ShowString(u8 x,u8 y,const u8 *p)
- {
- u8 temp;
- if(x>4) {x=1;}
- if(y>4) {y=0;}
-
- LCD12864_Pos(x,y);
-
- temp=*p;
- while(temp!='\0')
- {
- LCD12864_Wdat(temp);
- temp=*(++p);
- }
- }
- /************************************************************************************************
- @f_name: void NOP(void)
- @brief: 延時函數(shù)
- @param: None
- @return: None
- ************************************************************************************************/
- void NOP(void)
- { u8 i; for(i=0; i<100; i++); }
復制代碼
Keil代碼下載:
12864_poi_display.7z
(190.16 KB, 下載次數(shù): 39)
2022-4-22 23:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|