找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9393|回复: 6
收起左侧

一个电脑控制单片机通讯程序分享

[复制链接]
ID:306996 发表于 2018-4-12 22:36 | 显示全部楼层 |阅读模式
电脑控制单片机视频演示:
0.jpg

有需要直接下载就可以了,附件里面还有视频演示,和下位机单片机的源码

0.jpg

单片机源程序如下:
  1. /**********************单片机与PC机通讯例程************************
  2. *           STC89C52RC+
  3. *                  编写:颜
  4. *                 晶振:11.0592MHZ
  5. ******************************************************************/

  6. #include <reg52.h>
  7. #define jingzhen     11059200UL                         /*使用22.1184M晶体*/         
  8. #define botelv   9600UL                     /*波特率定义为9600*/
  9. volatile unsigned char sending;

  10. #define uchar unsigned char                                                
  11. #define uint  unsigned int
  12. #define ulong unsigned long

  13. uchar code LED_L[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
  14. uchar code LED_R[] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};
  15. uchar code LED_1[] = {0xe7, 0xe7, 0xdb, 0xdb, 0xbd, 0xbd, 0x7e, 0x7e};
  16. uchar code LED_2[] = {0x7e, 0x7e, 0xbd, 0xbd, 0xdb, 0xdb, 0xe7, 0xe7};
  17. #define   u16   unsigned int
  18. #define   u8    unsigned char


  19. //流水灯
  20. u16 LED_Delay = 0;
  21. u8 KeyFlag = 0;
  22. u8 LEDState = 0;


  23. u8 Data = 0;
  24. u8 Flag = 0;


  25. void delay(unsigned char i)
  26. {
  27.         unsigned char j,k;
  28.         for(j=i;j>0;j--)
  29.                 for(k=90;k>0;k--);
  30. }
  31. void init(void)                                //串口初始化
  32. {
  33.          EA=0; //暂时关闭中断
  34.          TMOD&=0x01;  //定时器0工作在16位模式
  35.          TMOD|=0x20;    //定时器1工作在模式2,自动重装模式
  36.          SCON=0x50;     //串口工作在模式1
  37.          TH1=256-jingzhen/(botelv*12*16);  //计算定时器重装值
  38.          TL1=256-jingzhen/(botelv*12*16);
  39.          PCON|=0x80;    //串口波特率加倍
  40.          ES=1;         //串行中断允许
  41.          TR1=1;        //启动定时器1
  42.          REN=1;        //允许接收
  43.          //定时器0
  44.          TH0 = (65535 - 5000) >> 8;                                                                                                                   //写入定时器0初值
  45.          TL0 = (65535 - 5000);
  46.          ET0 = 1;                                                                                                                                                      //打开定时器0中断
  47.          TR0 = 1;                                                                                                                                                           //启动定时器0

  48.          EA=1;         //允许中断
  49. }



  50. void main()
  51. {
  52.         init();
  53.         while(1)
  54.         {               
  55.                 if(Flag != 0)
  56.                 {
  57.                         Flag = 0;
  58.                         KeyFlag = 0;
  59.                         switch(Data)                         //补充用户所需代码
  60.                         {
  61.                                 case 0x00:P0 = 0xfe;break;          //第一个按键
  62.                                 case 0x01:P0 = 0xfd;break;
  63.                                 case 0x02:P0 = 0xfb;break;
  64.                                 case 0x03:P0 = 0xf7;break;
  65.                                 case 0x04:P0 = 0xef;break;
  66.                                 case 0x05:P0 = 0xdf;break;
  67.                                 case 0x06:P0 = 0xbf;break;
  68.                                 case 0x07:P0 = 0x7f;break;
  69.                                 case 0x08:KeyFlag = 1;LEDState = 0;break;                        
  70.                                 case 0x09:KeyFlag = 2;LEDState = 0;break;
  71.                                 case 0x0A:KeyFlag = 3;break;
  72.                                 case 0x0B:KeyFlag = 4;break;
  73.                                 case 0x0C:break;
  74.                                 case 0x0D:break;
  75.                                 case 0x0E:break;
  76.                                 case 0x0F:break;
  77.                         }
  78.             }
  79.                 if(KeyFlag != 0)
  80.                 {
  81.                         switch(LEDState)
  82.                         {
  83.                                 case 0:        
  84.                                 case 2:
  85.                                 case 4:
  86.                                 case 6:
  87.                                 case 8:
  88.                                 case 10:        
  89.                                 case 12:
  90.                                 case 14:                                
  91.                                         LED_Delay = 0;
  92.                                         switch(KeyFlag)
  93.                                         {
  94.                                                 case 1:P0 = LED_L[LEDState/2];break; //流水灯左模式
  95.                                                 case 2:P0 = LED_R[LEDState/2];break; //流水灯右模式
  96.                                                 case 3:P0 = LED_1[LEDState/2];break;
  97.                                                 case 4:P0 = LED_2[LEDState/2];break;
  98.                                         }
  99.                                         LEDState++;                                       
  100.                                 break;
  101.                                 
  102.                                 default:                                       
  103.                                         if(LED_Delay >= 50)
  104.                                         {
  105.                                                 LED_Delay = 0;
  106.                                                 LEDState++;
  107.                                                 if(LEDState == 16)
  108.                                                 {
  109.                                                         LEDState = 0;
  110.                                                 }
  111.                                         }
  112.                                 break;
  113.                         }
  114.                 }
  115.         }
  116. }

  117. void uart(void) interrupt 4                 //串口发送中断
  118. {
  119.          if(RI)    //收到数据
  120.          {
  121.                   RI=0;   //清中断请求
  122. ……………………

  123. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
电脑控制单片机小软件.rar (16.36 MB, 下载次数: 83)
回复

使用道具 举报

ID:46475 发表于 2018-4-13 08:52 | 显示全部楼层
蛮好的源码
回复

使用道具 举报

ID:304623 发表于 2018-4-14 10:42 | 显示全部楼层
请问楼主有上位机源代码吗?求
回复

使用道具 举报

ID:240034 发表于 2018-4-14 19:22 | 显示全部楼层
楼主上位机放出来吗?
回复

使用道具 举报

ID:446639 发表于 2018-12-15 09:37 | 显示全部楼层
楼主上位机放出来吗?
回复

使用道具 举报

ID:465272 发表于 2019-1-9 17:31 | 显示全部楼层
非常好,多谢楼主
回复

使用道具 举报

ID:555887 发表于 2019-6-5 19:21 | 显示全部楼层
楼主你好,我是个学习单片机的新手 嗯就是最近也在学习关于上位机控制51单片机,然后就是希望可以分享一下你的上位机程序嘛?
嗯 万分感谢 ~
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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