找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3543|回复: 6
打印 上一主题 下一主题
收起左侧

各位师傅给小弟看看这个程序,什么用Keil uVision4软件不能通过,到底那一部岀问题

[复制链接]
跳转到指定楼层
楼主
ID:17109 发表于 2017-11-24 15:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit key1=P3^6;                //按键1定义
  5. sbit key2=P3^5;                //按键2定义
  6. sbit key3=P3^4;                //按键3定义
  7. sbit key4=P3^3;                //按键4定义
  8. sbit led1=P1^3;                //led1端口
  9. sbit led2=P1^2;                //led2端口
  10. sbit led3=P1^1;                //led3端口
  11. sbit led4=P1^0;                //led4端口

  12. /********按键扫描程序*************/
  13. void key_scan()
  14. {
  15.         static bit key1_sign,key2_sign,key3_sign,key4_sign;//静态位变量按键自锁标志
  16.         static uint count1,count2,count3,count4;//静态计数变量  
  17.                 uint bzw1=1,bzw2=1,bzw3=1,bzw4=1;//设置标志位。                     

  18.         if(key1==0)                                                        //检测按键1按下
  19.         {
  20.                 if(key1_sign==0)
  21.                 {
  22.                         count1++;                                        //消抖计数1自+1
  23.                         if(count1>=1000)                        //按主循环周期100~2000调整
  24.                         {
  25.                                 key1_sign=1;                                           //按键1自锁标志置1
  26.                                                                 if(bzw1==1)                       
  27.                                         led1=0;led2=led3=led4=1;                         //led1取反  
  28.                                                                 else
  29.                                                                         led1=led2=led3=led4=1;                              
  30.                         }
  31.                 }
  32.                                 bzw1++;
  33.                                 if(bzw1>3)
  34.                                         bzw1=1;

  35.         }
  36.         else                                                                //按键1抬起
  37.         {
  38.                 key1_sign=0;                                         //按键1自锁标志清0
  39.                 count1=0;                                                //消抖计数1清0
  40.         }

  41.         if(key2==0)        //检测按键1按下
  42.         {
  43.                 if(key2_sign==0)
  44.                 {
  45.                         count2++;                                        //消抖计数2自+1
  46.                         if(count2>=1000)                        //按主循环周期100~2000调整
  47.                         {
  48.                                 key2_sign=1;                        //按键2自锁标志置1
  49.                                                                 if(bzw2==1)
  50.                                         led2=0;led1=led3=led4=1;                         //led2取反  
  51.                                                                 else
  52.                                                                         led1=led2=led3=led4=1;                              
  53.                         }
  54.                 }
  55.                                 bzw2++;
  56.                                 if(bzw2>3)
  57.                                         bzw2=1;
  58.         }
  59.         else                                                                //按键2抬起
  60.         {
  61.                 key2_sign=0;                                        //按键2自锁标志清0
  62.                 count2=0;                                                //消抖计数2清0
  63.         }

  64.         if(key3==0)                                                        //检测按键1按下
  65.         {
  66.                 if(key3_sign==0)
  67.                 {
  68.                         count3++;                                        //消抖计数1自+1
  69.                         if(count3>=1000)                        //按主循环周期100~2000调整
  70.                         {
  71.                                 key3_sign=1;                        //按键3自锁标志置1
  72.                                                                 if(bzw3==1)
  73.                                         led3=0;led1=led2=led4=1;                         //led3取反
  74.                                                                 else
  75.                                                                         led1=led2=led3=led4=1;                       
  76.                         }
  77.                 }
  78.                                 bzw3++;
  79.                                 if(bzw3>3)
  80.                                         bzw3=1;
  81.         }
  82.         else                                                                //按键3抬起
  83.         {
  84.                 key3_sign=0;                                        //按键3自锁标志清0
  85.                 count3=0;                                                //消抖计数3清0
  86.         }

  87.         if(key4==0)                                                        //检测按键1按下
  88.         {
  89.                 if(key4_sign==0)
  90.                 {
  91.                         count4++;                                        //消抖计数4自+1
  92.                         if(count4>=1000)                        //按主循环周期100~2000调整
  93.                         {
  94.                                 key4_sign=1;                        //按键4自锁标志置1
  95.                                                                 if(bzw4==1)
  96.                                                led4=0;led1=led2=led3=1;                         //led4取反
  97.                                                                 else
  98.                                                                         led1=led2=led3=led4=1;                       
  99.                         }                  
  100.                 }
  101.                                 bzw4++;
  102.                                 if(bzw4>3)
  103.                                         bzw4=1;
  104.         }
  105.         else                                                                //按键4抬起
  106.         {
  107.                 key4_sign=0;                                        //按键4自锁标志清0
  108.                 count4=0;                                                //消抖计数4清0
  109.         }
  110. }
  111. /************主程序************/
  112. void main()
  113. {
  114.         while(1)
  115.         {
  116.                 key_scan();                                                //按键扫描程序
  117.         }
  118. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:190832 发表于 2017-11-24 19:23 | 只看该作者
if(bzw1==1)                       
                                        led1=0;led2=led3=led4=1;                         //led1取反  
                                                                else
                                                                        led1=led2=led3=led4=1;      
这根本就不对,这要包括在大括号里面的,你好好学学C语言行吗???
回复

使用道具 举报

板凳
ID:150565 发表于 2017-11-24 19:55 | 只看该作者
你的程序写得很乱,而且排版不易观察
回复

使用道具 举报

地板
ID:17109 发表于 2017-11-24 23:59 来自触屏版 | 只看该作者
hange_v 发表于 2017-11-24 19:23
if(bzw1==1)                       
                                        led1=0;led2=led3=led4=1 ...

师博你好:修改粘贴上传看看好吗?谢谢
回复

使用道具 举报

5#
ID:155507 发表于 2017-11-25 08:46 | 只看该作者
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. sbit key1=P3^6;                //按键1定义
  5. sbit key2=P3^5;                //按键2定义
  6. sbit key3=P3^4;                //按键3定义
  7. sbit key4=P3^3;                //按键4定义
  8. sbit led1=P1^3;                //led1端口
  9. sbit led2=P1^2;                //led2端口
  10. sbit led3=P1^1;                //led3端口
  11. sbit led4=P1^0;                //led4端口

  12. /********按键扫描程序*************/
  13. void key_scan()
  14. {
  15.         static bit key1_sign,key2_sign,key3_sign,key4_sign;        //静态位变量按键自锁标志
  16.         static uint count1,count2,count3,count4;        //静态计数变量  
  17.         uint bzw1=1,bzw2=1,bzw3=1,bzw4=1;                  //设置标志位。                     

  18.         if(key1==0)                                                        //检测按键1按下
  19.         {
  20.                 if(key1_sign==0)
  21.                 {
  22.                         count1++;                            //消抖计数1自+1
  23.                         if(count1>=1000)                     //按主循环周期100~2000调整
  24.                         {
  25.                                 key1_sign=1;                                           //按键1自锁标志置1
  26.                                 if(bzw1==1)
  27.                                 {
  28.                                         led1=0;led2=led3=led4=1;       //led1取反  
  29.                                 }
  30.                                 else
  31.                                 {
  32.                                         led1=led2=led3=led4=1;  
  33.                                 }
  34.                                                             
  35.                         }
  36.                 }
  37.                 bzw1++;
  38.                 if(bzw1>3)
  39.                 bzw1=1;

  40.         }
  41.         else                                                                //按键1抬起
  42.         {
  43.                 key1_sign=0;                                         //按键1自锁标志清0
  44.                 count1=0;                                                //消抖计数1清0
  45.         }

  46.         if(key2==0)        //检测按键1按下
  47.         {
  48.                 if(key2_sign==0)
  49.                 {
  50.                         count2++;                                        //消抖计数2自+1
  51.                         if(count2>=1000)                        //按主循环周期100~2000调整
  52.                         {
  53.                                 key2_sign=1;                        //按键2自锁标志置1
  54.                                 if(bzw2==1)
  55.                                 {
  56.                                         led2=0;led1=led3=led4=1;   
  57.                                 }
  58.                                          //led2取反  
  59.                                 else
  60.                                 {
  61.                                         led1=led2=led3=led4=1;  
  62.                                 }
  63.                                                             
  64.                         }
  65.                 }
  66.                 bzw2++;
  67.                 if(bzw2>3)
  68.                 bzw2=1;
  69.         }
  70.         else                                                                //按键2抬起
  71.         {
  72.                 key2_sign=0;                        //按键2自锁标志清0
  73.                 count2=0;                           //消抖计数2清0
  74.         }

  75.         if(key3==0)                                                        //检测按键1按下
  76.         {
  77.                 if(key3_sign==0)
  78.                 {
  79.                         count3++;                         //消抖计数1自+1
  80.                         if(count3>=1000)                 //按主循环周期100~2000调整
  81.                         {
  82.                                 key3_sign=1;                 //按键3自锁标志置1
  83.                                 if(bzw3==1)
  84.                                 {
  85.                                         led3=0;led1=led2=led4=1;   
  86.                                 }
  87.                                       //led3取反
  88.                                 else
  89.                                 {
  90.                                         led1=led2=led3=led4=1;
  91.                                 }
  92.                                                       
  93.                         }
  94.                 }
  95.                 bzw3++;
  96.                 if(bzw3>3)
  97.                 bzw3=1;
  98.         }
  99.         else                                                                //按键3抬起
  100.         {
  101.                 key3_sign=0;                       //按键3自锁标志清0
  102.                 count3=0;                         //消抖计数3清0
  103.         }

  104.         if(key4==0)                                                        //检测按键1按下
  105.         {
  106.                 if(key4_sign==0)
  107.                 {
  108.                         count4++;                   //消抖计数4自+1
  109.                         if(count4>=1000)            //按主循环周期100~2000调整
  110.                         {
  111.                                 key4_sign=1;            //按键4自锁标志置1
  112.                                 if(bzw4==1)
  113.                                 {
  114.                                         led4=0;led1=led2=led3=1;         //led4取反
  115.                                 }
  116.                                
  117.                                 else
  118.                                 {
  119.                                         led1=led2=led3=led4=1;   
  120.                                 }
  121.                                                     
  122.                         }                  
  123.                 }
  124.                 bzw4++;
  125.                 if(bzw4>3)
  126.                 bzw4=1;
  127.         }
  128.         else                                                                //按键4抬起
  129.         {
  130.                 key4_sign=0;           //按键4自锁标志清0
  131.                 count4=0;              //消抖计数4清0
  132.         }
  133. }
  134. /************主程序************/
  135. void main()
  136. {
  137.         while(1)
  138.         {
  139.                 key_scan();          //按键扫描程序
  140.         }
  141. }


复制代码
回复

使用道具 举报

6#
ID:190832 发表于 2017-11-25 13:22 | 只看该作者

可以,如果if下面只有一条语句可以不用大括号,否则就得用
回复

使用道具 举报

7#
ID:17109 发表于 2017-11-25 20:15 | 只看该作者

这程能能通过Keil uVision4软件   我以为这语句加入就是在这键按两下就能够   关led  原来也是不能关led的      师傅你好能修改成按两下就能够   关led吗  
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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