找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机A/D转换及串行通信程序

[复制链接]
跳转到指定楼层
楼主
ID:1033507 发表于 2022-6-9 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求:
1.硬件选择通道,转换结果显示在LED上
2.利用串口助手与单片机就行串行通信,收到大写字母转换成小写字母发回,反之亦然,但数字不变。

单片机源程序如下:
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. #include <intrins.h>
  4. #include <absacc.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7.         
  8. uchar D,VAR,H4,L4;

  9. uchar cod[] = {0xC0, 0xF9, 0xA4, 0xB0,
  10.                                  0x99, 0x92, 0x82, 0xF8,
  11.                                  0x80, 0x90, 0x88, 0x83,
  12.                                  0xC6, 0xA1, 0x86, 0x8E
  13.                                  }; //16进制
  14.                                                                                                                                                   
  15. void delay(int n)
  16. {
  17.         int i,j;
  18.         for(i=n;i>0;i--)
  19.         {
  20.                 for(j=28;j>0;j--);
  21.         }
  22. }

  23. void display()  
  24. {
  25.          H4=D/16;
  26.          L4=D%16;
  27.         
  28.          P2=cod[L4];
  29.          P1=0xfe;
  30.          delay(1);
  31.          P2=0xff;
  32.          delay(10);
  33.         
  34.          P2=cod[H4];
  35.          P1=0xfd;
  36.          delay(1);
  37.          P2=0xff;
  38.          delay(10);
  39. }

  40. void main()
  41. {
  42.         while(1)
  43.         {
  44.                 XBYTE[0x8000]=0x00;
  45.                 delay(50);
  46.                 D=XBYTE[0x8000];
  47.                 display();
  48.         }
  49.                
  50. }
复制代码
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. #include <intrins.h>
  4. #include <absacc.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7.         
  8. uchar D,VAR,H4,L4;

  9. uchar cod[] = {0xC0, 0xF9, 0xA4, 0xB0,
  10.                          0x99, 0x92, 0x82, 0xF8,
  11.                          0x80, 0x90, 0x88, 0x83,
  12.                          0xC6, 0xA1, 0x86, 0x8E
  13.                           }; //16进制
  14.                                                                                                                                                   
  15. void delay(int n)
  16. {
  17.         int i,j;
  18.         for(i=n;i>0;i--)
  19.         {
  20.                 for(j=28;j>0;j--);
  21.         }
  22. }

  23. void display()  
  24. {
  25.          H4=D/16;
  26.          L4=D%16;
  27.          P2=cod[L4];
  28.          P1=0xfe;
  29.          delay(1);
  30.          P2=0xff;
  31.          delay(10);
  32.          P2=cod[H4];
  33.          P1=0xfd;
  34.          delay(1);
  35.          P2=0xff;
  36.          delay(10);
  37. }


  38. void main()
  39. {
  40.         PCON=0x80;//SMOD置1,波特率加倍
  41.         SCON=0x50;//设置为工作方式1:SCON:SMO SM1 SM2 REN TB8 RB8 TI(0101 0000)
  42.         TMOD=0x20;//设置计数器工作方式2
  43.         TH1=0xfa;//计数器赋初值
  44.         TL1=0xfa;
  45.         TR1=1;//打开计数器
  46.         
  47.         while(1)
  48.         {
  49.                 while(!RI){display();}
  50.                 D=SBUF;
  51.                 VAR=D;
  52.                 RI=0;//清除接收中断标志位
  53.                 display();
  54.                 if(0x40<D&&D<0x5b){VAR=D+0x20;}//大写变小写
  55.                 else if(0x60<D&&D<0x7b){VAR=D-0x20;}//小写变大写
  56.                 SBUF=VAR;
  57.                 while(!TI){display();}
  58.                 TI=0;//清除发送完成标志位
  59.         }
  60.                
  61. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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