串口显示数字文本的巧妙使用方法2进阶版

#include "UART.h"
//预设一个串口条件:8位数据位、1停止位、0效验位、波特率2400
//初始化主要用于设置相关寄存器到我们所需要的模式以及参数
//初始化串口函数
void uart_init(void)
{
 SCON=0x50;      //串口工作在模式1,开启允许接收
 PCON=0x00;      //波特率不加倍//加倍用0x80,需波特率*2
 TMOD=0x20;   //设置T1在模式2:M1=1,M0=0;8位自动重装模式
 TH1=TL1=243; //8位自动重装的意思:TH1用完后下一个周期,TL1自动重装到TH1里面去
 TR1=1;          //开启计数器
 ES=1;          //关闭串口中断
 EA=1;          //关闭总中断
}

//通过串口发送1个字节出去
void uart_seng_byte(unsigned char c) 
//SBUF=c表示将变量c的值赋给SBUF,unsigned char c为8位无符号字符,是一个字节的大小,表示变量c的值是1个字节大小的。
//在内存中间开辟一个1字节的空间,标记为c,把字符A存进去
{
 SBUF=c;      //第一步:发送一个字节出去:写入即可自动发出   
              //参数c容量为1个字节大小的值赋给SBUF用来规定缓存区的容量,防止缓存区溢出
 while(!TI);  //第二步:确认串口8位数据发送结束,TI硬件自动置位
 TI=0;          //第三步:软件复位TI
}

//以文本方式发送C过去,意思就是让串口助手用文本方式来查看,看到的是这个数字本身
void uart_seng_text(unsigned char c)
{
 unsigned char i; //用于处理变量个位、十位、百位的三个量
 i=c/100; //i=他的最高位,i计数出来得到的 商 就是他的最高位                     // 最
 uart_seng_byte(i+48);  //也可以uart_seng_byte(i+‘0’);效果一样的            // 高
 //发出去的十进制,在串口显示的是ASCLL码                                       // 位
 //因为在ASCLL码里,十进制48对应的字符为0                                      // 百
 //如:十进制=字符,48=0,49=1,50=2,51=3,52=4,53=5,54=6,55=7,56=8,57=9  // 位
 //如果i=0,那么0+48=48,那么串口显示的字符就是0
 //如果i=6,那么6+48=54,那么串口显示的字符就是6
 //最后字符通过主函数的发送顺序都显示在百位上

 
 c=c%100; //如果C=467的话,余数就为67,那么 c=c%100=67                       // 次
 i=c/10;  //i=他的次高位,i计数出来得到的 商 就是他的次高位                     // 高
 uart_seng_byte(i+48);                                                   // 位
 //同理:显示在十位                                                          // 十
                                                                          // 位

 c=c%10; //如果C=53的话,余数就为3,那么 c=c%10=3                             // 最
 i=c/1;  //i=他的最低位,i计数出来得到的 商 就是他的最低位                       // 低
 uart_seng_byte(i+48);                                                    // 位
 //同理:显示在个位                                                          // 个
                                                                          // 位
 //发送一个换行
 uart_seng_byte('\r');
 uart_seng_byte('\n');                                                                                                                                                
}                                                                                   
                            
#ifndef __UART_H__
#define __UART_H__

#include <reg51.h>
void uart_init(void);                  //初始化串口函数
void uart_seng_byte(unsigned char c);  //通过串口发送1个字节出去 
void delay(void);                       //延时函数
void delay1s(void);                      //延时函数
void uart_seng_text(unsigned char c);

#endif
#include "et2046.h"
#include "UART.h"

void main(void)
{
   uart_init();//初始化
   while(1)
   {
    uart_seng_text(255); //一定要给个循环才能看到串口显示发出的是!,而不是串口没有显示或者显示别的东西的现象。
                         //因为那边对ASCLL码进行了转换所以这边可以直接写数字
   //注意:但是写的数字不能超过255,因为变量c的最大内存是255,所以多出的就从0开始重新计算了
   //比如:256就会显示000,257就会显示001等
   //因为使用的是unsigned char c;
   //char是8位的
   delay1s();//延时1s          
   }
}

最终效果

显示的是255,但是这串口输出显示的255和我写的255不一样。

显示的是255,是由十进制转的ASCLL码的字符

注意:

  1. 但是写的数字不能超过255,因为变量c的最大内存是255,多出的就从0开始重新计算了

  1. 因为8位单片机的最大内存是255,所以变量c的最大内存是255是三位的,所以可以用三个公式计算百位、十位、个位,用于ascll码转换

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成长中的单片小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值