找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 759|回复: 1
收起左侧

Proteus仿真 虚拟终端思路求教

[复制链接]
ID:893765 发表于 2021-6-19 21:56 | 显示全部楼层 |阅读模式
如下图所示,P1口接8个按钮,用来控制P2口的8位LED发光管,按下某按钮,对应发光管点亮,再按下该按钮,灯灭,每次有键按下时,其键号通过串行口发送给虚拟终端。
思路求教
2.jpg
回复

使用道具 举报

ID:914633 发表于 2021-6-27 00:36 | 显示全部楼层
  1. #include "reg52.h"
  2. #include "led.h"

  3. void delay(uint i)
  4. {
  5.         while(i--);       
  6. }
  7. void UartConfig()  
  8. {
  9.     TMOD|=0x20;      //设置计数器1的工作方式2
  10.     TH1=0xfd; TL1=0xfd;                //设置计数器1的初值,决定波特率9600
  11.     PCON=0x00;      // 波特率倍增0x00不加倍
  12.     SCON=0x50;                //设置工作方式1 开启接受允许
  13.     EA=1;                    //开启总中断
  14.     ES=1;                        //开启串口接受中断
  15.     TR1=1;                        //计数器1开始运行
  16. }
  17. void sendChar(uchar tem)
  18. {
  19.     SBUF=tem;                  //接收到的数据放入发送缓存器发送
  20.     while(!TI);       //等待发送数据完成
  21.     TI=0;                          //清除发送完成标志位
  22. }
  23. void keypros()
  24. {
  25.         if(KEY1==0)                  
  26.         {       
  27.                 delay(50);   
  28.                 if(KEY1==0)         
  29.                 {
  30.                    led1=~led1;
  31.                    sendChar('1');
  32.                 }
  33.                 while(!KEY1);
  34.         }
  35.         else if(KEY2==0)                  
  36.         {       
  37.                 delay(50);   
  38.                 if(KEY2==0)         
  39.                 {
  40.                    led2=~led2;
  41.                    sendChar('2');
  42.                 }
  43.                 while(!KEY2);
  44.         }
  45.         else if(KEY3==0)                  
  46.         {       
  47.                 delay(50);   
  48.                 if(KEY3==0)         
  49.                 {
  50.                    led3=~led3;
  51.                    sendChar('3');
  52.                 }
  53.                 while(!KEY3);
  54.         }
  55.         else if(KEY4==0)                  
  56.         {       
  57.                 delay(50);   
  58.                 if(KEY4==0)         
  59.                 {
  60.                    led4=~led4;
  61.                    sendChar('4');
  62.                 }
  63.                 while(!KEY4);
  64.         }
  65.         else if(KEY5==0)                  
  66.         {       
  67.                 delay(50);   
  68.                 if(KEY5==0)         
  69.                 {
  70.                    led5=~led5;
  71.                    sendChar('5');
  72.                 }
  73.                 while(!KEY5);
  74.         }
  75.         else if(KEY6==0)                  
  76.         {       
  77.                 delay(50);   
  78.                 if(KEY6==0)         
  79.                 {
  80.                    led6=~led6;
  81.                    sendChar('6');
  82.                 }
  83.                 while(!KEY6);
  84.         }
  85.         else if(KEY7==0)                  
  86.         {       
  87.                 delay(50);   
  88.                 if(KEY7==0)         
  89.                 {
  90.                    led7=~led7;
  91.                    sendChar('7');
  92.                 }
  93.                 while(!KEY7);
  94.         }
  95.         else if(KEY8==0)                  
  96.         {       
  97.                 delay(50);   
  98.                 if(KEY8==0)         
  99.                 {
  100.                    led8=~led8;
  101.                    sendChar('8');
  102.                 }
  103.                 while(!KEY8);
  104.         }
  105.                
  106. }
  107. void main()
  108. {
  109.    UartConfig();
  110.    P2=0xff;
  111.    while(1){keypros();}

  112. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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