找回密码
 立即注册

QQ登录

只需一步,快速开始

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

哪位大佬知道我这个单片机程序为什么现象总是错的啊?

[复制链接]
跳转到指定楼层
楼主
ID:834174 发表于 2020-10-25 02:03 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg52.h>
  2. #include<intrins.h>

  3. //#define _nop() _asm nop _endasm

  4. typedef unsigned char uchar;
  5. typedef unsigned int uint;
  6. sbit RX = P2^0;//接收
  7. sbit TX = P2^1;//发射
  8. uchar flag;
  9. uchar date_distance[5];//距离
  10. uchar kk;


  11. sbit duan = P2^6;//段选
  12. sbit wei = P2^7;//位选




  13. uchar duan1[] = {0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
  14. uchar wei1 [] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

  15. // void delay_10us(uchar i)
  16. // {
  17. // while(i--);
  18. // }

  19. void delay_ms(uint c)
  20. {
  21. uint a,b;
  22.          for(;c>0;c--)
  23.          for(b=102;b>0;b--)
  24.          for(a=3;a>0;a--);
  25. }

  26. void init_wei(uchar i)
  27. {
  28.          P0 = 0xff;
  29.    wei = 1;
  30.          P0 = wei1[i] ;
  31.          wei = 0;
  32. }

  33. void init_timer()//         定时器初始化
  34. {
  35. TMOD = 0X11;//         定义定时器定时类型
  36.          TH0 = 0x00;//         定时器0高位
  37.          TL0 = 0x00;//         定时器0低位
  38.          EA = 1;//         单片机中断总开关
  39.          ET0 = 1;//         允许T0溢出中断
  40.          
  41.          
  42. TH1 = 0xf8;//         定时器1高位
  43. TL1        = 0xCD;//         定时器1低位
  44.          ET1 = 1;//         允许T1溢出中断
  45.          TR1 = 1;//         定时器1的运行控制位
  46. }

  47. void count_distance()//         距离数
  48. {
  49.          
  50. uint distance = (TH0*256+TL0*1)*0.18;//         通过时间算距离
  51.          TH0 = 0;
  52.          TL0 = 0;
  53. //         计时器归零
  54.          if(distance>=4000||distance < 20)
  55.          {
  56.          flag = 1;
  57.          }
  58.          else
  59.          {
  60.            date_distance[1] = distance%10000/1000;
  61.                  date_distance[2] = distance%1000/100;
  62.                  date_distance[3] = distance%100/10;
  63.                  date_distance[4] = distance%10/1;
  64.          }
  65. }
  66. void display()//         显示
  67. {
  68. uchar i;
  69.          if(flag==1)
  70.          {
  71.          flag = 0;
  72.                  date_distance[1] = 14;
  73.                  date_distance[2] = 14;
  74.                  date_distance[3] = 14;
  75.                  date_distance[4] = 14;
  76.          }
  77.          count_distance();
  78.          for(i = 1;i<=4;i++)
  79.          {
  80.                
  81.         init_wei(i);
  82.                  duan = 1;
  83.                  if(i==1)
  84.                          P0 = duan1[date_distance[i]]|0x80;
  85.                  else
  86.                          P0 =duan1[date_distance[i]];
  87.                  delay_ms(1);
  88.                  duan = 0;
  89.                  P0 = 0x00;
  90.          }
  91.          
  92. }

  93. void main()
  94.          {
  95. RX = 0;
  96.                  TX=0;
  97.          init_timer();//定时器初始化
  98.          while(1)
  99.          {
  100.                  TR1=1;
  101.          while(!RX);//                 收到信号RX为零
  102.                  TR0 = 1;
  103.                  
  104.                  while(RX);
  105.                  TR0 = 0;
  106.                  count_distance();
  107.          }
  108. }

  109.          
  110.          void timer0() interrupt 1
  111.          {
  112.          flag = 1;
  113.          }
  114.          void timer1() interrupt 3
  115.         {
  116.          TR1 = 0;
  117.          TH1 = 0xf8;
  118. //                0xf8;
  119.                 TL1 =  0xcd;
  120. //    0xcd;
  121.          
  122.          kk ++;
  123.          display();
  124.          if(kk>100)
  125.          {
  126.          kk = 0;
  127.                  TX = 1;
  128.                 _nop_();_nop_();_nop_();_nop_();
  129.                  _nop_();_nop_();_nop_();_nop_();
  130.                  _nop_();_nop_();_nop_();_nop_();
  131.                  _nop_();_nop_();_nop_();_nop_();
  132.                  TX = 0;
  133.          }
  134.          TR1 = 1;
  135. }
复制代码

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

使用道具 举报

沙发
ID:382454 发表于 2020-10-26 09:42 | 只看该作者
没有人会静下心来看你这些代码的,多蛋痛,你要问部题,得发问题的重点。
回复

使用道具 举报

板凳
ID:833190 发表于 2020-10-26 17:38 | 只看该作者
你设置的收到信号RX为零,前面初始RX是零?不是应该初始默认是没接收到信号吗。
回复

使用道具 举报

地板
ID:342954 发表于 2020-10-26 17:54 | 只看该作者
问问题,不说重点,也没有人跟你回答
回复

使用道具 举报

5#
ID:834174 发表于 2020-10-26 19:32 来自手机 | 只看该作者
univers 发表于 2020-10-26 09:42
没有人会静下心来看你这些代码的,多蛋痛,你要问部题,得发问题的重点。

下次注意
回复

使用道具 举报

6#
ID:834174 发表于 2020-10-26 19:35 来自手机 | 只看该作者
i_could_have 发表于 2020-10-26 17:38
你设置的收到信号RX为零,前面初始RX是零?不是应该初始默认是没接收到信号吗。

我这个是要外接超声测距模块的,当发射出去的超声波反弹回来被检测到时RX就会发生变化。
回复

使用道具 举报

7#
ID:834174 发表于 2020-10-26 19:36 来自手机 | 只看该作者
hejianmin 发表于 2020-10-26 17:54
问问题,不说重点,也没有人跟你回答

第一次搞,我觉得可能是我的主程序出问题了,怎么试都不行。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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