久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2501|回復: 1
收起左側

stm32_19264液晶LCD驅動程序

[復制鏈接]
ID:629252 發表于 2019-10-24 09:58 | 顯示全部樓層 |閱讀模式
#ifndef__LCD_H
#define __LCD_H  
#include "sys.h"
#define LCD_RS  PFout(0)// PF.0
#define LCD_E   PFout(1)// PF.1
#define LCD_CS1 PFout(2)// PF.2
#define LCD_RST PFout(3)// PF.3
#define LCD_CS2 PFout(4)// PF.4
#define LCD_CS3 PFout(5)// PF.5
#define LCD_DATA(x)  GPIOE->ODR=(GPIOB->ODR&0x807F)|((x &0x00FF)<<7) //PE7~14,
作為數據線
#define LCD_PAGE_ADDR 0xb8
#define LCD_COL_ADDR  0x40   
void LCDPortSet(void); //LCD IO口配置
void LcdInit(void);   //初始化程序
void LcdClear(void); //清屏程序
void WriteChr16x16(u8 pag,u8 col, u8  *chr); //寫一個漢字   
#endif

/******************************************************lcd.c************************************************/
#include <stm32f10x_lib.h>   
#include "lcd.h"
#include "delay.h"
//LCD IO口配置
void LCDPortSet(void)
{

RCC->APB2ENR|=1<<6;      //使能PORTE時鐘
RCC->APB2ENR|=1<<7;      //使能PORTF時鐘
GPIOE->CRH&=0XF0000000;//PE8-14數據口
GPIOE->CRH|=0X03333333;
GPIOE->CRL&=0X0FFFFFFF;//PE7數據口
GPIOE->CRL|=0X30000000;  
GPIOE->ODR|=0X7F80;      //上拉
GPIOF->CRL&=0XF0000000;
GPIOF->CRL|=0X03333333;  //PF.0 1 2 3 4 5 6推挽輸出
GPIOF->ODR|=1<<0;      //PF.0 輸出高
GPIOF->ODR|=1<<1;      //PF.1 輸出高
GPIOF->ODR|=1<<2;      //PF.2 輸出高
GPIOF->ODR|=1<<3;      //PF.3 輸出高
GPIOF->ODR|=1<<4;      //PF.4 輸出高
GPIOF->ODR|=1<<5;      //PF.5 輸出高
GPIOF->ODR|=1<<6;      //PF.6 輸出高
}

void SelectChip1(void) //選擇第1屏
{
LCD_CS1=0;
LCD_CS2=1;
LCD_CS3=1;
}

void SelectChip2(void) //選擇第2屏
{
LCD_CS1=1;
LCD_CS2=0;
LCD_CS3=1;
}
void SelectChip3(void) //選擇第3屏
{
LCD_CS1=1;
LCD_CS2=1;
LCD_CS3=0;
}
void WriteCommand(u8 cmd)   //寫命令
{     
LCD_RS=0;   //寫命令
//RW=0;
LCD_DATA(cmd);
LCD_E=1;
delay_us(10);
LCD_E=0;
}
void WriteData(u8  dat)  //寫數據
{  
        LCD_RS=1;//寫數據
//RW=0;
LCD_DATA(dat);//數據輸出到數據口
   LCD_E=1; //寫入到LCD
   delay_us(10);
   LCD_E=0;
}

void LcdClear(void) //清屏
{
u16  j = 0;
u16  k = 0;
LCD_CS1 = 0;
LCD_CS2 = 0;
LCD_CS3 = 0;
WriteCommand(LCD_PAGE_ADDR + 0);
WriteCommand(LCD_COL_ADDR  + 0);
for(k=0;k<8;k++)
{
WriteCommand(LCD_PAGE_ADDR+k);
for(j=0;j<64;j++)  
{
WriteData(0x00);
}
}
LCD_CS1 = 1;
LCD_CS2 = 1;
LCD_CS3 = 1;
}

void LcdInit(void) //初始化程序
{
LCD_RST = 0;
delay_us(20);
LCD_RST = 1;
delay_us(5);
LCD_CS1=0;
LCD_CS2=0;
LCD_CS3=0;
WriteCommand(0x3f);  //設置開顯示命令
WriteCommand(0xc0);//設置起始位置
LCD_CS1 = 1;
LCD_CS2 = 1;
LCD_CS3 = 1;
LcdClear();   //清屏
}
void WriteChr16x16(u8 pag,u8 col,u8 *chr) //寫一個漢字
{
u8 i = 0;
u8 j = 0;
u8 col_t = 0;
WriteCommand(0xc0);
col_t = col;
for(i=0;i<2;i++)
{
  for(j=0;j<16;j++)
  {
switch(col_t&0xc0)
{
case 0:
SelectChip1();
WriteCommand(LCD_PAGE_ADDR + pag + i);
WriteCommand(LCD_COL_ADDR  + col_t - 0 );
WriteData(chr[16*i + j]);
col_t++;
break;
case 0x40:
SelectChip2();
WriteCommand(LCD_PAGE_ADDR + pag + i);
WriteCommand(LCD_COL_ADDR  + col_t - 64);
WriteData(chr[16*i + j]);
col_t++;
break;
case 0x80:
SelectChip3();
WriteCommand(LCD_PAGE_ADDR + pag + i);
WriteCommand(LCD_COL_ADDR  + col_t - 128);
WriteData(chr[16*i + j]);
col_t++;
break;
default:  break;
}
   
}
col_t=col_t-16;
}
}
/***************************************************main.c******************************************************/
/**
@說明:JBG19264 LCD測試程序
*/
#include <stm32f10x_lib.h>
#include "sys.h"
#include "delay.h"
#include "lcd.h"
u8 table[][32]={
/*--  文字:  我 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,
/*--  文字:  們 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x80,0x60,0xF8,0x07,0x00,0xF8,0x01,0x06,0x00,0x04,0x04,0x04,0xFC,0x00,0x00,
0x01,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,
/*--  文字:  都 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x26,0x20,0xFE,0x02,0x22,0xDA,0x06,0x00,
0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00,
/*--  文字:  是 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,0x00,
0x81,0x41,0x21,0x1D,0x21,0x41,0x81,0xFF,0x89,0x89,0x89,0x89,0x89,0x81,0x81,0x00,
/*--  文字:  好 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  孩 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x02,0x02,0x02,0xF2,0x8A,0x46,0x08,0x88,0xC8,0xA8,0x99,0x8E,0x88,0x48,0x28,0x00,
0x02,0x42,0x81,0x7F,0x00,0x00,0x88,0x88,0x44,0x44,0x22,0x11,0x28,0x44,0x82,0x00,
/*--  文字:  子 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  我 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,
/*--  文字:  們 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x80,0x60,0xF8,0x07,0x00,0xF8,0x01,0x06,0x00,0x04,0x04,0x04,0xFC,0x00,0x00,
0x01,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,
/*--  文字:  都 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x26,0x20,0xFE,0x02,0x22,0xDA,0x06,0x00,
0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00,
/*--  文字:  是 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,0x00,
0x81,0x41,0x21,0x1D,0x21,0x41,0x81,0xFF,0x89,0x89,0x89,0x89,0x89,0x81,0x81,0x00,
/*--  文字:  好 --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00
};
int main(void)
{  
u8 i = 0;
Stm32_Clock_Init(9); //系統時鐘設置8MHz * 9 = 72MHz
delay_init(72);    //延時初始化
LCDPortSet();    //LCD口設置
LcdInit(); //LCM初始化程序
delay_ms(100);
while(1)
{
LCD_DATA(0x55);
delay_us(10);
LCD_DATA(0xf0);
while(1)
{         
delay_ms(1000);
for(i=0;i<12;i++)
WriteChr16x16(0,i*16,table[ i]);
for(i=0;i<12;i++)
WriteChr16x16(2,i*16,table[ i]);
for(i=0;i<12;i++)
WriteChr16x16(4,i*16,table[ i]);
for(i=0;i<12;i++)
WriteChr16x16(6,i*16,table[ i]);
delay_ms(500);
}   
}  

回復

使用道具 舉報

ID:1 發表于 2019-10-25 03:48 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品高潮呻吟久久 | 亚洲精品久久久一区二区三区 | 精品1区2区 | 香蕉一区| 综合第一页 | 欧美亚洲高清 | 亚洲一区二区中文字幕 | 国产精品一区网站 | www.久久影视| 亚洲成人精选 | 国产免费一区二区三区 | 亚洲www啪成人一区二区 | 每日在线更新av | 中文字幕人成人 | 日韩影音 | 亚洲欧美一区二区三区在线 | 男女羞羞视频在线观看 | 欧美日韩精品一区二区 | 久久久久久成人 | 懂色中文一区二区三区在线视频 | av网站在线免费观看 | 毛片免费看的 | 日韩中文一区二区三区 | 日韩网站在线 | 精品免费在线 | 婷婷不卡| 亚洲欧美一区二区三区情侣bbw | 久久久天天 | 久久久久久一区 | 亚洲 中文 欧美 日韩 在线观看 | 日韩一区二区在线播放 | 久久神马 | 中文字幕高清一区 | av大片| 久久成人一区 | 婷婷色婷婷 | 日本又色又爽又黄的大片 | 欧美一区二区三区国产 | 91精品国产综合久久久久久丝袜 | 国产网站在线播放 | 国产精品成人在线观看 |