|
#include "stm32f10x.h"
static __IO uint32_t TimingDelay;
void RCC_Configuration(void);
void Delay(__IO uint32_t nTime);
#define Line1 0x80//液晶第一行
#define Line2 0x90//液晶第二行
#define Line3 0x88//液晶第三行
#define Line4 0x98//液晶第四行
#define LCD_IO GPIOE //我用的是 E.2 E.3 E.4 E.5 E.6
#define CS GPIO_Pin_2
#define RW GPIO_Pin_3
#define CLK GPIO_Pin_4
#define PSB GPIO_Pin_5
#define RST GPIO_Pin_6
#define SET(n) GPIO_SetBits(GPIOE,n) //將對應管腳輸出高電平
#define RESET(n) GPIO_ResetBits(GPIOE,n)//輸出低電平
#define CMD (uint32_t)0xf8000000 //串行 寫入的是命令要先寫入0xf8
#define DATE (uint32_t)0xfa000000 // 串行 寫入數據要先寫入0xfa
void LCD_IOinit_OUT() //推挽輸出模式 ,管腳配置,不多解釋,庫函數有
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_IO, &GPIO_InitStructure);
}
void LCD_Write(uint32_t cmd,uint8_t ddata)//LCD 寫函數
{
uint32_t temp=cmd;
uint32_t i;
RESET(CS); //片選拉低
temp|=((uint32_t)(ddata&(uint8_t)0xf0)<<16)+((uint32_t)(ddata&(uint8_t)0x0f)<<12);
SET(CS); //片選拉高,開始傳輸數據
for(i=0;i<24;i++)
{
if(temp&0x80000000)SET(RW); //取出最高位,如果是1,那么RW就寫1
else RESET(RW); //如果是0 RW就寫0
SET(CLK);//向液晶寫數據 是在下降沿寫入的
Delay(2);//稍作延時
RESET(CLK);//拉低產生下降沿,寫入數據
temp=temp<<1;//左移一位 ,寫入下一位
}
RESET(CS); //拉低片選,寫入數據完畢
}
void Display(uint8_t addr,uint8_t *hz)
{
LCD_Write(CMD,addr);
Delay(3);
while(*hz!='\0')
{
LCD_Write(DATE,*hz);
hz++;
Delay(3);
}
}
void LCD_init()//液晶初始化
{
RESET(CS); //拉低片選
RESET(PSB);//PSB拉低,表示是串行,拉高則是并行
RESET(RST);//拉低RST
Delay(100);
SET(RST);
Delay(40);
LCD_Write(CMD,0x30);//8位數據傳輸
Delay(40);
LCD_Write(CMD,0x0c);//顯示開,游標開
Delay(40);
LCD_Write(CMD,0x01);//清屏
Delay(40);
LCD_Write(CMD,0x06);//進入點設定 AC+1
Delay(40);
}
int main()
{
RCC_Configuration();
SysTick_Config(72000); //配置SYSTICK時鐘節拍為1ms一次
LCD_IOinit_OUT();
LCD_init();
while(1)
{
Display(Line1,"你妹");
Display(Line2,"你妹");
Display(Line3,"你妹妹");
Display(Line4,"完事了,哈哈哈哈哈");
}
}
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE);
}
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
st1\:*{behavior:url(#ieooui) } /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;}