原创 51单片机扫地机器人程序与Proteus仿真原理图

2023-4-27 16:11 1428 9 9 分类: MCU/ 嵌入式
仿真原理图如下
 

电路原理图如下:


单片机源程序如下:
  1. /**************************************************************************************
  2. 实现现象:下载程序后数码管显示0,按下矩阵按键上的按键显示对应的数字
  3.                         S1-S4:0-3
  4.                         S5-S8:4-7
  5.                         S9-S12:8-B
  6.                         S13-S16:C-F。
  7. 注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。                                                                                                                                                                  
  8. ***************************************************************************************/

  9. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  10. #include "lcd.h"

  11. typedef unsigned int u16;          //对数据类型进行声明定义
  12. typedef unsigned char u8;
  13. u16 i=0;
  14. u16 k=0;


  15. sbit D1=P2^0;
  16. sbit D2=P2^1;
  17. sbit D3=P2^2;
  18. sbit D4=P2^3;
  19. sbit D5=P2^4;
  20. sbit D6=P2^5;

  21. sbit CW1=P3^0;
  22. sbit CW2=P3^1;
  23. sbit CW3=P3^2;
  24. sbit CL1=P3^3;
  25. sbit CL2=P3^4;
  26. sbit CL3=P3^5;
  27. sbit CL=P3^6;
  28. sbit ST=P3^7;



  29. void delay(u16 i)
  30. {
  31.         while(i--);        
  32. }
  33. MOTO_INIT()
  34. {
  35.    D1=1;
  36.    D2=0;
  37.    D3=1;
  38.    D4=0;
  39.    D5=1;
  40.    D6=0;
  41.    CW1=1;
  42.    CW2=1;
  43.    CW3=1;
  44. }
  45. void zhi(void)
  46. {
  47. CW1=1;
  48. CW2=1;
  49. }

  50. void zuo(void)
  51. {
  52. CW1=0;
  53. CW2=1;
  54. }
  55. void you(void)
  56. {
  57. CW1=1;
  58. CW2=0;
  59. }
  60. void tui(void)
  61. {
  62. CW1=0;
  63. CW2=0;
  64. }



  65. void InitTimer0(void)
  66. {
  67.     TMOD = 0x11;            // 设置定时器0.1工作在
  68.     TH0 = 0x3C;
  69.     TL0 = 0x0B0;
  70.     TH1 = 0x0FF;
  71.     TL1 = 0x9C;
  72.     EA = 1;
  73.     ET0 = 1;
  74.     TR0 = 1;
  75.     ET1 = 1;
  76.     TR1 = 1;
  77. }
  78. void Timer0Interrupt(void) interrupt 1
  79. {
  80.     TH0 = 0x3C;               //定时时间
  81.     TL0 = 0x0B0;
  82.         ST=~ST;                                               //ADC0808开始信号脉冲
  83.            CL1=~CL1;                                    //步进1的脉冲
  84.         CL2=~CL2;                                        //步进2的脉冲
  85.         i++;                                                //标志位(控制步进电机3)
  86.         if(i==20)                                        //i=20进入一次
  87.         {CL3=~CL3;i=0;k++;}                        //(0-135) 45d度  k 脉冲计数
  88.         if(k==4)
  89.     {k=0;CW3=~CW3;}                            //掉头
  90. }


  91. void Timer1Interrupt(void) interrupt 3
  92. {
  93.       TH1 = 0x0FF;
  94.       TL1 = 0x9C;
  95.       CL=~CL;
  96. }
  97. void main()
  98. {        

  99. MOTO_INIT();
  100. InitTimer0();
  101.         while(1)
  102.          {
  103.          if(P1>0X84)
  104.          tui();
  105.          if(P1>0X80&&P1<0X84)
  106.          zuo();
  107.          else
  108.          zhi();
  109.      }                                       
  110. }


作者: 小羡, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-4026945.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条