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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1557|回復: 2
打印 上一主題 下一主題
收起左側

在學單片機LCD1602整屏移動時遇到問題,顯示的與預期不符

[復制鏈接]
跳轉到指定樓層
樓主
為什么本來應該顯示在第二行的句子顯示到了第一行,而且本來應該顯示16格結果只顯示了8格?


單片機源程序如下:
  1. #include "reg52.h"

  2. #define LCD_DB P0
  3. sbit LCD_EN = P2^7;
  4. sbit LCD_RS = P2^6;
  5. sbit LCD_RW = P2^5;

  6. unsigned char T0RH = 0;
  7. unsigned char T0RL = 0;
  8. bit flag500ms = 0;

  9. unsigned char code str1[] = "Hello CuiWencan";
  10. unsigned char code str2[] = "I am your srevant";

  11. void InitLCD();
  12. void WaitReady();
  13. void ConfigTimer(unsigned int ms);
  14. void WriteCmd(unsigned char cmd);
  15. void WriteDat(unsigned char dat);
  16. void SetCursor(unsigned char x,unsigned char y);
  17. void ShowStr(unsigned char x,unsigned char y,unsigned char *str,unsigned char len);

  18. void main()
  19. {
  20.         unsigned char i;
  21.         unsigned char index1 = 0;
  22.         unsigned char index2 = 0;
  23.         unsigned char j = 0;
  24.         unsigned char k = 0;
  25.         unsigned char pdata bufMove1[16+sizeof(str1)+16];        
  26.         unsigned char pdata bufMove2[16+sizeof(str2)+16];

  27.         EA = 1;
  28.         ConfigTimer(10);
  29.         InitLCD();

  30.         for(i = 0;i < 16;i++)
  31.         {
  32.                 bufMove1[i] = ' ';
  33.                 bufMove2[i] = ' ';
  34.         }
  35.         for(j = 0;j<(sizeof(str1)-1);j++)
  36.                 bufMove1[16+j] = str1[j];
  37.         for(k = 0;k<(sizeof(str2)-1);k++)
  38.                 bufMove2[16+k] = str2[k];
  39.         for(i = (16+sizeof(str1)-1);i<sizeof(bufMove1);i++)
  40.                 bufMove1[i] = ' ';        
  41.         for(i = (16+sizeof(str2)-1);i<sizeof(bufMove2);i++)
  42.                 bufMove2[i] = ' ';
  43.         while(1)
  44.         {
  45.                 if(flag500ms)
  46.                 {
  47.                          flag500ms = 0;
  48.                         ShowStr(0,0,bufMove1+index1,16);
  49.                         ShowStr(0,1,bufMove2+index2,16);
  50.                         index1++;
  51.                         index2++;
  52.                         if(index1 >= (16+sizeof(str1)-1))
  53.                         {
  54.                                 index1 = 0;                        
  55.                         }
  56.                         if(index2 >= (16+sizeof(str2)-1))
  57.                         {
  58.                                 index2 = 0;
  59.                         }
  60.                 }
  61.         }        
  62. }

  63. void ConfigTimer(unsigned int ms)
  64. {
  65.         unsigned int tmq;
  66.         EA = 1;
  67.         TMOD &= 0xf0;
  68.         TMOD |= 0x01;
  69.     tmq = (ms*(11059200/12))/1000;
  70.         tmq = 65536 - tmq;
  71.         T0RH = (unsigned char)(tmq>>8);
  72.         T0RL = (unsigned char)(tmq);
  73.         TH0 = T0RH;
  74.         TL0 = T0RL;
  75.         ET0 = 1;
  76.         TR0 = 1;
  77. }

  78. void WaitReady()
  79. {
  80.         unsigned char sta;
  81.         LCD_DB = 0xFF;
  82.         LCD_RS = 0;
  83.         LCD_RW = 1;
  84.         do
  85.         {
  86.                 LCD_EN = 1;
  87.                 sta = LCD_DB;
  88.                 LCD_EN = 0;        
  89.         }while(sta & 0x80);        
  90. }

  91. void WriteCmd(unsigned char cmd)
  92. {
  93.         WaitReady();
  94.         LCD_RS = 0;
  95.         LCD_RW = 0;
  96.         LCD_DB = cmd;
  97.         LCD_EN = 1;
  98.         LCD_EN = 0;
  99. }

  100. void WriteDat(unsigned char dat)
  101. {
  102.         WaitReady();
  103.         LCD_RS = 1;
  104.         LCD_RW = 0;
  105.         LCD_DB = dat;
  106.         LCD_EN = 1;
  107.         LCD_EN = 0;
  108. }

  109. void SetCursor(unsigned char x,unsigned char y)
  110. {
  111.         unsigned char addr;
  112.         if(y == 0)
  113.                 addr = 0x00 + x;         
  114.         else
  115.                 addr = 0x40 + x;        
  116.         WriteCmd(addr | 0xf0);
  117. }

  118. void ShowStr(unsigned char x,unsigned char y,unsigned char *str,unsigned char len)
  119. {
  120.         SetCursor(x,y);
  121.         while(len--)
  122.         {
  123.                 WriteDat(*str++);
  124.         }
  125. }

  126. void InitLCD()
  127. {
  128.     WriteCmd(0x38); //16*2 顯示,5*7 點陣,8 位數據接口
  129.     WriteCmd(0x0C); //顯示器開,光標關閉
  130.     WriteCmd(0x06); //文字不動,地址自動+1
  131.     WriteCmd(0x01); //清屏
  132. }

  133. void InterruptTimer0() interrupt 1
  134. {
  135.     static unsigned char tmr500ms = 0;

  136.     TH0 = T0RH; //重新加載重載值
  137.     TL0 = T0RL;
  138.     tmr500ms++;
  139.     if (tmr500ms >= 50)
  140.     {
  141.             tmr500ms = 0;
  142.             flag500ms = 1;
  143.     }
  144. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:568565 發表于 2021-10-9 17:16 | 只看該作者
把所有的16+sizeof(str1)+16改成8+試試呢
回復

使用道具 舉報

板凳
ID:568565 發表于 2021-10-9 17:17 | 只看該作者
  for(i = 0;i < 16;i++)
        {
                bufMove1[i] = ' ';
                bufMove2[i] = ' ';
        }這部分也去掉,估計是位置已經超了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一区二区三区在线观看 | 91免费版在线| 毛片站 | 香蕉久久av | 日韩蜜桃视频 | 福利一区在线观看 | 色综合天天综合网国产成人网 | 国产精品欧美大片 | 看a网站 | 色爱综合 | 琪琪午夜伦伦电影福利片 | 免费国产一区 | 欧美日韩综合精品 | 午夜视频在线 | 亚洲一区二区在线播放 | 五月综合久久 | 五月婷亚洲 | 欧洲一区二区视频 | 视频一区在线观看 | 日韩视频在线一区 | 久久男女视频 | 欧美一级欧美一级在线播放 | 欧美日韩视频在线 | 国产综合精品一区二区三区 | 国产传媒毛片精品视频第一次 | 91精品久久久久久久久中文字幕 | 欧美精品免费观看二区 | 免费在线观看一区二区三区 | 欧美视频在线观看 | 久久精品日产第一区二区三区 | 亚洲精品欧美一区二区三区 | 看片91| 欧美 日韩 在线播放 | 九九热这里只有精品在线观看 | 久久久久资源 | 精品成人在线视频 | 男女网站免费观看 | 免费一级片 | 成人福利片 | 国产精品永久免费 | 福利影院在线看 |