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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2411|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+1602液晶滾動(dòng)顯示程序看不明白

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:880294 發(fā)表于 2021-5-3 21:27 來自觸屏版 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
//下面這條程序看不明白
for(j=n;j<25+n;j++)//我們沒有進(jìn)行整屏右移,但是我們進(jìn)行了數(shù)組右移O(∩_∩)O~

{

   LcdWriteData(displayDate2[j]);

}
//字符串長(zhǎng)度只有25,這里索引25+n超過最大索引,程序不會(huì)報(bào)錯(cuò)嗎?

接下來寫相關(guān)子程序:

//寫入命令子函數(shù)

void LcdWriteCom(unsigned char com)

{

  LCD_RS=0;

  LCD_RW=0;

  LCD_GPIO=com;

  delay1ms(1);

  LCD_E=1;

  delay1ms(1);

  LCD_E=0;

}

//寫入數(shù)據(jù)子函數(shù)

void LcdWriteData(unsigned char dat)

{

  LCD_RS=1;

  LCD_RW=0;

  LCD_GPIO=dat;

  delay1ms(1);

  LCD_E=1;

  delay1ms(1);

  LCD_E=0;

}

//讀忙子函數(shù)

bit LCD_bz(void)

{

  bit bz;

  LCD_RS=0;

  LCD_RW=1;

  LCD_E=1;

  delay1ms(10);

  P0=0xff;           //C51單片機(jī)讀引腳要先置高電平,原因不贅述,很多資料沒有這一步驟,大家格外注意下

  bz=(bit)(LCD_GPIO&0x80);

  LCD_E=0;

  return bz;

}



//延時(shí)子程序

void delay1ms(unsigned int t)

{

  unsigned int i,j;              //節(jié)約內(nèi)存起見,建議用uchar,由于后面要做動(dòng)態(tài)顯示,為了滿足顯示效果,這里用了uint

  for(i=0;i

  {

    for(j=0;j<300;j++);

  }

}

//初始化顯示屏程序

void LcdInit()

{

  LcdWriteCom(0x38);//顯示模式2行16列

  LcdWriteCom(0x0c);//開顯示 無光標(biāo) 不閃爍

  LcdWriteCom(0x06);//寫一個(gè)指針加1

  LcdWriteCom(0x01);//清屏

  LcdWriteCom(0x80);//設(shè)置(0,0)為起點(diǎn)

}



主程序:

//我們要把第一行做成一個(gè)16字符固定顯示,第二行做成滾動(dòng)顯示25字符

//這里采用的是1602指針右移的基礎(chǔ)命令而不是整屏右移命令

#include

#define LCD_GPIO  P0

void LcdWriteCom(unsigned char); //寫入命令子函數(shù)聲明

void LcdWriteData(unsigned char);//寫入數(shù)據(jù)子函數(shù)聲明

void LcdInit();//顯示屏初始化子函數(shù)聲明

void delay1ms(unsigned int);//延時(shí)函數(shù)聲明

bit LCD_bz(void);//讀忙函數(shù)聲明

sbit LCD_RW=P2^5;

sbit LCD_RS=P2^6;

sbit LCD_E=P2^7;

unsigned char displayDate1[]="    I'm Cesar   ";//一共16個(gè)字符(包括空格在內(nèi))

unsigned char displayDate2[]=" Please add QQ775222573  ";//一共25個(gè)字符

void main(void)

{

  unsigned char i=0,j=0,n=0;

  LcdInit();

LcdWriteCom(0x80);//設(shè)置坐標(biāo)為第一行第一個(gè)字符

for(i=;i<16;i++)

{

   LcdWriteData(displayDate1[ i]);

}

while(1)

  {

if(LCD_bz())

      continue;//讀忙,結(jié)束本次循環(huán)



LcdWriteCom(0x80+0x40);//設(shè)置第二行第一個(gè)字符起點(diǎn)

for(j=n;j<25+n;j++)//我們沒有進(jìn)行整屏右移,但是我們進(jìn)行了數(shù)組右移O(∩_∩)O~

{

   LcdWriteData(displayDate2[j]);

}

      n++;//數(shù)組的顯示起點(diǎn)右移,這樣實(shí)現(xiàn)了滾動(dòng)

if(n>=(25-15))//當(dāng)顯示移到最右邊時(shí),停頓片刻,返回起點(diǎn)再次循環(huán)

   {

         n=0;

         delay1ms(2000);

        }

      delay1ms(600);

  }

}
希望有人能解惑。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:889094 發(fā)表于 2021-5-3 23:14 來自觸屏版 | 只看該作者
  LcdWriteData(displayDate2[j]);j越界問題可以用j%25,那樣到頭就會(huì)從第0個(gè)繼續(xù)顯示
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2021-5-4 06:19 | 只看該作者
1602的一行最多只能顯示16個(gè)字符,超過16個(gè)字符可以用循環(huán)移動(dòng)的方式在一定的時(shí)間內(nèi)全部顯示。如果要移動(dòng)顯示25個(gè)字符,可以設(shè)置字符數(shù)組長(zhǎng)度為26。每次刷新LCD只顯示數(shù)組前16個(gè)字符。然后把0移到25,再把所有字符前移。示例如下:
  1.         displayDate2[26]=" Please add QQ775222573   ";

  2.         displayDate2[25]=displayDate2[0];
  3.         for(i=0;i<25;i++)
  4.                 displayDate2[i]=displayDate2[i+1];
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2021-5-4 06:27 | 只看該作者
樓主的示例采用的是分段顯示的方法達(dá)到移動(dòng)顯示的目的,就是先顯示0~15、再顯示1~16、2~17、3~18以此類推。
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2021-5-4 07:17 | 只看該作者
1602的寄存器一行最多可以寫入40個(gè)字符,但只能正常顯示16個(gè)字符。雖然寫for(j=n;j<25+n;j++)有缺陷,但不至于出錯(cuò)。實(shí)際寫for(j=n;j<16+n;j++)更合理。
回復(fù)

使用道具 舉報(bào)

6#
ID:880294 發(fā)表于 2021-5-4 08:48 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2021-5-4 07:17
1602的寄存器一行最多可以寫入40個(gè)字符,但只能正常顯示16個(gè)字符。雖然寫for(j=n;j

字符串長(zhǎng)度是26,索引值最大是25,用數(shù)組累加j+n會(huì)超過最大索引值
回復(fù)

使用道具 舉報(bào)

7#
ID:880294 發(fā)表于 2021-5-4 08:50 來自觸屏版 | 只看該作者
birdzhyli 發(fā)表于 2021-5-3 23:14
LcdWriteData(displayDate2[j]);j越界問題可以用j%25,那樣到頭就會(huì)從第0個(gè)繼續(xù)顯示

這個(gè)程序是在網(wǎng)上查的,不能理解j+n超過實(shí)際長(zhǎng)度j
回復(fù)

使用道具 舉報(bào)

8#
ID:880294 發(fā)表于 2021-5-4 08:54 來自觸屏版 | 只看該作者
yjd2799 發(fā)表于 2021-5-4 08:50
這個(gè)程序是在網(wǎng)上查的,不能理解j+n超過實(shí)際長(zhǎng)度j

是不是超過長(zhǎng)度會(huì)補(bǔ)空字符
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧洲中文 | 成人欧美一区二区三区白人 | 看片网站在线 | 国产一区二区三区视频 | h免费观看| 91久久久精品国产一区二区蜜臀 | 欧美一区二区小视频 | 青青草av在线播放 | 欧美黄色一区 | 99免费精品 | 成人精品国产免费网站 | 精品亚洲国产成av人片传媒 | 国产 欧美 日韩 一区 | 色婷婷综合网 | 成人依人 | 99爱在线观看 | 男女一区二区三区 | 亚洲一区高清 | 中文字幕日本一区二区 | av一区二区在线观看 | 99色综合| 久久久久国产精品一区三寸 | 亚洲一区视频 | 国产精品永久免费 | 久久夜色精品国产 | 天堂网av在线 | 国产高潮好爽受不了了夜色 | 亚洲精品一区二区三区在线 | 爱爱视频在线观看 | 日韩中文字幕一区 | 中文字幕视频在线观看 | 欧美福利视频 | 国产一区免费 | 久久成人免费视频 | 欧美日韩久久久 | 成人小视频在线 | 欧美v日韩v| 欧美一级片在线观看 | 免费在线黄色av | 99久久久无码国产精品 | 欧美色综合一区二区三区 |