找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求51单片机C语言PC机串口通讯工具发送一个串口数据:70,然后收到串口数据:当前...

[复制链接]
跳转到指定楼层
楼主
ID:274871 发表于 2022-12-5 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "STC15.h"
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. #define BAUD 9600
  6. #define FOSC 11059200UL

  7. sbit Yellow=P3^6;
  8. sbit Write=P3^3;
  9. sbit _12V_BOOST_EN=P1^5;
  10. sbit _12v_DRE=P1^1;
  11. sbit _5V_BRE=P1^2;


  12. sbit LED1=P0^0;
  13. sbit LED2=P0^1;
  14. sbit LED3=P0^2;
  15. sbit LED4=P0^3;


  16. sbit Key1=P1^4;


  17. uchar PWM_Y=0;
  18. uchar PWM_W=0;

  19. uchar number=255;
  20. uchar mode=1;
  21. bit flag=0;
  22. bit flag_cd=0;



  23. void IO_init()
  24. {


  25.         P0M1 = 0;        P0M0 = 0;
  26.   P1M1 &= 0xff;        P1M0 |= 0x00;




  27.         P2M1 = 0;        P2M0 = 0;
  28.         P3M1 = 0;        P3M0 = 0;
  29.         P4M1 = 0;        P4M0 = 0;
  30.         P5M1 = 0;        P5M0 = 0;
  31.         P6M1 = 0;        P6M0 = 0;
  32.         P7M1 = 0;        P7M0 = 0;
  33. }


  34. void _MCU_()
  35. {
  36.         if(_12v_DRE==0||_5V_BRE==0)
  37.         {
  38.                 _12V_BOOST_EN=1;
  39.         }else{_12V_BOOST_EN=0;}



  40. }


  41. void Time_init()
  42. {


  43.         AUXR &= 0x7F;
  44.         TMOD &= 0xF0;
  45.         TMOD |= 0x01;
  46.         TL0 = 0x9C;
  47.         TH0 = 0xFF;
  48.         TF0 = 0;
  49.         TR0 = 1;

  50.         ET0=1;
  51. }


  52. void Uart_init()
  53. {
  54.         SCON=0x50;
  55.         T2L=(65536-(FOSC/4/BAUD));
  56.   T2H=(65536-(FOSC/4/BAUD))>>8;
  57.   AUXR=0x14;
  58.   AUXR|=0x01;
  59.   ES=1;
  60.   EA=1;
  61. }


  62. void send(uchar dat)
  63. {
  64.         ES=0;

  65.         SBUF=dat;
  66.         while(TI==0);
  67.         TI=0;

  68.         ES=1;
  69. }


  70. void receive()
  71. {
  72.         if(number!=255)
  73.         {
  74.                 send(number);

  75.         /*        send(number/100+0x30);
  76.                 send(number%100/10+0x30);
  77.                 send(number%10+0x30);
  78.                 send('\n');*/
  79.                 switch(number)
  80.                 {
  81.                         case 101:mode=1;
  82.                                          PWM_Y=0;
  83.                                          PWM_W=0;
  84.                                          number=255;
  85.                                          break;
  86.                         case 102:mode=2;
  87.                                          PWM_Y=25;
  88.                                          PWM_W=25;
  89.                                          number=255;
  90.                                          break;
  91.                         case 103:mode=3;
  92.                                          PWM_Y=0;
  93.                                          PWM_W=80;
  94.                                          number=255;
  95.                                          break;
  96.                         case 104:mode=4;
  97.                                          PWM_Y=80;
  98.                                          PWM_W=0;
  99.                                          number=255;
  100.                                          break;
  101.                         case 105:if(mode==2)
  102.                                          {
  103.                                                 flag=!flag;
  104.                                          }
  105.                                          number=255;
  106.                                          break;
  107.                         default: switch(mode)
  108.                                          {
  109.                                                 case 2:        if(flag==0)
  110.                                                                 {
  111.                                                                         PWM_Y=number;
  112.                                                                         PWM_W=number;
  113.                                                                 }
  114.                                                                 else
  115.                                                                 {
  116.                                                                         PWM_Y=100-number;
  117.                                                                         PWM_W=number;
  118.                                                                 }
  119.                                                                 break;
  120.                                                 case 3:        PWM_Y=0;
  121.                                                                 PWM_W=number;
  122.                                                                 break;
  123.                                                 case 4: PWM_Y=number;
  124.                                                                 PWM_W=0;
  125.                                                                 break;
  126.                                          }
  127.                                          number=255;
  128.                                          break;
  129.                 }
  130.         }
  131. }


  132. void led_cl()
  133. {
  134.         static uint i=0;
  135.         switch(mode)
  136.         {
  137.                 case 1:        LED1=0;LED2=1;LED3=1;LED4=1;
  138.                                 break;
  139.                 case 2:        i++; if(i>60000) {i=0;}
  140.                                 if(flag==0)
  141.                                 {
  142.                                         LED1=1;LED2=0;LED3=1;LED4=1;
  143.                                 }
  144.                                 else
  145.                                 {
  146.                                         if(i<30000) {LED1=1;LED2=0;LED3=1;LED4=1;}
  147.                                         else                 {LED1=1;LED2=1;LED3=1;LED4=1;}
  148.                                 }
  149.                                 break;
  150.                 case 3:        LED1=1;LED2=1;LED3=0;LED4=1;
  151.                                 break;
  152.                 case 4:        LED1=1;LED2=1;LED3=1;LED4=0;
  153.                                 break;
  154.         }
  155. }


  156. void delay(uint time)
  157. {
  158.         uint x,y;
  159.         for(x=time;x>0;x--)
  160.         for(y=110;y>0;y--);
  161. }


  162. void key_cl()
  163. {
  164.         unsigned long j=0;
  165.         static bit keybuf1=1;
  166.         static bit backup1=1;
  167.         keybuf1=Key1;
  168.         if(keybuf1!=backup1)
  169.         {
  170.                 delay(200);
  171.                 if(keybuf1==Key1)
  172.                 {
  173.                         if(backup1==1)
  174.                         {
  175.                                 while(Key1==0)
  176.                                 {
  177.                                         j++;
  178.                                         led_cl();
  179.                                         if(j>=50000)
  180.                                         {
  181.                                                 j=0;
  182.                                                 flag_cd=1;
  183.                                                 break;
  184.                                         }
  185.                                 }
  186.                                 if(flag_cd==0)
  187.                                 {
  188.                                         mode++;        if(mode>4) {mode=1;}
  189.                                         send(mode+100);
  190.                                         switch(mode)
  191.                                         {
  192.                                                 case 1:        PWM_Y=0;
  193.                                                                 PWM_W=0;
  194.                                                                 break;
  195.                                                 case 2:        PWM_Y=25;
  196.                                                                 PWM_W=25;
  197.                                                                 break;
  198.                                                 case 3:        PWM_Y=0;
  199.                                                                 PWM_W=80;
  200.                                                                 break;
  201.                                                 case 4:        PWM_Y=80;
  202.                                                                 PWM_W=0;
  203.                                                                 break;
  204.                                         }
  205.                                 }
  206.                                 else
  207.                                 {
  208.                                         mode=1;
  209.                                         PWM_Y=0;
  210.                                         PWM_W=0;
  211.                                 }
  212.                                 j=0;
  213.                                 flag_cd=0;
  214.                         }
  215.                         backup1=keybuf1;
  216.                 }
  217.         }
  218. }

  219. void main()
  220. {
  221.         IO_init();
  222.   Time_init();
  223.         Uart_init();
  224.         send(mode+100);
  225.         while(1)
  226.         {
  227.                 _MCU_();
  228.                 receive();
  229.                 led_cl();
  230.                 key_cl();
  231.         }
  232. }


  233. void Timer0_ISR (void) interrupt 1
  234. {
  235.         static int a=0;
  236.         TL0 = 0x9C;
  237.         TH0 = 0xFF;
  238.         if(PWM_Y<=a)          {Yellow=0;}
  239.         else                         {Yellow=1;}
  240.         if(PWM_W<=a)          {Write=0;}
  241.         else                         {Write=1;}
  242.         a++; if(a>100) {a=0;}
  243. }


  244. void uart() interrupt 4
  245. {
  246.         if(RI==1)
  247.         {
  248.                 RI=0;
  249.                 number=SBUF;
  250.         }
  251.         if(TI==1)
  252.         {
  253.                 TI=0;
  254.         }
  255. }
复制代码


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

使用道具 举报

沙发
ID:274871 发表于 2022-12-6 11:00 | 只看该作者
单片机C语言PC机串口通讯工具发送一个串口数据:70,然后收到串口数据:显示当前LED的模式
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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