女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]   要實(shí)現(xiàn)對16x2點(diǎn)陣字符液晶模塊的高效控制,必須按照模塊設(shè)計(jì)方式,建立起相關(guān)的子程序,下面先詳細(xì)介紹驅(qū)動(dòng)16x2點(diǎn)陣字符液晶模塊的各功能子程序。  1.寫命令到LCM子函數(shù)  vOidLCDWriteCommand

 

  要實(shí)現(xiàn)對16x2點(diǎn)陣字符液晶模塊的高效控制,必須按照模塊設(shè)計(jì)方式,建立起相關(guān)的子程序,下面先詳細(xì)介紹驅(qū)動(dòng)16x2點(diǎn)陣字符液晶模塊的各功能子程序。

  1.寫命令到LCM子函數(shù)

  vOidLCDWriteCommand(uchar CMD,uchar Attribc)

  /*函數(shù)名為WriteCommandLCM的寫指令到LCM子函數(shù)。

  定義CMD、Attribc 為無符號(hào)字符型變量。*/

  {

  if(Attribc)WaitForEnable();

  /*若Arrribc為“真”,則調(diào)用WaitForEnable子函數(shù)進(jìn)行忙檢測*/

  LCM_RS_0;LCM_RW_0;_NOP0;

  /*選中指令寄存器,寫模式*/

  DataPort=CMD;_NOP();

  /*將變量WCLCM中的指令傳送至數(shù)據(jù)口

  LCM_EN_1;_NOP0;_NOP();LCM_EN_O:

  /*LCM_EN端產(chǎn)生脈沖下降沿。*/

  }

  /*WriteCommandLCM 子函數(shù)結(jié)束。*/

  2,寫數(shù)據(jù)到LCM子函數(shù)

  void LcdWritEDAta(dchar dataW)

  /*函數(shù)名為WriteDataLCM的寫數(shù)據(jù)到LCM子函數(shù)。定義

  dataW 為無符號(hào)字符型變量。*/

  {

  /*WriteDataLCM子函數(shù)開始。*/

  WaitForEnable(); */

  LCM_RS_1;LCM_RW_0;_NOP0;

  /*選中數(shù)據(jù)寄存器,寫模式。*/

  DataPort=dataW;_NOP();

  /*將變量dataQW中數(shù)據(jù)傳送至數(shù)據(jù)口。*/

  LCM_EN_1;_NOP();_NOP0;LCM_EN_O:

  /*LCM_EN端產(chǎn)生脈沖下降沿。WriteDataLCM子函數(shù)

  結(jié)束*/

  3.檢測LCD忙信號(hào)子函數(shù)

  void WaitForEnable(void)

 ?。?函數(shù)名為WaitForEnable的檢測忙信號(hào)子程序子函數(shù)。

  /*WaitForEnable子函數(shù)開始。*/

  uchar val;

  /*定義局部變量val。*/

  DataPOrt=Oxff;

  /*置數(shù)據(jù)口為全1。*/

  LCM_RS_0;LCM_RW_1;_NOP();

  /*選中指令寄存器,讀模式。*/

  LCM_EN_1;_NOP();_NOP();

  /*置LCM_EN端為高電平,讀使能。*/

  DDRA=0x00;

  /*數(shù)據(jù)口置為輸入*/

  val=PINA:

  /*讀取數(shù)據(jù)*/

  while(val&Busy)val=PINA:

  /*檢測忙信號(hào)。當(dāng)數(shù)據(jù)口內(nèi)容與0x80相與后不為零時(shí),

  程序原地踏步繼續(xù)讀取數(shù)據(jù)并檢測忙信號(hào)。*/

  LCM_EN_O:

  /*置LCM_EN端為低電平。*/

  DDRA=0xff;

  /*數(shù)據(jù)口置為輸出*/

  }

  /*WaitForEnable子函數(shù)結(jié)束。*/

  4.顯示光標(biāo)定位子函數(shù)

  voidLOCateXY(char posx.char posy)

  /*顯示光標(biāo)定位子函數(shù),函數(shù)名為LocareXY,定義posx,

  posxxy為字符型變量。*/

  {

  /*LocateXY子函數(shù)開始。*/

  uchar temp;

  /*定義temp為無符號(hào)字符型變量。*/

  temp&=0x7f;

  /*temp的變化范圍0-15。*/

  temp=posx&0xof;

  /*屏蔽高4位。*/

  posy&=0x01;

  /*posy的變化范圍0-1。*/

  if(posy)tempㄧ=0x40;

  /*若posy為1(顯示第二行),地址碼+0x40*/

  tempㄧ=0x80;

  /*指令碼為地址碼+0x80。*/

  WriteCommandLCM(temp,0);

 ?。?將指令temp寫入LCM,忽略忙信號(hào)檢測。*/

  }

  /*LocateXY子函數(shù)結(jié)束。*/

  5.顯示指定座標(biāo)的一個(gè)字符(x=0~15,y=0~1)子函數(shù)

  void DisplayOneChar(uchar x,uchar y,uchar Wdata)

  /*顯示指定座標(biāo)的一個(gè)字符(x=0-15.y=0-1)子函數(shù),函

  數(shù)名為DispOneChar,定義x、y、Wdata為無符號(hào)字符型變量。

  */

  {

  /*DispOneChar函數(shù)開始*/

  LocateXY(x,y):

 ?。?調(diào)用LocateXY函數(shù)定位顯示地址。*/

  WriteDataLCM(Wdata);

 ?。?將數(shù)據(jù)Wdata寫入LCM。*/

  }

  /*DispONeChar函數(shù)結(jié)束。*/

  6.演示第二行移動(dòng)字符串子函數(shù)

  void Display(uchar dd)

  /*演示第二行移動(dòng)字符串子函數(shù),函數(shù)名為Dispiay,定義

  dd為無符號(hào)字符型變量。*/

  {

  /*Display子函數(shù)開始。*/

  uchari:

  /*定義;為無符號(hào)字符型變量。*/

  for(i=O;i<16:i++){

  /*進(jìn)入for語句循環(huán)。*/

  DisplayOneChar(i,1,dd++);

  /*顯示單個(gè)字符。*/

  dd&=Ox7f;

  /*dd的變化范圍0-127。*/

  if(dd<32)dd=32:

  /*dd的最小值為32,這樣dd的變化范圍為32-127。*/

  }

  /*for語句結(jié)束。*/

  }

 ?。?Display函數(shù)結(jié)束。*/

  7.顯示指定座標(biāo)的一串字符子函數(shù)

  void ePutstr(uchar x.uchar v,uchar code *ptr)

 ?。?顯示指定座標(biāo)的一串字符(x=0-15,y=0-1)子函數(shù),函

  數(shù)名為ePutstr,定義x、y為無符號(hào)字符型變量,ptr為指向

  code區(qū)的無符號(hào)字符型指針變量。*/

  {

  /*ePutetr子函數(shù)開始。*/

  uchar i,I=O;

  /*定義i,i為無符號(hào)字符型變量。*/

  while(ptr[I]>31)(I++;}

  /*ptr[I]大于31時(shí),為ASCII碼,進(jìn)入While語句循環(huán),I累

  加,計(jì)算出字符串長度。*/

  for(i=0;i

  /*進(jìn)入for語句循環(huán)。*/

  DisplayOneChar(x++,y,ptr[i]);

  /*顯示單個(gè)字符,同時(shí)x軸座標(biāo)遞增。*/

  if(x==1 6){

  /*若x等于16,進(jìn)入if語句。*/

  x=O;y^=1;

  /*x賦0,y與1按位異或(取反)。*/

  }

  /*if語句結(jié)束。*/

  }

  /*for語句結(jié)束。*/

  }

  /*ePutstr子函數(shù)結(jié)束。*/

  8.在AVR單片機(jī)綜合試驗(yàn)板上實(shí)現(xiàn)16x2LCM演示程序1

  第一行顯示“-This is a LCD-!”,第二行的第1個(gè)字符位置

  顯示“A”。過2秒后變?yōu)榈谝恍械牡?個(gè)字符位置顯示“B”,第

  二行顯示“-Design by ZXH-!”。然后無限循環(huán)。

  在我的文檔中新建一個(gè)ac18的文件夾。建立一個(gè)ac18.prj

  的工程項(xiàng)目,最后建立源程序文件ac18 C。輸入下面的程序:

  #include

  /*包含頭文件*/

  #include

  /*------------------------------------------*/

  #define uchar unsigned char

  /*變量類型的宏定義*/

  #define uint unsigned int

 ?。?----------------引腳電平的宏定義----------------*/

  #define LCM_RS_1 PORTBㄧ=BIT(PB0)

  /*RS腳輸出高電平的宏定義*/

  #define LCM_RS_0 PORTB&=~BIT(PBO)

  /*RS腳輸出低電平的宏定義*/

  #define LCM_RW_1 PORTBㄧ=BIT(PB1)

  /*RW腳輸出高電平的宏定義*/

  #define LCM_RW_O PORTB&=~BIT(PB1)

  /*RW腳輸出低電平的宏定義*/

  #define LCM_EN_1 PORTBㄧ=BlT(PB2)

  /*EN腳輸出高電平的宏定義*/

  #define LCM_EN_0 PORTB&=~BIT(PB2)

  /*EN腳輸出低電平的宏定義*/

  /*===============================*/

  #define DataPort PORTA

  /*數(shù)據(jù)端口宏定義*/

  #define Busy 0x80

  /*忙信號(hào)的宏定義*/

  #define xtaI 8

  /*晶振頻率宏定義*/

  /*===============================*/

  const uchar str0[]={“-This is a LCD-!”}

  /*待顯字符*/

  const uchar str1 []={"-Design by ZXH-!"};

  /*待顯示字符串*/

  /*==============函數(shù)說明===================*/

  void Delay_1 ms(void);

  void Delay_nms(uint n):

  void WaitFOrEnable(void):

  void LcdWriteData(uchar W):

  void LcdWriteCommand(uchar CMD,uchar Attribc);

  void InitLcd(void);

  void Display(uchar dd):

  void DispIayoneChar(uchar×.uchar y,uchar Wdata);

  void ePutstr(uchar x,uchar y,uchar const*ptr);

  /**********************************************/

  void main(void)

 ?。?定義主函數(shù)*/

  {

  Delay_nms(400);

  /*延時(shí)400mS等待電源穩(wěn)定*/

  DDRA=0xff;PORTA=0x00;

  /*初始化I*O口*/

  DDRB=0xff;PORTB=0x00;

  InitLcd();

  /*LCD初始化*/

  /**************************************/

  while(1)

  /*無限循環(huán)*/

  {

  LcdWriteCommand(0x01.1):

  /*清屏*/

  LcdWriteCommand(0xoc,1):

  /*開顯示*/

  DisplayOneChar(O,1,0x41):

 ?。?第二行的第1個(gè)字符位置顯示A*/

  ePutstr(0.0.str0);

  /*第一行顯示-This is a LCD-!*/

  Delay_nms(2000);

  /*延時(shí)2S*/

  LcdWriteCommand(0x01.1):

 ?。?清屏*/

  LcdWriteCommand(0xoc,1):

  /*開顯示*/

  DisplayOneChar(8,0,0x42);

 ?。?第一行的第8個(gè)字符位置顯示B*/

  ePutstr(0.1,str1):

  /*第二行顯示-Design by AXH-!*/

  Delay_nms(2000);

  /*延時(shí)2S*/

  }

  }

 ?。?************顯示指定座標(biāo)的一串字符子函數(shù)***************/

  void ePutstr(uchar x,uchar y,uchar const*ptr)

  {

  uchar i.I=0:

  while(ptr[I]>31){I++;)

  for(i=0;i

  DisplayoneChar(x++,Y,pt r[i]);

  if(X==16){

  x=0;y^=1:

  }

  }

  }

  /***************

  void LocateXY(char posx,char posy)

  {

  uchar temp;

  temp&=0x7f;

  temp=posx&0xof;

  posy&=0x01;

  if(posy)templ=0x40;

  templ=0x80;

  LcdWriteCommand(temp,0):

  }

 ?。?*************顯示指定座標(biāo)的一個(gè)字符子函數(shù)************/

  void DisplayOneChar(uchar X.uchar y,uchar Wdata)

  {

  LocateXY(x,y):

  LcdWriteData(Wdata);

  }

 ?。?*************LCD初始化子函數(shù)******************/

  void lnitLcd(void)

  {

  LcdWriteCommand(0x38,O):

  /*8位數(shù)據(jù)傳送,2行顯示,5*7字形,不檢測忙信號(hào)*/

  Delay_nms(5);

  LcdWriteCommand(Ox38,O):

  /*8位數(shù)據(jù)傳送;2行顯示,5*7字形,不檢測忙信號(hào)*/

  Delay_nms(5);

  LcdWriteCommand(0x38.0):

  /*8位數(shù)據(jù)傳送,2行顯示,5*7字形,不檢測忙信號(hào)*/

  Delay_nms(5);

  LcdWriteCommand(0x38,1):

  /*8位數(shù)據(jù)傳送,2行顯示,5/7字形、檢測忙信號(hào)*/

  LcdWriteCommand(0x08,1):

 ?。?關(guān)閉顯示,檢測忙信號(hào)*/

  LcdWriteCommand(0x01,1);

 ?。?清屏,檢測忙信號(hào)*/

  LcdWriteCommand(0x06,1):

 ?。?顯示光標(biāo)右移設(shè)置,檢測忙信號(hào)*/

  LcdWriteCommand(0xoc,1):

  /*顯示屏打開,光標(biāo)不顯示、不閃爍,檢測忙信號(hào)*/

  }

 ?。?***************寫命令到LCM子函數(shù)*******************/

  void LcdWfiteCommand(uchar CMD,uchar Attribc)

  {

  if(Attribc)WaitForEnable():

  LCM_RS_0;LCM_RW_0;_NOP();

  DataPort=CMD;_NOP();

  LCM_EN_1;_NOP0;_NOP();LCM_EN_O;

  }

  /***************寫數(shù)據(jù)到LCM子函數(shù)***************/

  voidLEDWriteData(uchar dataW)

  {

  WaitF0rEnable();

  LCM_RS_1;LCM_RW_O;_NOP();

  DataPort=dataW;_NOP();

  LCM_EN_1:_NOP();_NOP();LCM_EN_0;

  }

  /************檢測LCD忙忙信號(hào)子函數(shù)**************/

  void WaitFOrEnable(vOid)

  {

  uchar val;

  DataPort=0xff;

  LCM_RS_0;LCM_RW_1;_NOP();

  LCM_EN_1:_NOP0;_NOP();

  DDRA=0x00;

  vaI=PINA;

  while(val&Busy)val=PINA;

  LCM_EN_O;

  DDRA=0xff;

  }

  /************************************************/

  void Delay_1 ms(void)

 ?。?1mS延時(shí)子函數(shù)*/

  { uint i;

  for(i=1;i<(uint)(xtal*143-2):i++)

  }

  /*==========================*/

  void Delay_nms(uint n)

 ?。?n*1mS延時(shí)子函數(shù)*/

  {

  uint i=0:

  while(i

  {Delay_1 ms();

  i++:

  }

  }

  編譯通過后,將ac18.hex文件下載到AVR單片機(jī)綜合試驗(yàn)板上進(jìn)行實(shí)際演示。標(biāo)示“LCD16*2”的單排座上正確插上16x2液晶模塊(腳號(hào)對應(yīng),不能插反),在標(biāo)示“DC5V”電源端輸入5V穩(wěn)壓電壓。我們看到液晶屏上的顯示與我們設(shè)計(jì)的目標(biāo)完全一致。

  9.在AVR單片機(jī)綜合試驗(yàn)板上實(shí)現(xiàn)16x2LCM演示程序--2一開始第一行及第二行顯示預(yù)定的字符串(第一行顯示“--ELECTRONICS--”,第二行顯示“WORLDMAgazine”),隨后第二行顯示移動(dòng)的ASCII字符。

在我的文檔中新建一個(gè)acl9的文件夾。建立一個(gè)acl9.pri的工程項(xiàng)目,最后建立源程序

 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

我們的團(tuán)隊(duì)創(chuàng)建了這個(gè)項(xiàng)目,因?yàn)槲覀兘?jīng)常因?yàn)閷W⒂趯W(xué)習(xí)或工作而錯(cuò)過禱告時(shí)間。我們想要一個(gè)簡單的祈禱時(shí)間提醒,易于構(gòu)建,可以直接顯示信息,而無需查看智能手機(jī)。

關(guān)鍵字: Arduino UNO 點(diǎn)陣 MAX7219

北京2023年1月18日  /美通社/ -- 微云全息公司(納斯達(dá)克:HOLO)(以下簡稱為"HOLO"或"公司"),一家提供全息數(shù)字孿生技術(shù)服務(wù)提供商,開發(fā)多套算法支持...

關(guān)鍵字: NAS DAQ ASDA 點(diǎn)陣

這是FPGA之旅的第十一例了。在前面的例子中,已經(jīng)對OLED有了一個(gè)基礎(chǔ)的了解,本例將介紹如何在OLED上實(shí)現(xiàn)支符的顯示,為后面的例程做準(zhǔn)備。

關(guān)鍵字: FPGA OLED 字符

  從電視到可穿戴——在2014年的顯示器技術(shù)學(xué)會(huì)和展會(huì)上,技術(shù)開發(fā)趨勢的這種轉(zhuǎn)換趨于明顯。面向可穿戴的超低功耗反射型液晶模塊已經(jīng)快速投入量產(chǎn)。顯示器周邊部件也加快了支持

關(guān)鍵字: 可彎曲電池 可穿戴技術(shù) 液晶模塊

  正確理解LED省電的正確姿勢:   我們渡過了液晶取代純平的時(shí)期,但那個(gè)時(shí)期的液晶,無論是尺寸,功耗,其實(shí)還不那么優(yōu)秀,一個(gè)普通的15寸液晶,功耗也高達(dá)30W,雖然相比當(dāng)時(shí)的純平還是

關(guān)鍵字: LED 二極管 點(diǎn)陣

近日,德國化工巨頭巴斯夫(BASF)表示旗下全資子公司Trinamix研發(fā)的新型人臉識(shí)別技術(shù)即將問世,通過引入創(chuàng)新性的3D傳感器及“活體皮膚”檢測系統(tǒng)來防止欺騙性攻擊,提高安全性。 Tr

關(guān)鍵字: 3D人臉識(shí)別 MIX INA 點(diǎn)陣

想要點(diǎn)亮點(diǎn)陣中的某一個(gè)LED燈。只要使得那個(gè)燈所在的行輸出高電平,所在列輸出低電平就好。

關(guān)鍵字: 16*16led 51單片機(jī) 點(diǎn)陣

本文設(shè)計(jì)一種內(nèi)容更新便捷、可擴(kuò)展、低價(jià)格的點(diǎn)陣LED 文字顯示屏。降低成本的途徑是①用幾乎人人都有的手機(jī)的藍(lán)牙數(shù)據(jù)傳輸功能進(jìn)行LED 顯示內(nèi)容的更新,免去專業(yè)上位機(jī)軟件

關(guān)鍵字: LED 點(diǎn)陣 藍(lán)牙技術(shù) 設(shè)計(jì)方案 驅(qū)動(dòng)開發(fā)
關(guān)閉