/*******************************************************************************

* 实验名                           :温度显示实验

* 使用的IO             :

* 实验效果       :1602显示温度

*        注意                                         :

*******************************************************************************/

#include

#include"lcd.h"

#include"temp.h"

uchar CNCHAR[20] = "Temp:";

void LcdDisplay(int);

void UsartConfiguration();

/*******************************************************************************

* 函数名         : main

* 函数功能                   : 主函数

* 输入           : 无

* 输出                  : 无

*******************************************************************************/

void main()

{

UsartConfiguration();

LcdInit();                         //初始化LCD1602

LcdWriteCom(0x88);        //写地址 80表示初始地址

LcdWriteData('C');

while(1)

{

LcdDisplay(Ds18b20ReadTemp());

//                Delay1ms(1000);//1s钟刷一次

}

}

/*******************************************************************************

* 函数名         : LcdDisplay()

* 函数功能                   : LCD显示读取到的温度

* 输入           : v

* 输出                  : 无

*******************************************************************************/

void LcdDisplay(int temp)          //lcd显示

{

unsigned char i, datas[] = {0, 0, 0, 0, 0}; //定义数组

float tp;

if(temp< 0)                                //当温度值为负数

{

LcdWriteCom(0x80);                //写地址 80表示初始地址

SBUF='-';//将接收到的数据放入到发送寄存器

while(!TI);                                 //等待发送数据完成

TI=0;                                                 //清除发送完成标志位

LcdWriteData('-');                  //显示负

//因为读取的温度是实际温度的补码,所以减1,再取反求出原码

temp=temp-1;

temp=~temp;

tp=temp;

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算由?.5,还是在小数点后面。

}

else

{

LcdWriteCom(0x80);                //写地址 80表示初始地址

LcdWriteData('+');                 //显示正

SBUF='+';//将接收到的数据放入到发送寄存器

while(!TI);                                 //等待发送数据完成

TI=0;                                                 //清除发送完成标志位

tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量

//如果温度是正的那么,那么正数的原码就是补码它本身

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算加上0.5,还是在小数点后面。

}

datas[0] = temp / 10000;

datas[1] = temp % 10000 / 1000;

datas[2] = temp % 1000 / 100;

datas[3] = temp % 100 / 10;

datas[4] = temp % 10;

LcdWriteCom(0x82);                  //写地址 80表示初始地址

LcdWriteData('0'+datas[0]); //百位

SBUF = '0'+datas[0];//将接收到的数据放入到发送寄存器

while (!TI);                                 //等待发送数据完成

TI = 0;

LcdWriteCom(0x83);                 //写地址 80表示初始地址

LcdWriteData('0'+datas[1]); //十位

SBUF = '0'+datas[1];//将接收到的数据放入到发送寄存器

while (!TI);                                 //等待发送数据完成

TI = 0;

LcdWriteCom(0x84);                //写地址 80表示初始地址

LcdWriteData('0'+datas[2]); //个位

SBUF = '0'+datas[2];//将接收到的数据放入到发送寄存器

while (!TI);                                 //等待发送数据完成

TI = 0;

LcdWriteCom(0x85);                //写地址 80表示初始地址

LcdWriteData('.');                 //显示 ‘.’

SBUF = '.';//将接收到的数据放入到发送寄存器

while (!TI);                                 //等待发送数据完成

TI = 0;

LcdWriteCom(0x86);                 //写地址 80表示初始地址

LcdWriteData('0'+datas[3]); //显示小数

SBUF = '0'+datas[3];//将接收到的数据放入到发送寄存器

while (!TI);                                 //等待发送数据完成

TI = 0;

LcdWriteCom(0x87);                 //写地址 80表示初始地址

LcdWriteData('0'+datas[4]); //显示小数

SBUF = '0'+datas[4];//将接收到的数据放入到发送寄存器

SBUF=0X0A; //换行

SBUF=0X0D;

while (!TI);                                 //等待发送数据完成

TI = 0;

for(i=0; i<6; i++)

{

SBUF = CNCHAR[i];                //将接收到的数据放入到发送寄存器

while (!TI);                                 //等待发送数据完成

TI = 0;

}

}

/*******************************************************************************

* 函 数 名         :UsartConfiguration()

* 函数功能                   :设置串口

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void UsartConfiguration()

{

SCON=0X50;                        //设置为工作方式1

TMOD=0X20;                        //设置计数器工作方式2

PCON=0X00;

TH1=0XFD;                                //计数器初始值设置,注意波特率是9600的

TL1=0XFD;

TR1=1;

}

c语言 符号自动换行,单片机串口发送字符为什么会自动换行?相关推荐

  1. STM32串口的使用(原理、结构体、库函数、串口发送字符(串)、重定向printf串口发送、串口中断接收控制灯)

    参考:串口的结构体 重定向printf串口发送stm32等博文 作者:点灯小哥 发布时间: 2021-03-06 21:46:33 网址:https://blog.csdn.net/weixin_46 ...

  2. 51单片机串口发送汉字显示乱码问题

    前一段时间做蓝牙通信,单片机串口发送汉字总显示乱码,代码如下: //发送一个字节 void SendByte(unsigned char dat) { SBUF = dat; while(!TI); ...

  3. 51单片机 串口发送数据(只是发送)

    51单片机 串口发送数据(只是发送)用于调试. #include <reg51.h>#define uchar unsigned char #define uint unsigned in ...

  4. 单片机串口发送数据很慢?这种方法帮助你提高!

    大家好,我是张巧龙,本文介绍如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协议格式,给出帧打包方法:之后介绍一种特殊的串口数据发送方法,可在避免使用串口发送中断的情况下,提高系统的响应 ...

  5. STM32单片机串口发送ASCII码

    例如单片机向串口发送ASCII码$01,play只需要发送其对应的十六进制数,如下: $对应0x24 0对应0x30 1对应0x31 ,对应0x2C P对应0x70 l对应0x6C a对应0x61 y ...

  6. STM8单片机串口发送引脚和接收引脚分开使用

    在使用STM8S003单片机时,需要用到ADC采样功能,STM8S003总共有5个ADC采样口,但是其中两个采样口是和串口复用的,如果当ADC口用,就不能用串口,如果当串口用,就不能用ADC口. 通过 ...

  7. 单片机原理与应用实验——串口(C语言),使用串口发送或接收数据,定时器1作为波特率发生器

    (基于51核的STC12C5A60S2,keil uvision5 mdk 5.25 编译) 1. 定时发送1字节数据给电脑,波特率9600 #include <STC12C5A60S2.h&g ...

  8. 51单片机串行口c语言编程,51单片机串口通信c语言编程

    这只是个模板,参考一下 /*----------------------------------------------- 名称:串口通信 网站:www.doflye.net 编写:shifang 日 ...

  9. 51单片机串口发送多个16进制数据

    串口发收数据 发送主要逻辑 接收主要逻辑 计算波特率 完整代码 避坑指南 发送主要逻辑 一:声明一个你要发送的字符串列表 unsigned char code table[]={0x7E,0x03,0 ...

最新文章

  1. 硬件重要还是软件重要?一个人能同时学会吗?
  2. SRE工程师到底是做什么的?
  3. 什么是伪静态?SEO中如何理解伪静态?
  4. 成功解决 利用plt.plot绘图时,横坐标出现浮点小数而不是整数的情况(坐标轴刻度)
  5. 有关于近期大量数据库暴光的分析
  6. 一二三系列之CodeChef分块——Chef and Churu,Chef and Problems,Children Trips
  7. ddos攻击工具_简单有效的ddos攻击防御方法
  8. git21天打卡day15-添加提交修改文件
  9. Appium+Python之PO模型(Page object Model)
  10. 【C++】指针遍历二维数组若干种方法小结
  11. mysql5.7 主从
  12. 迅为IMX8M mini开发板Yocto系统交叉编译C程序
  13. 先爆火再遇冷 元宇宙能否托起梦想?
  14. SREng 使用指南(一)SREng简介
  15. 台式计算机m4350,高配商用台式 联想启天M4350跌破五千
  16. Maven系列第三讲 详解Maven解决依赖问题
  17. 对QQGame-大家来找茬的辅助工具的改进
  18. Android SDK是什么?
  19. 全闪存存储、混合闪存存储
  20. 使用 Vscode +PlantUml 画uml图

热门文章

  1. XMind 2021mac苹果手机电脑端 专业版思维导图
  2. 汇编语言第4周学生总结反馈
  3. ⼤数据平台基础架构及解决⽅案
  4. wps怎么将图片嵌入文字里_在WPS文字中插入图片
  5. python 利用python处理excel文件
  6. python小游戏 走迷宫小游戏设计与实现
  7. GWO-KELM和GWO-SVR代码实现
  8. Word文档怎么删除html标签,word怎么清除所有格式
  9. 从零开始搭建博客Hexo-Node-Git搭建博客
  10. 百度天气预报接口介绍