欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

為什么我的程序在普中的開發(fā)板上能正常運(yùn)行,但是在proteus仿真時(shí),不能正常運(yùn)行...

查看數(shù): 3232 | 評論數(shù): 6 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2021-12-2 13:14

正文摘要:

按K2按鈕不會顯示, #include <REGX51.H> #include <stdio.h> #define u16 unsigned int #define u8 unsigned char #define DbPins P0   // 宏定義將P0口用DbPins表示 sbit E = P2^7; ...

回復(fù)

ID:213173 發(fā)表于 2021-12-4 10:41
壞檸 發(fā)表于 2021-12-3 19:38
能在普中的開發(fā)板上運(yùn)行,編譯我是調(diào)了memory model調(diào)成了compact如何解決

不要把函數(shù)寫得很復(fù)雜,若出現(xiàn)錯誤很難查找。能簡化盡量簡化。下圖是按下K2后字符移動顯示。
簡化的代碼,要添加功能直接加在按鍵服務(wù)函數(shù)里即可。
  1. #include <REG51.H>
  2. //#include <stdio.h>
  3. #define u16 unsigned int
  4. #define u8 unsigned char
  5. #define DbPins P0   // 宏定義將P0口用DbPins表示
  6. sbit E  = P2^7;   
  7. sbit RS = P2^6;
  8. sbit RW = P2^5;
  9. sbit K1 = P3^1;                  // 四個(gè)獨(dú)立按鍵
  10. sbit K2 = P3^0;
  11. sbit K3 = P3^2;
  12. sbit K4 = P3^3;
  13. sbit led1 = P2^0;                //左轉(zhuǎn)向燈
  14. sbit led2 = P2^2;                //右轉(zhuǎn)向燈
  15. //u16 sign; // 用于判斷有無按鍵被按下,0表示有按鍵按下,1表示沒有按鍵按下
  16. u8 code string0[]="Welcome!";
  17. u8 code string1[]="IT class 2";           //定義要顯示的字符
  18. u8 code string2[]="huang yuxing";
  19. u8 code string3[]="    IT class 2 huang yuxing                 ";
  20. u8 code string1_K3[]="right_light_shan";
  21. u8 code string2_K3[]="shan 10 xia     ";
  22. u8 code string1_K4[]="left_light_shan ";
  23. u8 code string2_K4[]="shan 10 xia     ";

  24. u8 Key_value;  //用于接收鍵值的全局變量

  25. void delay(u16 ms)
  26. {        
  27.         u16 a,b;
  28.         for(a=ms;a>0;a--)
  29.                 for(b=110;b>0;b--);
  30. }
  31. // 寫入命令函數(shù)
  32. void LcdWriter(u8 com)
  33. {
  34.         E = 0;  //使能信號,1時(shí)讀取信息,下降沿時(shí)執(zhí)行指令
  35.         RS = 0;  //低電平表示輸入指令,高電平表示輸入數(shù)據(jù)
  36.         RW = 0;  //高電平向lcd讀取信息,低電平向lcd輸入指令或數(shù)據(jù)
  37.         DbPins = com; //寫入命令
  38.         delay(1);  // 延時(shí) 保持?jǐn)?shù)據(jù)穩(wěn)定性
  39.         E = 1;   //寫入時(shí)序
  40.         delay(1);  //保持時(shí)間
  41.         E = 0;          //下降沿執(zhí)行指令
  42. }

  43. // 輸出函數(shù)
  44. void LcdPrint(u8 date)
  45. {
  46.         E = 0; // 使能清零
  47.         RS = 1; // 選擇寫入數(shù)據(jù)
  48.         RW = 0; //選擇寫入
  49.         DbPins = date; // 寫入數(shù)據(jù)
  50.         delay(1);          // 延時(shí)1ms
  51.         E = 1; // 讀取信息
  52.         delay(1); //保持時(shí)間
  53.         E = 0; // 下降沿執(zhí)行指令
  54. }

  55. // 初始化函數(shù)
  56. void Lcdinit()
  57. {
  58.         LcdWriter(0x38);  //開顯示,數(shù)據(jù)總線為8位顯示兩行,每個(gè)字符為5*7的點(diǎn)陣,
  59.         LcdWriter(0x0c);  // 開顯示,不顯示光標(biāo)
  60.         LcdWriter(0x06);   // 寫一個(gè)指針加1,向右移動
  61.         LcdWriter(0x01);   // 清屏
  62. }

  63. void key_scan()//按鍵掃描
  64. {
  65.         static u8 count=0;
  66.         static bit sign=0;
  67.         if(!K1||!K2||!K3||!K4)
  68.         {
  69.                 if(++count>=250 && sign==0)
  70.                 {
  71.                         sign=1;
  72.                         if(!K1)Key_value=1;
  73.                         if(!K2)Key_value=2;
  74.                         if(!K3)Key_value=3;
  75.                         if(!K4)Key_value=4;
  76.                 }
  77.         }
  78.         else
  79.         {
  80.                 count=0;
  81.                 sign=0;
  82.         }
  83. }

  84. void key_service()//按鍵服務(wù)函數(shù)
  85. {
  86.         u16 i,j,k;
  87.         static bit flag=0;

  88.         switch(Key_value)
  89.         {
  90.                 case 1:
  91.                         LcdWriter(0x01);
  92.                         LcdWriter(0x80);
  93.                         for(i=0;i<16;i++)
  94.                                 LcdPrint(string1[i]);
  95.                         LcdWriter(0xc0);
  96.                         for(i=0;i<16;i++)
  97.                                 LcdPrint(string2[i]);
  98.                         Key_value=0;
  99.                 break;
  100.                 case 2:
  101.                         if(!flag)
  102.                         {
  103.                                 LcdWriter(0x01);
  104.                                 LcdWriter(0x80);
  105.                                 for(i=0;i<16;i++)
  106.                                         LcdPrint(string3[i]);
  107.                                 flag=1;
  108.                         }
  109.                         else
  110.                         {
  111.                                 if(++j>=5000)
  112.                                 {
  113.                                         j=0;
  114.                                         k=++k%28;
  115.                                         LcdWriter(0x01);
  116.                                         LcdWriter(0x80);
  117.                                         for(i=0;i<16;i++)
  118.                                                 LcdPrint(string3[i+k]);
  119.                                 }
  120.                         }
  121. //                        Key_value=0;
  122.                 break;
  123.                 case 3:
  124.                         LcdWriter(0x80);
  125.                         for(i=0;i<16;i++)
  126.                                 LcdPrint(string1_K3[i]);
  127.                         LcdWriter(0xc0);
  128.                         for(i=0;i<16;i++)
  129.                                 LcdPrint(string2_K3[i]);
  130.                         Key_value=0;
  131.                 break;
  132.                 case 4:
  133.                         LcdWriter(0x80);
  134.                         for(i=0;i<16;i++)
  135.                                 LcdPrint(string1_K4[i]);
  136.                         LcdWriter(0xc0);
  137.                         for(i=0;i<16;i++)
  138.                                 LcdPrint(string2_K4[i]);
  139.                         Key_value=0;
  140.                 break;
  141.         }
  142.         if(Key_value!=2)flag=0;
  143. }

  144. void main()
  145. {
  146.         u8 i;
  147.         Lcdinit();
  148.         LcdWriter(0x84);
  149.         for(i=0;i<8;i++)
  150.                 LcdPrint(string0[i]);       
  151.         while(1)
  152.         {
  153.                 key_scan();
  154.                 key_service();
  155.         }
  156. }
復(fù)制代碼







ID:908826 發(fā)表于 2021-12-3 17:23
既然實(shí)物都能跑了,還搞仿真干嘛,本來仿真就是輔助實(shí)物的。
ID:584814 發(fā)表于 2021-12-3 14:47
因?yàn)槟愕姆抡孳浖皇瞧罩泄鹃_發(fā)的
ID:213173 發(fā)表于 2021-12-3 11:30
樓主的程序在普中的開發(fā)板上能正常運(yùn)行???有沒有搞錯?這程序放在任何地方都不可能正常運(yùn)行,甚至不能通過編譯。
ID:96682 發(fā)表于 2021-12-3 09:33
就問問樓主是同一個(gè)程序么?

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

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

快速回復(fù) 返回頂部 返回列表