LCD12864大液晶任意位置顯示文字
MJWZ[C4V(ML34W00KXJO)HD.png (422.52 KB, 下載次數: 54)
下載附件
2021-5-15 23:58 上傳
IMG_20210515_234056.jpg (1.47 MB, 下載次數: 55)
下載附件
2021-5-15 23:59 上傳
單片機源程序如下:
- #include "LCD12864.h"
- #include "U_Font.h"
- uint8_t LCD12864_GRAM[1024]; /* LCD12864 顯存 */
- /*=======================================================================================*/
- void LCD12864_Init(void)
- {
- LCD12864_GPIO_Config();
- LCD12864_Write_CMD(0x30); //選擇基本指令操作
- LCD12864_Write_CMD(0x0c); //顯示開,關光標
- LCD12864_Write_CMD(0x01); //清除LCD12864的顯示內容
- }
- void LCD12864_GPIO_Config(void)
- {
- GPIO_InitTypeDef h_GPIO_LCD12864;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
-
- h_GPIO_LCD12864.GPIO_Mode = GPIO_Mode_Out_PP;
-
- h_GPIO_LCD12864.GPIO_Pin = LCD12864_RS_Pin|
- LCD12864_RW_Pin|
- LCD12864_EN_Pin;
-
- h_GPIO_LCD12864.GPIO_Speed = GPIO_Speed_50MHz;
-
- GPIO_Init(LCD12864_CMD_Port,&h_GPIO_LCD12864);
- }
- void LCD12864_DAT_Port_Switch_InPut(void) /*LCD12864 Dat Port 切換為輸入*/
- {
- GPIO_InitTypeDef h_GPIO_LCD12864;
-
- h_GPIO_LCD12864.GPIO_Mode = GPIO_Mode_IPU;
-
- h_GPIO_LCD12864.GPIO_Pin = GPIO_Pin_0|
- GPIO_Pin_1|
- GPIO_Pin_2|
- GPIO_Pin_3|
- GPIO_Pin_4|
- GPIO_Pin_5|
- GPIO_Pin_6|
- GPIO_Pin_7;
-
- GPIO_Init(LCD12864_DAT_Port,&h_GPIO_LCD12864);
- }
- void LCD12864_DAT_Port_Switch_OutPut(void) /*LCD12864 Dat Port 切換為輸出*/
- {
- GPIO_InitTypeDef h_GPIO_LCD12864;
-
- h_GPIO_LCD12864.GPIO_Mode = GPIO_Mode_Out_PP;
-
- h_GPIO_LCD12864.GPIO_Pin = GPIO_Pin_0|
- GPIO_Pin_1|
- GPIO_Pin_2|
- GPIO_Pin_3|
- GPIO_Pin_4|
- GPIO_Pin_5|
- GPIO_Pin_6|
- GPIO_Pin_7;
-
- h_GPIO_LCD12864.GPIO_Speed = GPIO_Speed_50MHz;
-
- GPIO_Init(LCD12864_DAT_Port,&h_GPIO_LCD12864);
- }
- uint8_t LCD12864_Check_Busy(void)
- {
- uint8_t outTime;
-
- LCD12864_RS_Low();
- LCD12864_RW_High();
- LCD12864_EN_High();
-
- LCD12864_DAT_Port_Switch_InPut();
-
- while((GPIO_ReadInputData(LCD12864_DAT_Port) & 0x80) == 0x80)
- {
- outTime++;
- if(outTime > 100)
- {
- LCD12864_EN_Low();
- return 1;
- }
- }
- LCD12864_EN_Low();
- return 0;
- }
- void LCD12864_Write_CMD(uint8_t cmd)
- {
- while(LCD12864_Check_Busy());
-
- LCD12864_RS_Low();
- LCD12864_RW_Low();
- LCD12864_EN_Low();
-
- LCD12864_DAT_Port_Switch_OutPut();
-
- GPIO_Write(LCD12864_DAT_Port,(uint16_t)cmd);
-
- LCD12864_EN_High();
-
- LCD12864_EN_Low();
-
- }
- void LCD12864_Write_DAT(uint8_t dat)
- {
- while(LCD12864_Check_Busy());
-
- LCD12864_RS_High();
-
- LCD12864_RW_Low();
-
- LCD12864_EN_Low();
-
- LCD12864_DAT_Port_Switch_OutPut();
-
- GPIO_Write(LCD12864_DAT_Port,(uint16_t)dat);
-
- LCD12864_EN_High();
-
- LCD12864_EN_Low();
- }
- /*=======================================================================================*/
- void LCD12864_GRAM_SetPoint /* 畫點在LCD12864_GRAM里 */
- (
- uint8_t x, /* 點的坐標X 0~127 */
- uint8_t y, /* 點的坐標Y 0~63 */
- uint8_t color /* 點的顏色 0 or 1 */
- )
- {
- if( x > 127 ) return;
- if( y > 63 ) return;
- if(color == 1)
- {
- LCD12864_GRAM[y*16+(x/8)] |= 0x80 >> (x % 8);
- }
- else
- {
- LCD12864_GRAM[y*16+(x/8)] &= ~(0x80 >> (x % 8));
- }
- }
- void LCD12864_GRAM_Refresh(void) /* 用LCD12864_GRAM里的數據刷新LCD12864*/
- {
- uint16_t i,ii,count,count2;
-
- count = 0;
- count2 = 0;
-
- LCD12864_Write_CMD(0x34);
-
- for(ii=0;ii<32;ii++)
- {
- LCD12864_Write_CMD(0x80+ii);
- LCD12864_Write_CMD(0x80);
-
- for(i=0;i<8;i++)
- {
- LCD12864_Write_DAT(LCD12864_GRAM[count]);
- LCD12864_Write_DAT(LCD12864_GRAM[count+1]);
- count+=2;
- }
- for(i=8;i<16;i++)
- {
- LCD12864_Write_DAT(LCD12864_GRAM[count2+512]);
- LCD12864_Write_DAT(LCD12864_GRAM[count2+1+512]);
- count2+=2;
- }
- }
-
- LCD12864_Write_CMD(0x36);
- LCD12864_Write_CMD(0x30);
- }
- void LCD12864_Clear /* LCD12864清屏 */
- (
- uint8_t state /* LCD12864清屏的狀態 0x00 ~ 0xFF */
- )
- {
- uint16_t i;
-
- for(i=0;i<1024;i++)
- {
- LCD12864_GRAM[i] = state;
- }
- LCD12864_GRAM_Refresh();
- }
- void LCD12864_Show8X16_Char /* 顯示8*16像素大小的字符串 */
- (
- uint8_t x,
- uint8_t y,
- uint8_t chr
- )
- {
- uint8_t i,ii;
- uint8_t xx,yy;
- uint8_t chrr;
-
- chrr = chr - 32;
- xx = x;
- yy = y;
-
- for(i=0;i<16;i++)
- {
- for(ii=0;ii<8;ii++)
- {
- if( ( ( ASCII_8X16[chrr * 16 + i] >> ii ) & 0x01 ) == 1 )
- {
- LCD12864_GRAM_SetPoint(xx+ii,yy+i,1);
- }
- else
- {
- LCD12864_GRAM_SetPoint(xx+ii,yy+i,0);
- }
- }
- }
- }
- void LCD12864_GRAM_Show6X8_Char /* 顯示6*8像素大小的字符串 */
- (
- uint8_t x,
- uint8_t y,
- uint8_t chr
- )
- {
- uint8_t i,ii;
-
- chr -= 32;
-
- for(i=0;i<6;i++)
- {
- for(ii=0;ii<8;ii++)
- {
- if( ( ( ASCII_6X6[chr*6+i] >> ii ) & 0x01 ) == 1)
- {
- LCD12864_GRAM_SetPoint(x+i,y+ii,1);
- }
- else
- {
- LCD12864_GRAM_SetPoint(x+i,y+ii,0);
- }
- }
- }
- }
- void LCD12864_Show8X16_Str /* 顯示單個字符像素為8*16的字符串 自帶刷新LCD12864*/
- (
- uint8_t x, /* 字符左上角起始坐標X */
- uint8_t y, /* 字符左上角起始坐標Y */
- uint8_t *str /* 要顯示的字符串 */
- )
- {
- while(*str != '\0')
- {
- LCD12864_Show8X16_Char(x,y,*str);
- x += 8;
- str++;
- }
- LCD12864_GRAM_Refresh();
- }
- void LCD12864_Show6X8_Str /* 顯示單個字符像素為6*8的字符串 自帶刷新LCD12864*/
- (
- uint8_t x, /* 字符左上角起始坐標X */
- uint8_t y, /* 字符左上角起始坐標Y */
- uint8_t *str /* 要顯示的字符串 */
- )
- {
- while(*str != '\0')
- {
- LCD12864_GRAM_Show6X8_Char(x,y,*str);
- x += 6;
- str++;
- }
- LCD12864_GRAM_Refresh();
- }
- /*=======================================================================================*/
復制代碼
全部資料51hei下載地址:
代碼資料.7z
(1.11 MB, 下載次數: 82)
2021-5-16 00:21 上傳
點擊文件名下載附件
Demo工程
|