找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15W408单片机BCD码控制15台电机的程序问题

[复制链接]
跳转到指定楼层
楼主
ID:368362 发表于 2018-7-10 08:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求高手帮我看看,有什么问题。由P1口低4位送入BCD码,P2、P3输出控制15台电机。采用STC15W408。单片机程序如下
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar temp,key;

  5. /*uchar code table[]={
  6. 0xfe,0xfd,0xfb,0xf7,
  7. 0xef,0xdf,0xbf,0x7f,0xff};        */

  8. void delayms(uint xms)
  9. {
  10.         uint i,j;
  11.         for(i=xms;i>0;i--)
  12.                 for(j=110;j>0;j--);
  13. }

  14. void main()
  15. {
  16.         P3=0xff;
  17.         P2=0xff;
  18. //        P1=0xff;
  19.         while(1)
  20.         {
  21.                
  22.                 P3=0xff;
  23.                 P2=0xff;
  24. //                P1=0xff;        
  25.                 temp=P1;
  26.                 if(temp!=0xff)
  27.                 {
  28.                         delayms(20);
  29.                         temp=P1;
  30.                         if(temp!=0xff)
  31.                         {
  32.                                 temp=P1;
  33.                                 switch(temp)
  34.                                 {
  35.                                         case 0x01:
  36.                                         P3=0xfe;
  37.                                         break;
  38.                                         case 0x02:
  39.                                         P3=0xfd;
  40.                                         break;
  41.                                         case 0x03:
  42.                                         P3=0xfb;
  43.                                         break;
  44.                                         case 0x04:
  45.                                         P3=0xf7;
  46.                                         break;
  47.                                         case 0x05:
  48.                                         P3=0xef;
  49.                                         break;
  50.                                         case 0x06:
  51.                                         P3=0xdf;
  52.                                         break;
  53.                                         case 0x07:
  54.                                         P3=0xbf;
  55.                                         break;
  56.                                         case 0x08:
  57.                                         P3=0x7f;
  58.                                         break;
  59.                                         case 0x09:
  60.                                         P2=0xfe;
  61.                                         break;
  62.                                         case 0x0a:
  63.                                         P2=0xfd;
  64.                                         break;
  65.                                         case 0x0b:
  66.                                         P2=0xfb;
  67.                                         break;
  68.                                         case 0x0c:
  69.                                         P2=0xf7;
  70.                                         break;
  71.                                         case 0x0d:
  72.                                         P2=0xef;
  73.                                         break;
  74.                                         case 0x0e:
  75.                                         P2=0xdf;
  76.                                         break;
  77.                                         case 0x0f:
  78.                                         P2=0xbf;
  79.                                         break;
  80.                                 }
  81.                                 while(temp!=0xff)                           
  82.                                 {
  83.                                         temp=P1;
  84.                                 }
  85.                                 P2=0xff;
  86.                                 P3=0xff;
  87.                         }
  88.         
  89.                 }
  90.         }
  91. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2018-7-10 09:52 | 只看该作者
你的BCD编码器是什么类型的?怎么接的(低电位有效与否)?

“ P1=0xff;”为什么要注释掉?读端口状态之前,要先向端口锁存器写“1”(置高电平)。
回复

使用道具 举报

板凳
ID:7485 发表于 2018-7-10 09:54 | 只看该作者
本帖最后由 ahshmj 于 2018-7-10 10:03 编辑

其他的地方没有看完,你应该把重点说出来,这么长的程序一点点的分析一点点的看,还真没那么多的功夫。
回复

使用道具 举报

地板
ID:368362 发表于 2018-7-10 10:15 | 只看该作者
BCD来自红外接收,高电平有效,经反向后为送P1口低4位
回复

使用道具 举报

5#
ID:368362 发表于 2018-7-10 10:18 | 只看该作者
注释掉P1=0xff,只是要看看什么结果,应该恢复
回复

使用道具 举报

6#
ID:368412 发表于 2018-7-10 10:25 | 只看该作者
可以找个模拟软件试一下
回复

使用道具 举报

7#
ID:231042 发表于 2018-7-10 11:04 | 只看该作者
感觉没有什么问题,你的现象出现在哪里?
回复

使用道具 举报

8#
ID:368588 发表于 2018-7-10 11:49 | 只看该作者
说重点,没时间一点点分析
回复

使用道具 举报

9#
ID:368362 发表于 2018-7-10 15:04 | 只看该作者
读不出数据
回复

使用道具 举报

10#
ID:368362 发表于 2018-7-10 15:07 | 只看该作者
调试时总是在1,2,3循环
  P3=0xff;
        P2=0xff;
//        P1=0xff;
        while(1)
        {
               
1               P3=0xff;
  2              P2=0xff;
    3            P1=0xff;        
                temp=P1;
                if(temp!=0xff)
回复

使用道具 举报

11#
ID:368362 发表于 2018-7-11 07:47 | 只看该作者
还是用不了,拜托高手指点
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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