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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機程序明明寫的是+1,為什么出來的效果是+2

[復制鏈接]
跳轉到指定樓層
樓主
ID:213280 發表于 2018-12-11 00:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
寫了個程序用串口發送數據給單片機,12864顯示:發送0第一行的數字+1,發送1第二行的數字+1。可是為什么出來的效果是+2呢,求大佬解答
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <stdlib.h>        
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. /* 端口定義*/
  7. #define LCD_data  P0            //數據口
  8. sbit LCD_RS  =  P3^4;            //寄存器選擇輸入                                                                                                                                                          0
  9. sbit LCD_RW  =  P3^3;            //液晶讀/寫控制
  10. sbit LCD_EN  =  P3^2;            //液晶使能控制
  11. sbit LCD_PSB =  P2^7;            //串/并方式控制
  12. sbit LCD_RST =  P2^6;


  13. uchar   data_temp,data_temp1,data_temp2;
  14. uchar num1=0,num2=0;num3=0;num4=0;
  15. typedef unsigned int u16;          //對數據類型進行聲明定義
  16. typedef unsigned char u8;
  17. u8 cmd;

  18. void delay_1ms(uint x)
  19. {
  20. uint i,j;
  21. for(j=0;j<x;j++)  
  22.         for(i=0;i<110;i++);
  23. }

  24. unsigned char Convert(unsigned char In_Date)
  25. {
  26.     unsigned char i, Out_Date = 0, temp = 0;
  27.     for(i=0; i<8; i++)
  28.     {
  29.         temp = (In_Date >> i) & 0x01;
  30.         Out_Date |= (temp << (7 - i));
  31.     }
  32.     return Out_Date;
  33. }
  34. /*******************************************************************/
  35. /*                                                                 */
  36. /*寫指令數據到LCD                                                  */
  37. /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。                             */
  38. /*                                                                 */
  39. /*******************************************************************/
  40. void write_cmd(uchar cmd)
  41. {                          
  42.     LCD_RS = 0;
  43.     LCD_RW = 0;
  44.     LCD_EN = 0;
  45.     P0 = Convert(cmd);
  46.         delay_1ms(5);
  47.     LCD_EN = 1;
  48.         delay_1ms(5);
  49.     LCD_EN = 0;  
  50. }

  51. /*******************************************************************/
  52. /*                                                                 */
  53. /*寫顯示數據到LCD                                                  */
  54. /*RS=H,RW=L,E=高脈沖,D0-D7=數據。                               */
  55. /*                                                                 */
  56. /*******************************************************************/
  57. void write_dat(uchar dat)
  58. {                          
  59.     LCD_RS = 1;
  60.     LCD_RW = 0;
  61.     LCD_EN = 0;
  62.     P0 = Convert(dat);
  63.         delay_1ms(5);
  64.     LCD_EN = 1;
  65.         delay_1ms(5);
  66.     LCD_EN = 0;  
  67. }

  68. /*********************************************************/
  69. /*                                                       */
  70. /* 設定顯示位置                                          */
  71. /*                                                       */
  72. /*********************************************************/
  73. void lcd_pos(uchar X,uchar Y)
  74. {                          
  75.    uchar  pos;
  76.    if (X==0)
  77.      {X=0x80;}
  78.    else if (X==1)
  79.      {X=0x90;}
  80.    else if (X==2)
  81.      {X=0x88;}
  82.    else if (X==3)
  83.      {X=0x98;}
  84.    pos = X+Y ;  
  85.    write_cmd(pos);     //顯示地址
  86. }

  87. /*******************************************************************/
  88. /*                                                                 */
  89. /*  LCD初始化設定                                                  */
  90. /*                                                                 */
  91. /*******************************************************************/
  92. void lcd_init()
  93. {
  94.     LCD_PSB = 1;         //并口方式  
  95.     write_cmd(0x30);      //基本指令操作
  96.     delay_1ms(5);
  97.     write_cmd(0x0C);      //顯示開,關光標
  98.     delay_1ms(5);
  99.     write_cmd(0x01);      //清除LCD的顯示內容
  100.     delay_1ms(5);
  101. }

  102. void  data_conv()
  103. {
  104.      data_temp1=data_temp/10;       //高位
  105.          if(data_temp1==0)
  106.          {data_temp1=0x20;}             //高位為0不顯示
  107.      else
  108.          {data_temp1=data_temp1+0x30;}

  109.           data_temp2=data_temp%10;       //低位
  110.      data_temp2=data_temp2+0x30;
  111. }

  112. void Com_Init(void)
  113. {
  114.      TMOD = 0x22;
  115.      PCON = 0x00;        //設置波特率不倍增
  116.      SCON = 0x50;        //SM1=1,SM0=0,REN=1,允許接收串行口中斷方式1               
  117.      TH1 = 0xFd;    //設置波特率 9600
  118.      TL1 = 0xFd;
  119.          TH0  = 0xA4;    //定時時長為0.1ms的初值自動重載
  120.          TL0  = 0xA4;    //定時時長為0.1ms的初值
  121.      TR1 = 1;                //啟動定時器1
  122.          TR0 = 1;            //啟動定時器
  123.          ET0 = 1;        //打開定時器0中斷
  124.          ES = 1;                //開串口中斷
  125.          EA = 1;                //開總中斷               
  126. }

  127. void Com_Int(void) interrupt 4
  128. {
  129.         if(RI == 1)   //當硬件接收到一個數據時,RI會置位
  130.         {
  131.                 cmd = SBUF; //這里接收到的是16進制
  132.                 RI = 0;  
  133.                 SBUF = cmd;               
  134.         }        
  135.         switch(cmd)
  136.                                 {
  137.                                 case 0:
  138.                                         num1=num1+1;
  139.                                         break;               
  140.                                 case 1:
  141.                                         num2=num2+1;
  142.                                         break;
  143.                                 case 3:
  144.                                         num3=num3+1;         
  145.                                         break;
  146.                                 case 4:
  147.                                         num4=num4+1;  
  148.                                         break;
  149.                                 default: break;
  150.         }

  151.         if (TI) //字節發送完畢
  152.         {
  153.                 TI = 0; //手動清零發送中斷標志位
  154.         }              //TI清零
  155. }

  156. void Time0Int(void) interrupt 1 using 1
  157. {

  158. }         

  159. /* 主程序                                                                                    */
  160. main()
  161. {
  162.     delay_1ms(10);      //延時
  163.         Com_Init();
  164.     lcd_init();        
  165.         while(1)
  166.         {
  167.         data_temp=num1;
  168.         data_conv();                 //初始化LCD            
  169.     lcd_pos(0,0);             //設置顯示位置為第一行的第1個字符
  170.         write_dat(data_temp1);
  171.         lcd_pos(0,1);
  172.         write_dat(data_temp2);

  173.         data_temp=num2;
  174.         data_conv();
  175.     lcd_pos(1,0);
  176.         write_dat(data_temp1);
  177.         lcd_pos(1,1);
  178.         write_dat(data_temp2);
  179.          }
  180. }
復制代碼

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

使用道具 舉報

沙發
ID:424598 發表于 2018-12-11 09:32 來自手機 | 只看該作者
num1=num1+1改成num1++試試
回復

使用道具 舉報

板凳
ID:123289 發表于 2018-12-11 12:53 | 只看該作者
你能保證你只加了一次嗎?
回復

使用道具 舉報

地板
ID:213280 發表于 2018-12-11 21:16 | 只看該作者
ssk7793 發表于 2018-12-11 09:32
num1=num1+1改成num1++試試

試過了,一樣
回復

使用道具 舉報

5#
ID:213280 發表于 2018-12-11 21:18 | 只看該作者
yzwzfyz 發表于 2018-12-11 12:53
你能保證你只加了一次嗎?

就是搞不懂呀
回復

使用道具 舉報

6#
ID:246251 發表于 2018-12-12 13:31 | 只看該作者
把switch部分放進if(RI == 1)里面
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线一区视频 | 日韩欧美在线视频 | 日本在线一区二区三区 | 在线色网址| 午夜精品导航 | 337p日韩 | 日本精品视频一区二区三区四区 | 中文字幕在线一区二区三区 | 日韩精品视频网 | 午夜免费视频 | av一区二区三区四区 | 青青久久av北条麻妃海外网 | 久久精品一区二区三区四区 | 国产精品亚洲精品 | 美女视频黄色片 | 久久久精品一区二区 | 激情综合五月 | 四虎影院免费在线 | 久久精品一级 | 欧美寡妇偷汉性猛交 | 精品1区 | 亚洲高清免费视频 | 久久久夜色精品亚洲 | 免费在线视频精品 | 视频在线亚洲 | 精品亚洲一区二区三区四区五区 | 男女视频在线观看网站 | 亚洲免费观看视频网站 | av中文在线播放 | 亚洲 欧美 另类 综合 偷拍 | 亚洲视频中文 | 国产精品亚洲欧美日韩一区在线 | 日韩在线观看网站 | 国产日韩欧美在线播放 | 好姑娘影视在线观看高清 | 久久午夜视频 | 国产精品激情 | 一级黄色片在线看 | 欧美日韩免费在线 | 国产精品美女久久久久久免费 | 久久伊人操 |