1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          STM32的LCD1602顯示程序

          來源:互聯網轉載 時間:2024-01-29 08:05:59

          STM32的LCD1602顯示程序

          ?以下為課設期間為1602顯示屏驅動寫的stm32的程序,其中參考了許多大佬的例子

          ?程序設計:STM32入門之LCD1602驅動_TTOWFIVE-CSDN博客_stm32驅動lcd1602

          ?硬件原理:lcd1602簡介,LCD1602中文資料 - 光電顯示 - 電子發燒友網 (elecfans.com)

          ?D7D0用的是PD0PD7,RS為PB10,E為PB11,RW為PB12,使用的板子是STM32F103VET6

          ?下面是我的程序,只完成了基礎功能,并沒有自定義字模部分的代碼

          lcd.h

          #ifndef __LCD_H#define __LCD_H#include "stm32f10x.h"http://///////////////////////////////////////////////////////#define D0_1 GPIO_SetBits(GPIOD,GPIO_Pin_0)#define D0_0 GPIO_ResetBits(GPIOD,GPIO_Pin_0)#define D1_1 GPIO_SetBits(GPIOD,GPIO_Pin_1)#define D1_0 GPIO_ResetBits(GPIOD,GPIO_Pin_1)#define D2_1 GPIO_SetBits(GPIOD,GPIO_Pin_2)#define D2_0 GPIO_ResetBits(GPIOD,GPIO_Pin_2)#define D3_1 GPIO_SetBits(GPIOD,GPIO_Pin_3)#define D3_0 GPIO_ResetBits(GPIOD,GPIO_Pin_3)#define D4_1 GPIO_SetBits(GPIOD,GPIO_Pin_4)#define D4_0 GPIO_ResetBits(GPIOD,GPIO_Pin_4)#define D5_1 GPIO_SetBits(GPIOD,GPIO_Pin_5)#define D5_0 GPIO_ResetBits(GPIOD,GPIO_Pin_5)#define D6_1 GPIO_SetBits(GPIOD,GPIO_Pin_6)#define D6_0 GPIO_ResetBits(GPIOD,GPIO_Pin_6)#define D7_1 GPIO_SetBits(GPIOD,GPIO_Pin_7)#define D7_0 GPIO_ResetBits(GPIOD,GPIO_Pin_7)#define RS_1 GPIO_SetBits(GPIOB,GPIO_Pin_10)#define RS_0 GPIO_ResetBits(GPIOB,GPIO_Pin_10)#define RW_1 GPIO_SetBits(GPIOB,GPIO_Pin_12)#define RW_0 GPIO_ResetBits(GPIOB,GPIO_Pin_12)#define E_1 GPIO_SetBits(GPIOB,GPIO_Pin_11)#define E_0 GPIO_ResetBits(GPIOB,GPIO_Pin_11)/////////////////////////////////////////////////////////void LCD_Init(void);//初始化void LCD_Clear(void);//清除顯示void LCD_CursorReset(void);//光標返回void LCD_SetInput(u16,u16);//置輸入模式void LCD_Display(u16,u16,u16);//顯示開關控制void LCD_COD(u16,u16);//光標或顯示移動指令void LCD_Mode(u16,u16,u16);//工作方式設置void LCD_CGRAM_Addr(u8);//設置CGRAN地址,除置位位以外共六位void LCD_DDRAM_Addr(u8);//設置DDRAM地址,除置位位以外共七位void LCD_RB(void);//當1602處于忙狀態時,不接受指令,當不忙時,接受指令void LCD_Write(u8);//寫入數據void LCD_Read(void);//讀取數據void LCD_WriteStr(u8*,int);//寫入字符串#endif

          lcd.c

          #include "lcd.h"#include "stm32f10x_gpio.h"void LCD_Init(void){GPIO_InitTypeDef GPIO_LCDStr;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_LCDStr.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_LCDStr.GPIO_Speed=GPIO_Speed_50MHz;GPIO_LCDStr.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(GPIOD,&GPIO_LCDStr);GPIO_LCDStr.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_10;GPIO_Init(GPIOB,&GPIO_LCDStr);}//////////////////////////////////////////////////////////////////////////////void LCD_Clear(void){E_0;LCD_RB();RS_0;RW_0;GPIO_Write(GPIOD,0x01);E_1;E_0;}//////////////////////////////////////////////////////////////////////////////////void LCD_CursorReset(void){E_0;LCD_RB();RS_0;RW_0;GPIO_Write(GPIOD,0x02);E_1;E_0;}//////////////////////////////////////////////////////////////////////////////////////void LCD_SetInput(u16 ID,u16 S){E_0;LCD_RB();RS_0;RW_0;D7_0;D6_0;D5_0;D4_0;D3_0;D2_1;if(ID==1)/*高電平光標右移,低電平左移*/D1_1;else if(ID==0)D1_0;if(S==1)/*屏幕上所有的文字是否左移或右移,高電平有效,低電平無效*/D0_1;else if(S==0)D0_0;E_1;E_0;}//////////////////////////////////////////////////////////////////////////////////////////void LCD_Display(u16 D,u16 C,u16 B){E_0;LCD_RB();RS_0;RW_0;D7_0;D6_0;D5_0;D4_0;D3_1;if(D==1)//高電平開,低電平關D2_1;else if(D==0)D2_0;if(C==1)//高電平有光標,低電平無光標D1_1;else if(C==0)D1_0;if(B==1)//光標是否閃爍,高電平閃爍,低電平無D0_1;else if(B==0)D0_0;E_1;E_0;}////////////////////////////////////////////////////////////////////////////////////////////void LCD_COD(u16 SC,u16 RL){E_0;LCD_RB();RS_0;RW_0;D7_0;D6_0;D5_0;D4_1;D1_1;D0_1;if(SC==1)//高電平顯示移動的文字,低電平移動坐標D3_1;else if(SC==0)D3_0;if(RL==1)//高電平右移,低電平左移D2_1;else if(RL==0)D2_0;E_1;E_0;}////////////////////////////////////////////////////////////////////////////////////////////void LCD_Mode(u16 DL,u16 N,u16 F){E_0;LCD_RB();E_1;RS_0;RW_0;D7_0;D6_0;D5_1;D1_1;D0_1;if(DL==1)//高電平八位數據接口,低電平四位數據接口D4_1;else if(DL==0)D4_0;if(N==1)//高電平兩行顯示,低電平一行顯示D3_1;else if(N==0)D3_0;if(F==1)//高電平5x10點陣,低電平5x8點陣D2_1;else if(F==0)D2_0;E_0;}////////////////////////////////////////////////////////////////////////////////////////void LCD_CGRAM_Addr(u8 addr)//{E_0;LCD_RB();RS_0; RW_0;D6_1;E_1; E_0;}//////////////////////////////////////////////////////////////////////////////void LCD_DDRAM_Addr(u8 addr)//{E_0;LCD_RB();RS_0;RW_0;GPIO_Write(GPIOD,0x0000);//清空地址GPIO_Write(GPIOD,addr);E_1;E_0;}//////////////////////////////////////////////////////////////////////////////////void LCD_RB(void)//{GPIO_InitTypeDef pp;RS_0;RW_1;pp.GPIO_Mode=GPIO_Mode_IN_FLOATING;pp.GPIO_Speed=GPIO_Speed_50MHz;pp.GPIO_Pin=GPIO_Pin_7;GPIO_Init(GPIOD,&pp);//將端口設為輸入E_1;while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_7));//若忙信號存在,則一直循環,直至忙信號結束E_0;pp.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;pp.GPIO_Mode=GPIO_Mode_Out_PP;pp.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOD,&pp);//將端口重新設為輸出}//////////////////////////////////////////////////////////////////////////////////////////void LCD_Write(u8 data)//{LCD_RB();RS_1;RW_0;E_1;GPIO_Write(GPIOD,data);E_0;}////////////////////////////////////////////////////////////////////////////void LCD_Read(void)//{LCD_RB();RS_1;RW_1;E_1; E_0;}////////////////////////////////////////////////////////////////////////////void LCD_WriteStr(u8 *str,int length)//{int i=0;for(i=0;i<length;i++){if(i<=15){LCD_DDRAM_Addr(0x80+i);LCD_Write(str[i]);}else{LCD_DDRAM_Addr(0xc0+i-16);LCD_Write(str[i]);}}}

          main.c

          #include "lcd.h"#include "string.h"int main(){ u8 strMCU[]=" **** YOU 1602!   TEST    TEST  ";LCD_Init();LCD_Clear();LCD_SetInput(1,0);LCD_Display(1,0,0);LCD_Mode(1,1,0);LCD_WriteStr(strMCU,strlen(strMCU));

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          手機話費怎么充q幣?方法::先打開電腦瀏覽器,在搜索欄直接搜索看看“騰訊充值話費中心”。然后輸入你要充值的帳號與密碼,登錄賬號。然后點擊你手機運營商.這樣的手機話費就能充q幣安卓手機q幣怎么充便宜?1.第一種方法是申請開通財付通,用財付通沖QB每月都有前200QB可以享不享受93折的優惠,遠遠超過200QB的可愜意的享受95折優惠。還不忘一提用銀行卡沖QB也能享不享受95折優惠。2.第二種方法是沖...

          筆記本win7,win8,win10哪個更好用一點?題主你好。一般來說現在論是筆記本肯定臺式,畢竟辦公司應該游戲用電腦,如果能朋友問我組裝機時肯定用什么系統?我就像都不推薦win7。許多人現在電腦里不使用的應該要我還是Win7,你要問他們為什么Win7好,可能會大多數人都答不出一個因此然來,總之歸根究底,原因只有一個,習慣了。早期Win10許多人不你選擇用的原因,更多的是由于他是新系統,部分軟件兼...

          三星kies的用法?Android手機升級系統/固件的操作方法如下:1。FOTA升級:通過手機設置-(常規)-關于設備-系統更新(或軟件更新)-更新。2. 連接電腦并使用s更換助手或KIEs軟件更新(不同型號使用不同的PC軟件)。通過KIEs模式升級:1)在計算機中下載并安裝KIEs軟件。注意:下載和安裝KIE時,不要將手機連接到計算機。2) 安裝完成后,手機和電腦通過USB連接,打開KIEs軟件...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>