找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机小车程序

[复制链接]
跳转到指定楼层
楼主
ID:340119 发表于 2018-5-28 21:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
献丑了
单片机源程序如下:
  1. #include<reg51.h>
  2. #include <intrins.h>

  3. sbit Sound=P0^0;//嘀嘀嘀
  4. sbit car1=P0^1;
  5. sbit car2=P0^2;
  6. sbit car3=P0^3;
  7. sbit car4=P0^4;

  8. sbit LEDARRAY_CLK = P0^5;
  9. sbit LEDARRAY_LE  = P0^6;
  10. sbit LEDARRAY_DI  = P0^7;//点阵

  11. bit flag;
  12. unsigned char led_8;
  13. unsigned char js;
  14. unsigned char code  xin[]={0x0C,0x1E,0x3E,0x7C,0x7C,0x3E,0x1E,0x0C};
  15. unsigned char code  jin[]={0x00,0x00,0x42,0x82,0x7e,0x02,0x02,0x00};
  16. unsigned char code xiao[]={0x84,0x42,0x24,0x18,0x18,0x24,0x42,0x80};
  17. unsigned char code qian[]={0x00,0x1e,0x21,0x21,0x31,0x21,0x5e,0x40};
  18. unsigned char code black[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

  19. void delay(unsigned char t)
  20. {
  21.         unsigned  int m;
  22.   for(;t>0;t--)
  23.                 for(m=5000;m>0;m--);

  24. }
  25. /*-------------函数声明-----------*/
  26. void sport(unsigned char sport);
  27. void Send_Byte( unsigned char dat);
  28. void disply(unsigned char code *p);
  29. /*=*=*=*=*=*=*=*=*=*=*主--函--数=*=*=*=*=*=*=*=*=*=*=*/
  30. void main ()
  31. {
  32.          unsigned char LED;
  33.          TMOD=0X20; //设置定时器1工作方式2,八位自动重装
  34.    TH1=0Xfd;  
  35.    TL1=0Xfd; //设定9600波特率
  36.    TR1=1;         //启动定时器
  37.    REN=1;         //允许串行口接收控制位
  38.    SM0=0;       
  39.    SM1=1;         //设定串行口工作方式1
  40.    EA=1;     //总中断控制位打开  
  41.    ES=1;     //串行口中断控制位打开       
  42.         Sound=1;
  43.         car1=0;
  44.         car2=0;
  45.         car3=0;
  46.         car4=0;
  47.   led_8=0x1f;
  48. flag=0;LED=1;
  49.   while(1)
  50.   {       
  51.                 L:
  52.           if(flag==1)
  53.                 {
  54.                  LED=~LED;
  55.                  disply(black);
  56.                  P1=0Xff;
  57.                  flag=0;
  58.                 }
  59.                 if(LED==1)
  60.                 {
  61.                  disply(xin);if(flag==1) goto L;
  62.                  disply(jin);if(flag==1) goto L;  
  63.                  disply(xiao);if(flag==1) goto L;  
  64.                  disply(qian);
  65.                 }               
  66.   }//while
  67. }//main

  68. /*=================串口中断程序=================*/
  69. void serial() interrupt 4
  70. {
  71.    RI=0;               //清零,准备接收数据
  72.    js=SBUF;        //接收数据
  73.    sport(js);      //运动控制
  74. }
  75. /*=====================================================
  76.           ---------运动调节函数---------
  77. =====================================================*/
  78. void sport(unsigned char sport)
  79. {
  80.   switch(sport)
  81.   {
  82.                 case 0x41: car1=1;car2=0;car3=0;car4=1; break;/////////////方向键 A       
  83.           case 0x42: car1=0;car2=1;car3=1;car4=0; break;/////////////方向键 B
  84.                
  85.                 case 0x43: car1=1;car2=1;car3=1;car4=1; break;/////////////暂停键 C

  86.                 case 0x44: car1=0;car2=1;car3=0;car4=1; break;/////////////后退键 D       
  87.                 case 0x45: car1=1;car2=0;car3=1;car4=0; break;/////////////前进键 E

  88.                 case 0x46: Sound=1;                     break;/////////////喇叭响 F
  89.                 case 0x47: Sound=0;                     break;/////////////喇叭静 G
  90.                
  91.                 case 0x48: flag=1;                      break;/////////////开灯   H
  92.           default: break;
  93.   }
  94.        
  95. }

  96. /*=====================================================
  97.           ---------点阵发送一个字节---------
  98. =====================================================*/
  99. void Send_Byte( unsigned char dat)
  100. {
  101.         unsigned char i;
  102.         LEDARRAY_LE = 0;
  103.         _nop_();       
  104.         LEDARRAY_LE = 0;
  105.         _nop_();

  106.         for( i = 0 ; i < 8 ; i++ )
  107.         {
  108.                 if( dat&0x01 )
  109.                 {
  110.                         LEDARRAY_DI = 1;       
  111.                 }
  112.                 else
  113.                 {
  114.                         LEDARRAY_DI = 0;
  115.                 }
  116.                
  117.                 LEDARRAY_CLK = 1;                                //上升沿发送数据
  118.                                                 _nop_();
  119.                 LEDARRAY_CLK = 0;
  120.                                                 _nop_();
  121.                                
  122.                 dat >>= 1;                       
  123.         }               
  124. }

  125. void disply(unsigned char code *p)
  126. {
  127.         unsigned char *led;
  128.         unsigned char temp;
  129.         unsigned int  i;
  130.         unsigned char j;
  131.         temp = 0x7f;
  132.        
  133.         for(i=1800;i>0;i--)
  134.         {
  135.          led=p;
  136.          for(j=0;j<8;j++)
  137.          {
  138.                 Send_Byte(temp);        //列选择
  139.                 Send_Byte(*led);        //行数据
  140.          
  141.                 LEDARRAY_LE = 1;                        //锁存数据
  142.                 _nop_();
  143.                 LEDARRAY_LE = 0;
  144.                 _nop_();
  145.                
  146.                 temp=_cror_(temp,1);
  147.                 led++;
  148.          }
  149.          
  150.          if(i==1800||i==1600||i==1400||i==1200||i==1000||i==800||i==600||i==400||i==200)
  151.          {
  152.                  led_8=_cror_(led_8,1);
  153.                  P1=led_8;
  154.          }
  155.         }
  156. }
复制代码

所有资料51hei提供下载:
_QQ_小车.rar (113.94 KB, 下载次数: 4)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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