找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机Proteus串口仿真+虚拟终端显示 源程序

[复制链接]
跳转到指定楼层
楼主
晶振11.0592M,波特率9600,用了虚拟终端,打算加上  虚拟串口,嘿嘿


单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. ///共阳数码管 0-9 P 灭
  5. uchar code smdm[]=
  6. {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xFF}; //
  7. #define sm_dm  P0
  8. sbit Led=P3^7;
  9. sbit Key_set=P3^2;
  10. uchar code hello_world[]="Hello World ";
  11. uchar Dat_rxd;
  12. uchar work_mode=0;
  13. /******************************************************************/
  14. void DelayUs(unsigned char us)//delay us
  15. {
  16.                  unsigned char uscnt;
  17.                  uscnt=us>>1;        /*12MHz频率*/
  18.                  while(--uscnt);
  19. }
  20. /******************************************************************/
  21. /*                    毫秒函数声明                                */
  22. /******************************************************************/
  23. void DelayMs(unsigned int ms)
  24. {
  25. while(--ms)
  26.          {
  27.                  DelayUs(250);
  28.                  DelayUs(250);
  29.                  DelayUs(250);
  30.                  DelayUs(250);
  31.          }
  32. }

  33. //******************串口初始化函数****************************//
  34. void Com0_Init(void)
  35. {
  36. EA=1;        //开总中断
  37. ES=1;        //允许串口中断
  38. TMOD=0x20;   //定时器T1,在方式3中断产生波特率
  39. SCON=0x50;   
  40. TH1=0xfd;    //波特率设置为9600(晶振12M)
  41. TL1=0xfd;
  42. TR1=1;       //开定时器T1运行控制位
  43. }
  44. ///////////////////////
  45. void Com0(void) interrupt 4 using 1
  46. {
  47.    if(RI)                          
  48.   {
  49.       Led=~Led;        
  50.           Dat_rxd=SBUF;                 //串口接收
  51.           Dat_rxd=Dat_rxd-0x30;
  52.           sm_dm=smdm[Dat_rxd];
  53.       RI=0;
  54.   }
  55. }
  56. void send_string(uchar *p)
  57. {
  58.     while(*p!= '\0')
  59.         {
  60.           SBUF=*p;
  61.           p++;
  62.           while(TI==0);
  63.           TI=0;
  64.         }
  65. }
  66. //////////////////////
  67. void main(void)
  68. {
  69.         ////////////
  70.         Com0_Init();
  71.     while(1)
  72.         {
  73.             if(~Key_set)
  74.                         {
  75.                         DelayMs(3);
  76.                         if(~Key_set)
  77.                            {
  78.                                  work_mode=1;                                                                                                                                                                 
  79.                              while(~Key_set);
  80.                            }        
  81.                         }
  82.                 switch(work_mode)
  83.                  {
  84.                         case 0:        break;
  85.                         case 1: Led=~Led;
  86.                                        send_string(hello_world);
  87.                                 work_mode=0;
  88.                     break;                                       
  89.                  }
  90.         }
  91. }
复制代码

仿真代码51hei附件下载:
仿真代码.7z (308.84 KB, 下载次数: 123)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1041116 发表于 2023-6-14 13:30 | 只看该作者
请问,protues串口能发送浮点型小数吗
回复

使用道具 举报

板凳
ID:161164 发表于 2023-6-14 14:59 | 只看该作者
Cgy030139 发表于 2023-6-14 13:30
请问,protues串口能发送浮点型小数吗

不能
只能单字节发送
回复

使用道具 举报

地板
ID:1041116 发表于 2023-6-14 19:17 | 只看该作者
lkc8210 发表于 2023-6-14 14:59
不能
只能单字节发送

明白了,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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