




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
STM32LCD12864驅動程序(頭文件)(2012-05-2921:25:08)轉載▼標簽:雜談 #ifndefLCD12864_H#defineLCD12864_H#defineLCD_CONTROLGPIOD//默認LCD12864的控制口在PD口#defineLCD_DATAPORTGPIOD//默認LCD12864的數據口在PD口#defineLCD_RESET_PinGPIO_Pin_12//默認LCD12864的復位引腳連接到PD.12也可不用#defineLCD_RS_PinGPIO_Pin_13//默認LCD12864RS--PD.13#defineLCD_RW_PinGPIO_Pin_14//默認LCD12864RW--PD.14#defineLCD_EN_PinGPIO_Pin_15//默認LCD12864E--PD.15#defineLCD_CONTROL_CLOCKRCC_APB2Periph_GPIOD//默認LCD12864的控制口時鐘#defineLCD_DATAPORT_CLOCKRCC_APB2Periph_GPIOD//默認LCD12864的數據口時鐘#defineLCD_RS_1LCD_CONTROL->BSRR&=~LCD_RS_Pin;LCD_CONTROL->BSRR|=LCD_RS_Pin//RS置高電平#defineLCD_RS_0LCD_CONTROL->BRR&=~LCD_RS_Pin;LCD_CONTROL->BRR|=LCD_RS_Pin//RS置低電平#defineLCD_RW_1LCD_CONTROL->BSRR&=~LCD_RW_Pin;LCD_CONTROL->BSRR|=LCD_RW_Pin//RW置高電平#defineLCD_RW_0LCD_CONTROL->BRR&=~LCD_RW_Pin;LCD_CONTROL->BRR|=LCD_RW_Pin//RW置低電平#defineLCD_EN_1LCD_CONTROL->BSRR&=~LCD_EN_Pin;LCD_CONTROL->BSRR|=LCD_EN_Pin//EN置高電平#defineLCD_EN_0LCD_CONTROL->BRR&=~LCD_EN_Pin;LCD_CONTROL->BRR|=LCD_EN_Pin//EN置低電平#defineLCD_RESET_0LCD_CONTROL->BRR=LCD_RESET_Pin//復位#defineLCD_RESET_1LCD_CONTROL->BSRR=LCD_RESET_Pin//復位腳拉高#defineDATAOUTLCD_DATAPORT->ODR&=0xff00;LCD_DATAPORT->ODR//數據輸出寄存器#defineDATAINLCD_DATAPORT->IDR//數據輸入寄存器#defineLCD_BF((DATAIN)&0x0080)//忙狀態voidLCD_delayus(unsignedlongn);//延時n(us)voidLCD_delayms(unsignedlongn);//延時n(ms)voidLCD_WriteInitcmd(uint8_tinitcmd);//寫初始化命令voidLCD_WaitLaisure(void);//一直等待到LCD內部操作完成,變為空閑狀態voidLCD_Writecmd(uint8_tcmd);//寫命令到LCD12864voidLCD_WriteByte(uint8_tbyte);//寫一字節數據到LCD12864voidLCD_pos(uint16_tpos);//LCD顯示位置設置voidLCD_Setpos(uint16_trow,uint16_tcol);//設定LCD12864的顯示地址,根據習慣voidLCD_DispChar(charch);//顯示一個字符voidLCD_Setpos_DispChar(uint16_trow,uint16_tcol,charch);//在指定位置顯示一個字符voidLCD_DispString(charstr[]);//顯示一個字符串,顯示位置需提前設定//在指定位置顯示一個字符串voidLCD_Setpos_DispString(uint16_trow,uint16_tcol,charstr[]);voidLCD_Dispnum(uint32_tnum);//顯示一個不超過8位的整數,顯示位置需提前設置//在指定位置顯示一個不超過8位的整數voidLCD_Setpos_Dispnum(uint16_trow,uint16_tcol,uint32_tnum);voidLCD_DispDecimal(uint32_tnum,uint16_tdot);//顯示一個有效位不超過8位的浮點數,顯示位置需要提前設定//在指定位置顯示一個有效位不超過8位的浮點數voidLCD_Setpos_DispDecimal(uint16_trow,uint16_tcol,uint32_tnum,uint16_tdot);//顯示日歷,顯示日期與時間voidLCD_DispDateTime(uint32_tyear,uint16_tmonth,uint16_tday,uint16_thour,uint16_tmin,uint16_tsec);voidLCD_DispPicture(constunsignedcharpicture[]);//顯示一幅圖像128*64//屏幕整體左移一格,用于滾動顯示voidLCD_ShiftLeft(void);//屏幕整體右移一格,用于滾動顯示voidLCD_ShiftRight(void);//清屏,清除顯示voidLCD_Clear(void);//使光標還回原點位置voidLCD_Return(void);//關顯示voidLCD_Close(void);//開顯示voidLCD_Open(void);voidLCD_FlickerChar(uint16_trow,uint16_tcol);//關閉字符閃爍voidLCD_CloseFlicker(void);//屏幕秒閃爍一次voidLCD_FlickerScreen(void);voidLCD_PORT_Init(void);//LCD連接端口初始化voidLCD_Init(void);//LCD配置初始化#endif#include"stm32f10x.h"}str[k]='\0';//添加字符串結束標志LCD_DispString(str);//顯示字符串}voidLCD_Setpos_Dispnum(uint16_trow,uint16_tcol,uint32_tnum){LCD_Setpos(row,col);LCD_Dispnum(num);}voidLCD_DispDecimal(uint32_tnum,uint16_tdot){uint32_ti=0,j,k=0,wei;uint32_tq;charstr[10];if(num>=10000000)wei=8;elseif(num>=1000000)wei=7;elseif(num>=100000)wei=6;elseif(num>=10000)wei=5;elseif(num>=1000)wei=4;elseif(num>=100)wei=3;elseif(num>=10)wei=2;elsewei=1;for(i=wei;i>0;i--){q=1;j=1;//i=1時,q=1,得到個位for(;j<i;j++)q*=10;str[k++]=num/q+'0';num%=q;}str[k]='\0';//添加字符串結束標志for(i=8;i>0;i--){if((str[i]>='0')&&(str[i]<='9'))break;}str[i+2]='\0';//添加字符串結束符for(j=0;j<dot;j++,i--)//小數點后各位依次右移,準備插入{str[i+1]=str[i];}str[i+1]='.';//插入小數點LCD_DispString(str);//顯示浮點小數}voidLCD_Setpos_DispDecimal(uint16_trow,uint16_tcol,uint32_tnum,uint16_tdot){LCD_Setpos(row,col);LCD_DispDecimal(num,dot);}voidLCD_DispDateTime(uint32_tyear,uint16_tmonth,uint16_tday,uint16_thour,uint16_tmin,uint16_tsec){//externuint16_tenableclock;LCD_Setpos(1,0);LCD_DispString("Date:");LCD_Dispnum((uint32_t)year);LCD_DispChar('-');LCD_Dispnum((uint32_t)month);LCD_DispChar('-');LCD_Dispnum((uint32_t)day);if((month<10)&&(day<10))//清除無效位置可能殘留的顯示{LCD_DispChar('');LCD_DispChar('');}elseif(((month<10)&&(day>9))||((month>9)&&(day<10)))LCD_DispChar('');LCD_Setpos(1,15);//if(enableclock)//如果開啟鬧鈴,顯示鬧鈴標志//LCD_DispChar('@');//elseLCD_DispChar('*');//第一行結束符顯示LCD_Setpos(2,0);LCD_DispString("Time:");LCD_Dispnum((uint32_t)hour);LCD_DispChar(':');LCD_Dispnum((uint32_t)min);LCD_DispChar(':');LCD_Dispnum((uint32_t)sec);if(sec==0)LCD_DispChar('0');LCD_DispChar('');LCD_DispChar('');if((hour<10)&&(min<10)&&(sec>0)&&(sec<10))LCD_DispChar('');//用于消隱LCD_Setpos(2,15);//if(enableclock)//LCD_DispChar('@');//elseLCD_DispChar('*');//第二行結束符顯示}voidLCD_DispPicture(constunsignedcharpicture[]){uint16_ti,j;LCD_Writecmd(0x34);//寫數據時,關閉圖形顯示LCD_delayms(20);for(i=0;i<32;i++)//32行{LCD_Writecmd(0x80+i);LCD_delayus(150);LCD_Writecmd(0x80);LCD_delayus(150);for(j=0;j<16;j++)//一行,16個字節{LCD_WriteByte(picture[j]);LCD_delayus(150);}LCD_delayus(150);}for(i=0;i<32;i++)//32行{LCD_Writecmd(0x80+i);LCD_delayus(150);LCD_Writecmd(0x80);LCD_delayus(150);for(j=0;j<16;j++)//一行,16個字節{LCD_WriteByte(picture[j]);LCD_delayus(150);}LCD_delayus(150);}LCD_Writecmd(0x36);//寫完數據,開圖形顯示LCD_delayms(50);}//屏幕整體左移一格,用于滾動顯示voidLCD_ShiftLeft(){LCD_Writecmd(0x18);}//屏幕整體右移一格,用于滾動顯示voidLCD_ShiftRight(void){LCD_Writecmd(0x1C);}//清屏,清除顯示voidLCD_Clear(void){LCD_Writecmd(0x01);}//使光標還回原點位置voidLCD_Return(void){LCD_Writecmd(0x02);}//關顯示voidLCD_Close(void){LCD_Writecmd(0x08);}//開顯示voidLCD_Open(void){LCD_Writecmd(0x0C);}voidLCD_FlickerChar(uint16_trow,uint16_tcol){LCD_Writecmd(0x0D);LCD_Setpos(row,col);}//關閉字符閃爍voidLCD_CloseFlicker(void){LCD_Writecmd(0x0C);}//屏幕秒閃爍一次voidLCD_FlickerScreen(void){LCD_Writecmd(0x08);//關顯示LCD_delayms(500);LCD_Writecmd(0x0C);//開顯示LCD_delayms(500);}//LCD連接端口初始化voidLCD_PORT_Init(void){GPIO_InitTypeDefLCD_port;RCC_PCLK2Config(RCC_HCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);//fPCLK1=36MHzRCC_APB2PeriphClockCmd(LCD_CONTROL_CLOCK,ENABLE);//時鐘使能RCC_APB2PeriphClockCmd(LCD_DATAPORT_CLOCK,ENABLE);LCD_port.GPIO_Pin=(uint16_t)0x00ff;LCD_port.GPIO_Speed=GPIO_Speed_50MHz;LCD_port.GPIO_Mode=GPIO_Mode_Out_OD;//OD開路輸出,外接上拉電阻到5VGPIO_Init(LCD_DATAPORT,&LCD_port);LCD_port.GPIO_Pin=LCD_RESET_Pin|LCD_RS_Pin|LCD_RW_Pin|LCD_EN_Pin;LCD_port.GPIO_Speed=GPIO_Speed_50MHz;LCD_port.GPIO_Mode=GPIO_Mode_Out_OD;//OD開路輸出GPIO_Init(LCD_CONTROL,&LCD_port);}voidLCD_Init(void){LCD_RESET_0;LCD_delayms(300);//復位LCD12864LCD_RESET_1;LCD_delayms(300);LCD_Writecmd(0x34);//寫數據時,關閉圖形顯示LCD_delayus(400);LCD_WriteInitcmd(0x38);//并行,8位,基本指令操作LCD_delayus(200);//150LCD_WriteInitcmd(0x38);LCD_delayus(100);LCD_WriteInitcmd(0x0C);//開顯示,顯示光標,用于測試LCD_delayus(150);LCD_WriteInitcmd(0x01);//清屏LCD_delayms(12);LCD_Writecmd(0x06);//地址自動增加LCD_delayus(150);}#include"stm32f10x.h"#include"LCD12864.h"externconstunsignedcharpicture1[];externconstunsignedcharpicture2[];voidGPIO_Configuration(void);//延時nusvoiddelay_nus(unsignedlongn){unsignedlongj;while(n--){j=8;while(j--);}}//延時nmsvoiddelay_nms(unsignedlongn){while(n--)delay_nus(1100);}//時鐘配置函數72MHz端口配置voidRCC_Configuration(){RCC_PCLK2Config(RCC_HCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);//fPCLK1=36MHz//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|\//RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE,ENABLE);}intmain(void){//uint16_ti;//charstr1[]={"Happyev
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025正規的公寓式商品房租賃合同樣本
- 皮脂腺異位醫學科普
- 生命支持類設備管理
- 班級布置專項培訓方案
- 透析患者水分控制的管理
- 房地產電商營銷模式研究報告(專業版)
- 2025年通勤駕駛員安全培訓試題
- 第二課時:數字的變化規律教學設計
- 認識新質生產力
- 物理化學電子教案-第十一章
- 國開電大《商務英語4》單元自測1-8參考答案
- 成人腦室外引流護理-中華護理學會團體 標準
- 2024年經濟師考試旅游經濟(中級)專業知識和實務試卷及解答參考
- 《管道用消氣過濾器》
- 初級應急救援員理論考試復習題及答案
- 醫院培訓課件:《外科手術部位感染的預防與處理措施》
- DB11∕T 243-2014 戶外廣告設施技術規范
- 廣西專升本(高等數學)模擬試卷3(共212題)
- 六年級數學下冊期末試卷及答案【可打印】
- 起重機械安裝維修質量保證手冊-符合TSG 07-2019特種設備質量保證管理體系
- DL∕Z 860.1-2018 電力自動化通信網絡和系統 第1部分:概論
評論
0/150
提交評論