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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求教單片機+LCD1602應用時出現第一行空白部分出現了第二行的數據

[復制鏈接]
回帖獎勵 20 黑幣 回復本帖可獲得 20 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
以下是全部的程序 LCD數據寫入的部分我標記了下,求大大們幫個忙
  1. #include <reg52.h>                         //此文件中定義了單片機的一些特殊功能寄存器
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define GPIO_DIG P0  //lcd
  5. #define GPIO_KEY P1 //矩陣鍵盤
  6. #define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電
  7. #define Coil_A2 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
  8. #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電
  9. #define Coil_B2 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
  10. #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電
  11. #define Coil_C2 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
  12. #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  13. #define Coil_D2 {A1=1;B1=0;C1=0;D1=1;}//DA相通電,其他相斷電
  14. #define LCD_IO P0
  15. typedef unsigned int u16;          //對數據類型進行聲明定義
  16. typedef unsigned char u8;
  17. sbit jiaoliuzhengzhuan=P2^3;
  18. sbit jiaoliufanzhuan=P2^4;
  19. sbit k1=P3^0;
  20. sbit k2=P3^1;
  21. sbit A1=P3^2; //定義步進電機連接端口
  22. sbit B1=P3^3;
  23. sbit C1=P3^4;
  24. sbit D1=P3^5;
  25. int zqianwei,zbaiwei,zshiwei,zgewei;
  26. int zjiaodu=0;
  27. int b=0,c=0,d=0;
  28. int j=0,i=0,k=0;
  29. int jiaodu=180;
  30. int shiwei;
  31. int shanshuo;
  32. int gewei;
  33. int e,v,n;
  34. int baiwei;
  35. int weight=0;
  36. int z=0;
  37. int KeyValue;        //用來存放讀取到的鍵值
  38. sbit sheng1=P1^4;
  39. sbit sheng2=P1^5;
  40. sbit LCD_RS = P2^6;
  41. sbit LCD_RW = P2^5;
  42. sbit LCD_EN = P2^7;
  43. char code LCD_line2[] = "Weight: 0kg ";
  44. char Timer_buf[] = "00";
  45. char code LCD_line1[] = "jiaodu:  0  du ";
  46. char weight_1[] = "";
  47. unsigned char SetPlace;
  48. unsigned char Speed;
  49. /*******************************************************************************
  50. * 函 數 名         : delay
  51. * 函數功能                   : 延時函數,i=1時,大約延時10us
  52. *******************************************************************************/

  53. void delay1(uint z)
  54. {
  55.     uint  x, y;
  56.     for(x = z; x > 0; x--)  for(y = 100; y > 0; y--);
  57. }

  58. //---------------------------------------------------
  59. void W_LCD_Com(uchar com)      //寫指令
  60. {
  61.     LCD_RS = 0;  LCD_IO = com; // LCD_RS和R/W都為低電平時,寫入指令
  62.     LCD_EN = 1;  delay1(5); LCD_EN = 0; //用EN輸入一個高脈沖
  63. }
  64. //---------------------------------------------------
  65. void W_LCD_Dat(uchar dat)      //寫數據
  66. {
  67.     LCD_RS = 1;  LCD_IO = dat; // LCD_RS為高、R/W為低時,寫入數據
  68.     LCD_EN = 1;  delay1(5); LCD_EN = 0; //用EN輸入一個高脈沖
  69. }
  70. //---------------------------------------------------
  71. void W_LCD_STR(uchar *s)       //寫字符串
  72. {
  73.     while(*s)  W_LCD_Dat(*s++);
  74. }
  75. //---------------------------------------------------
  76. void W_BUFF(void)              //填寫顯示緩沖區   LCD數據寫入
  77. {gewei=jiaodu%10;
  78.   baiwei=jiaodu/100;
  79.   shiwei=(jiaodu/10)%10;
  80. weight_1[2] = gewei % 10+ 48;
  81. weight_1[1] = shiwei % 10+ 48;  
  82. weight_1[0] = baiwei % 10+ 48;
  83.   W_LCD_Com(0x80 + 7); W_LCD_STR(weight_1);
  84. zgewei=zjiaodu%10;
  85. zbaiwei=zjiaodu/100;
  86.   zshiwei=(zjiaodu/10)%10;
  87. zqianwei=zjiaodu/1000;
  88. Timer_buf[1] = zbaiwei % 10 + 48;Timer_buf[0] = zqianwei % 10+ 48;
  89. Timer_buf[2] = zshiwei % 10 + 48;Timer_buf[3] = zgewei % 10 + 48;
  90. W_LCD_Com(0xc0+7);W_LCD_STR(Timer_buf);
  91. }
  92. //---------------------------------------------------

  93. //---------------------------------------------------
  94. void Init()
  95. {
  96.     LCD_RW = 0;
  97.     W_LCD_Com(0x38); delay1(50);
  98.     W_BUFF();
  99.     W_LCD_Com(0x01);
  100.     W_LCD_Com(0x80); W_LCD_STR(LCD_line1);
  101.     W_LCD_Com(0xC0); W_LCD_STR(LCD_line2);


  102. }
  103. //---------------------------------------------------
  104. void delay(u16 i)
  105. {
  106.         while(i--);      
  107. }

  108. /*******************************************************************************
  109. * 函 數 名         : KeyDown
  110. * 函數功能                   : 檢測有按鍵按下并讀取鍵值
  111. * 輸    入         : 無
  112. * 輸    出         : 無
  113. *******************************************************************************/
  114. void KeyDown(void)
  115. {
  116.         char a=0;
  117.         GPIO_KEY=0x0f;
  118.         if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
  119.         {
  120.                 delay(1000);//延時10ms進行消抖
  121.                 if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下
  122.                 {      
  123.                         //測試列
  124.                         GPIO_KEY=0X0F;
  125.                         switch(GPIO_KEY)
  126.                         {
  127.                                 case(0X07):        KeyValue=0;break;
  128.                                 case(0X0b):        KeyValue=1;break;
  129.                                 case(0X0d): KeyValue=2;break;
  130.                                 case(0X0e):        KeyValue=3;break;
  131.                         }
  132.                         //測試行
  133.                         GPIO_KEY=0XF0;
  134.                         switch(GPIO_KEY)
  135.                         {
  136.                                 case(0X70):        KeyValue=KeyValue;break;
  137.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  138.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  139.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  140.                         }
  141.                         while((a<50)&&(GPIO_KEY!=0xf0))         //檢測按鍵松手檢測
  142.                         {
  143.                                 delay(1000);
  144.                                 a++;
  145.                         }
  146.                 }
  147.         }
  148. }
  149. zhengzhuan()
  150. {
  151. while(k!=j)  
  152.   {      
  153.      Coil_A1                 //遇到Coil_A1  用{A1=1;B1=0;C1=0;D1=0;}代替
  154.        delay(200);       //改變這個參數可以調整電機轉速 ,
  155.          k--;
  156.          if(k==j)
  157.          break;     
  158.      Coil_A2               
  159.       delay(200);      
  160.          k--;
  161.          if(k==j)
  162.          break;                     
  163.      Coil_B1
  164.     delay(200);  
  165.          k--;
  166.          if(k==j)
  167.          break;
  168.      Coil_B2
  169.        delay(200);  
  170.          k--;
  171.          if(k==j)
  172.          break;
  173.      Coil_C1
  174.      delay(200);  
  175.          k--;
  176.          if(k==j)
  177.          break;
  178.      Coil_C2
  179.      delay(200);  
  180.          k--;
  181.          if(k==j)
  182.          break;
  183.      Coil_D1
  184.        delay(200);  
  185.          k--;
  186.          if(k==j)
  187.          break;
  188.      Coil_D2
  189.        delay(200);  
  190.          k--;
  191.          if(k==j)
  192.          break;
  193.          }}
  194.   fanzhuan()
  195. {
  196. while(k!=j)  
  197.   {   
  198.      Coil_D2                 //遇到Coil_A1  用{A1=1;B1=0;C1=0;D1=0;}代替
  199.      delay(200);        //改變這個參數可以調整電機轉速 ,
  200.          k--;  
  201. if(k==j)
  202.          break;      
  203.      Coil_D1                 
  204.         delay(200);         
  205.          k--;  
  206. if(k==j)
  207.          break;                  
  208.      Coil_C2
  209.        delay(200);  
  210.          k--;
  211. if(k==j)
  212.          break;
  213.      Coil_C1
  214.      delay(200);  
  215.          k--;
  216. if(k==j)
  217.          break;
  218.      Coil_B2
  219.          delay(200);  
  220.          k--;
  221. if(k==j)
  222.          break;
  223.      Coil_B1
  224.        delay(200);  
  225.          k--;
  226. if(k==j)
  227.          break;
  228.      Coil_A2
  229.       delay(200);  
  230.          k--;
  231. if(k==j)
  232.          break;
  233.      Coil_A1
  234.        delay(200);  
  235.          k--;
  236.          if(k==j)
  237.          break;
  238.          }
  239.   }


  240. void anjian()
  241. {if(KeyValue==6&&b==1&&c==1&&d==1)//電機正轉
  242. {k=jiaodu*11+jiaodu/2;i=i+k;zhengzhuan();KeyValue=20;}
  243. if(KeyValue==7&&b==1&&c==1&&d==1)//電機反轉
  244. {k=jiaodu*12;if(i<=0){
  245. delay(1000);i=0;k=0;}
  246. i=i-k;fanzhuan();
  247. KeyValue=20;}
  248. if(KeyValue==5)
  249. {b=1;c=1;d=1;shanshuo=0;KeyValue=20;z=5;}
  250.         if(KeyValue==0)
  251. {z++;
  252. if (z>=7)
  253. z=0;
  254. KeyValue=20;}//百位選擇
  255. if(z==0)
  256. {b=1;c=0;d=0;e=1;v=1;n=1;shanshuo=1;}
  257. if(z==1)//十位選擇
  258. {b=0;c=1;d=0;e=1;v=1;n=1;shanshuo=2;}
  259. if(z==2)//個位選擇
  260. {b=0;c=0;d=1;e=1;v=1;n=1;shanshuo=3;}
  261. if(z==3)//千位選擇
  262. {b=0;c=0;d=0;e=1;v=0;n=0;shanshuo=4;}
  263. if(z==4)//百位選擇
  264. {b=1;c=0;d=0;e=0;v=0;n=0;shanshuo=5;}
  265. if(z==5)//十位選擇
  266. {b=0;c=1;d=0;e=0;v=0;n=1;shanshuo=6;}
  267. if(z==6)//個位選擇
  268. {b=0;c=0;d=1;e=0;v=1;n=1;shanshuo=7;}
  269. if(KeyValue==1)
  270. {jiaoliuzhengzhuan=1;jiaoliufanzhuan=0;}
  271. if(KeyValue==2)
  272. {jiaoliufanzhuan=1;jiaoliuzhengzhuan=0;}
  273. if(KeyValue==9)
  274. {jiaoliufanzhuan=1;jiaoliuzhengzhuan=1;}
  275. if(KeyValue==3&&b==1&&c==0&&d==0&&e==1&&v==1&&n==1)//百位+1
  276. {jiaodu=jiaodu+100;KeyValue=20;}
  277. if(KeyValue==4&&b==1&&c==0&&d==0&&e==1&&v==1&&n==1)//百位-1
  278. {jiaodu=jiaodu-100;KeyValue=20;}
  279. if(KeyValue==3&&b==0&&c==1&&d==0&&e==1&&v==1&&n==1)//十位+1
  280. {jiaodu=jiaodu+10;KeyValue=20;}
  281. if(KeyValue==4&&b==0&&c==1&&d==0&&e==1&&v==1&&n==1)//十位-1
  282. {jiaodu=jiaodu-10;KeyValue=20;}
  283. if(KeyValue==3&&b==0&&c==0&&d==1&&e==1&&v==1&&n==1)//個位+1
  284. {jiaodu=jiaodu+1;KeyValue=20;}
  285. if(KeyValue==4&&b==0&&c==0&&d==1&&e==1&&v==1&&n==1)//個位-1
  286. {jiaodu=jiaodu-1;KeyValue=20;}
  287. if(KeyValue==3&&b==1&&c==0&&d==0&&e==0&&v==0&&n==0)//百位+1
  288. {zjiaodu=zjiaodu+100;KeyValue=20;}
  289. if(KeyValue==4&&b==1&&c==0&&d==0&&e==0&&v==0&&n==0)//百位-1
  290. {zjiaodu=zjiaodu-100;KeyValue=20;}
  291. if(KeyValue==3&&b==0&&c==1&&d==0&&e==0&&v==0&&n==1)//十位+1
  292. {zjiaodu=zjiaodu+10;KeyValue=20;}
  293. if(KeyValue==4&&b==0&&c==1&&d==0&&e==0&&v==0&&n==1)//十位-1
  294. {zjiaodu=zjiaodu-10;KeyValue=20;}
  295. if(KeyValue==3&&b==0&&c==0&&d==1&&e==0&&v==1&&n==1)//個位+1
  296. {zjiaodu=zjiaodu+1;KeyValue=20;}
  297. if(KeyValue==4&&b==0&&c==0&&d==1&&e==0&&v==1&&n==1)//個位-1
  298. {zjiaodu=zjiaodu-1;KeyValue=20;}
  299. if(KeyValue==3&&b==0&&c==0&&d==0&&e==1&&v==0&&n==0)//千位+1
  300. {zjiaodu=zjiaodu+1000;KeyValue=20;}
  301. if(KeyValue==4&&b==0&&c==0&&d==0&&e==1&&v==0&&n==0)//千位-1
  302. {zjiaodu=zjiaodu-1000;KeyValue=20;}
  303. if(KeyValue==8){if(i<=0)i=0;k=i;
  304. i=i-k;fanzhuan();
  305. KeyValue=20;}
  306. if(k1==0)
  307. {KeyValue=6;}
  308. if(k2==0)
  309. {KeyValue=7;}
  310. }
  311. /*******************************************************************************
  312. * 函 數 名       : main
  313. * 函數功能                 : 主函數
  314. * 輸    入       : 無
  315. * 輸    出             : 無
  316. *******************************************************************************/
  317. void main()
  318. {
  319. delay(100);
  320.     Init();      
  321. shanshuo=0;
  322. delay(100);
  323. weight=30;
  324. P1=0x00;
  325.         while(1)
  326.         {        KeyDown();

  327.         anjian();
  328.     weight=i/1900;
  329.         switch (shanshuo)
  330. {case 0:W_LCD_Com(0x0c);W_BUFF();break;
  331. case 1: W_LCD_Com(0x87);
  332.     W_LCD_Com(0x0f);delay(1000); W_BUFF();break;
  333. case 2:W_LCD_Com(0x88);
  334.     W_LCD_Com(0x0f);delay(1000); W_BUFF();break;
  335. case 3:W_LCD_Com(0x89);
  336.     W_LCD_Com(0x0f);delay(1000); W_BUFF();break;
  337.         case 4:W_LCD_Com(0xc7);
  338.     W_LCD_Com(0x0f);delay(1000); W_BUFF();break;
  339.         case 5:W_LCD_Com(0xc8);
  340.     W_LCD_Com(0x0f);delay(1000); W_BUFF();break;
  341.         case 6:W_LCD_Com(0xc9);
  342.     W_LCD_Com(0x0f);delay(1000); W_BUFF();break;
  343.         case 7:W_LCD_Com(0xca);
  344.     W_LCD_Com(0x0f);delay(1000); W_BUFF();break;
  345.         default :W_LCD_Com(0x0c);W_BUFF();break;
  346. }//寫顯示
  347.         }               
  348. }
復制代碼





QQ圖片20190602223934.jpg (2.44 MB, 下載次數: 29)

第一行后面的倆個數我并沒有編寫

第一行后面的倆個數我并沒有編寫
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:332444 發表于 2019-6-4 20:48 | 只看該作者
得空看看,你用什么板子?
回復

使用道具 舉報

板凳
ID:332444 發表于 2019-6-4 21:03 | 只看該作者
修改一下試看
char code LCD_line1[] = "jiaodu: 0du ";
回復

使用道具 舉報

地板
ID:332444 發表于 2019-6-4 21:05 | 只看該作者
修改一下45行代碼如下
char code LCD_line1[] = "jiaodu: 0du ";
回復

使用道具 舉報

5#
ID:511890 發表于 2019-6-5 03:42 | 只看該作者

char Timer_buf[] = "00";
char code LCD_line1[] = "jiaodu:  0  du ";
char weight_1[] = "";
改成:
char code LCD_line2[] = "Weight:   0kg ";
char Timer_buf[5];
char code LCD_line1[] = "jiaodu:  0  du ";
unsigned char weight_1[4];
沒固定長度的數組系統會默認給一個長的值。顯示不好控制。再加上你的W_LCD_STR()遍歷了整個數組。所有才會出現后面的亂碼。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一二三四在线视频观看社区 | 涩涩视频网站在线观看 | 成人在线免费观看 | 黄色片网站在线观看 | 国产精品电影网 | 久草网在线视频 | 天天干天天插天天 | 五月天天丁香婷婷在线中 | 日韩视频专区 | 91精品在线看| 99久久视频| 国产精品久久久久久久久久久久久 | www.黄色网 | 日本在线一二 | 久久国品片 | 国产一在线观看 | 久久免费精品视频 | 欧美精品综合在线 | 亚洲一区二区视频 | 欧美一级片 | 男人的天堂在线视频 | 中文字幕不卡在线观看 | 欧洲高清转码区一二区 | 日本三级电影在线观看视频 | 亚洲成人一区二区在线 | 久操伊人| 天天射天天干 | 久久亚洲天堂 | 日韩久久久一区二区 | 成人网在线观看 | 精品视频一区二区三区在线观看 | 五月婷婷丁香 | 精品一二区 | 一区二区精品 | 亚洲一区视频在线 | 玖玖视频网| 成年人的视频免费观看 | 超碰97免费 | 一区二区伦理电影 | 能看的av | 欧美成年网站 |