找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 392|回复: 6
收起左侧

请问单片机P1_1,P1_2,P1_3仿真无法按下的原因是什么?

[复制链接]
ID:1104657 发表于 2024-1-12 17:56 | 显示全部楼层 |阅读模式
1705052703860.gif
单片机源程序如下:

  1.     #include "main.h"
  2.     #include "lcd1602.h"
  3.     #include "key.h"
  4.     #include "motor_zhiliu.h"


  5.    
  6.     uchar key_num = 0;                                                                                       
  7.     uchar flag_display = 0;                                                                        
  8.     uint time_num = 0;                                                                                       
  9.     char display_buf[16];                                                                                
  10.     bit flag_mode = 0;                                                                                       
  11.     extern bit flag_direction;                                                        
  12.     extern uchar pwm_num;                                                                                
  13.     uchar flag_speed = 0;                                                                                


  14.    
  15.     void Delay_function(uint x);                                                
  16.     void Key_function(void);                                                               
  17.     void Display_function(void);                                                
  18.     void Manage_function(void);                                                        
  19.     uchar Simulation_Keyboard_Scan(void);

  20.    
  21.     void main()
  22.     {
  23.             Lcd1602_Init();                                                                                    
  24.             Delay_function(50);                                                                          
  25.             lcd1602_clean();                                                                           
  26.             Delay_function(50);                                                                          
  27.             Timer0_Init();                                                                                                
  28.             Delay_function(50);                                                                          
  29.            
  30.             while(1)
  31.             {
  32.                     Key_function();                                                                                 
  33.                     Display_function();                                                                        
  34.                     Manage_function();                                                                        

  35.                     Delay_function(10);                                                                        
  36.                     time_num++;                                                                                            
  37.                     if(time_num == 5000)
  38.                     {
  39.                             time_num = 0;
  40.                     }
  41.             }
  42.     }

  43.    
  44.     void Delay_function(uint x)
  45.     {
  46.             uint m,n;
  47.             for(m=x;m>0;m--)
  48.             for(n=110;n>0;n--);
  49.     }

  50.    
  51.     uchar Simulation_Keyboard_Scan(void)
  52.     {
  53.         uchar key_value = 0;
  54.       
  55.         
  56.         key_value = ~P1 & 0x0F;
  57.       
  58.         
  59.         
  60.       
  61.         return key_value;
  62.     }


  63.     void Key_function(void)
  64.     {
  65.         #ifdef SIMULATION
  66.             key_num = Simulation_Keyboard_Scan();
  67.         #else
  68.             key_num = Chiclet_Keyboard_Scan(0);  
  69.         #endif
  70.         if(key_num != 0)  
  71.         {
  72.             switch(key_num)
  73.             {
  74.                 case 1:  
  75.                     flag_direction = ~flag_direction;
  76.                     break;

  77.                 case 2:  
  78.                     if(flag_speed < 3)
  79.                         flag_speed++;
  80.                     flag_mode = 1;
  81.                     break;

  82.                 case 3:  
  83.                     if(flag_speed > 0)
  84.                         flag_speed--;
  85.                     flag_mode = 1;
  86.                     break;
  87.                
  88.                 case 4:  
  89.                     flag_speed = 0;
  90.                     flag_mode = 1;
  91.                     break;

  92.                 default:
  93.                     break;
  94.             }
  95.         }
  96.     }


  97.    
  98.     void Display_function(void)
  99.     {
  100.             if(flag_direction == 0)                                                               
  101.                     lcd1602_display_str(2, 0, "D:Right");
  102.             else
  103.                     lcd1602_display_str(2, 0, "D:Lift ");
  104.            
  105.             switch(flag_speed)                                                                                
  106.             {
  107.                     case 0:
  108.                             lcd1602_display_str(2, 9, "S:Stop");
  109.                     break;
  110.                   
  111.                     case 1:
  112.                             lcd1602_display_str(2, 9, "S:Low ");
  113.                     break;
  114.                   
  115.                     case 2:
  116.                             lcd1602_display_str(2, 9, "S:Mid ");
  117.                     break;
  118.                   
  119.                     case 3:
  120.                             lcd1602_display_str(2, 9, "S:High");
  121.                     break;
  122.                   
  123.                     default:
  124.                     break;
  125.             }
  126.     }

  127.    
  128.     void Manage_function(void)
  129.     {
  130.         if(flag_mode == 0)
  131.         {
  132.             flag_speed = 1;
  133.         }
  134.         else
  135.         {
  136.             switch(key_num)
  137.             {
  138.                 case 1:  
  139.                     flag_direction = ~flag_direction;
  140.                     break;

  141.                 case 2:  
  142.                     if(flag_speed < 3)
  143.                         flag_speed++;
  144.                     flag_mode = 1;
  145.                     break;

  146.                 case 3:  
  147.                     if(flag_speed > 0)
  148.                         flag_speed--;
  149.                     flag_mode = 1;
  150.                     break;
  151.                
  152.                 case 4:  
  153.                     flag_speed = 0;
  154.                     flag_mode = 1;
  155.                     break;

  156.                 default:
  157.                     break;
  158.             }
  159.         }      
  160.     }
复制代码


回复

使用道具 举报

ID:1104657 发表于 2024-1-12 17:57 | 显示全部楼层
不懂怎么上传代码就乱码了
回复

使用道具 举报

ID:69038 发表于 2024-1-13 08:59 | 显示全部楼层
你没按到开关的点上当然按对不下了。
回复

使用道具 举报

ID:44037 发表于 2024-1-13 12:07 | 显示全部楼层
单片机P1_1,P1_2,P1_3仿真无法按下的原因是 按键处有"<TEXT>"  将其移开就正常了
无标题.jpg
回复

使用道具 举报

ID:1104657 发表于 2024-1-13 13:40 | 显示全部楼层
zhuls 发表于 2024-1-13 08:59
你没按到开关的点上当然按对不下了。

不是这个原因,就算对准了开关,仍然无法按下P1_1,P1_2,P1_3,并且会显示“测量时必须停止仿真”字样
回复

使用道具 举报

ID:1104657 发表于 2024-1-13 16:21 | 显示全部楼层
我知道原因了!!!是仿真的四个按键靠太近了!!!!!
回复

使用道具 举报

ID:1104657 发表于 2024-1-14 14:28 | 显示全部楼层
by64214 发表于 2024-1-13 12:07
单片机P1_1,P1_2,P1_3仿真无法按下的原因是 按键处有""  将其移开就正常了

原来如此哈哈哈哈哈哈,好咧谢谢大佬!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表