51单片机-数据类型强制转换

最新更新时间:1970-01-01来源: eefocus关键字:51单片机  数据类型 手机看文章 扫描二维码
随时随地手机看文章

1.实用性改善


为了使上一讲的功能更加完善,我们编写新的实用型的代码,效果是让数码管显示的数就是输入引脚高电平持续的微秒数,最高能捕获到999999微秒。如果高电平持续的时间超出这个取值范围,那么数码管不够显示,所以超出范围的话我们就让6个数码管显示    FFFFFF。


因为计数器计时到65535之后就会产生溢出,也就是超过71ms就会溢出一次,我们知道计数器溢出也是会产生中断的,所以在中断函数里我们实现让变量x简单的自加1表明时间过去了71毫秒左右。


假设高电平持续的时间有75毫秒左右,那么得出最后的微秒数就是


x*71111+(TH0*256+TL0)*(12/11059200)*1000000;


现在我们首次使用float类型的变量,第一次使用带小数点的数据类型。


不同的数据类型之间运算要进行强制转换,请参考《手把手教你学51单片机》文档10.1.1节。


我们定义的float类型变量capture_val就是用来记录持续高电平的微秒数。请看以下三段代码


capture_val=(float)TH0*256.0+(float)TL0;

capture_val=(capture_val*12.0)/11.0592;

capture_val=x*71111.0+capture_val;

第一段是取出计数器的值。第二段就是把计数器的值乘以(12/11059200),意思是得到的秒数,但是我们需要的是微秒数,所以除以11.0592就是把秒数放大了10的6次方倍。第三段代码则是,溢出过好几次71.111ms,所以需要加上这些时间。


我们记住,浮点型的数据加减乘除其他数时我们要加小数点。


还有函数参数的传递也要强制转换,比如“ShowNumber((u32)capture_val);”


capture_val本身是float类型,想显示正整数就要强制转换为unsigned long类型。


2.代码


#include  

#include //详见第六章第8讲

  

float x=0;

  

//请用杜邦线把P1.6和P3.2连接起来

void main()

{   

    u8 i;

    float capture_val;

    LED_Init();    //初始化LED硬件模块

    TMOD=0x09;     //低四位 1001 

   

    EA=1;          //闭合总中断开关

    ET0=1;

    

    BEEP=0;        //先让P1.6输出低电平

    TR0=1;

    BEEP=1;        //开始计数  

    delay_ms(500); //软件仿真调试出此处的延时时间为698275.8微秒

    BEEP=0;        //停止计数  

   

    capture_val=(float)TH0*256.0+(float)TL0;

    capture_val=(capture_val*12.0)/11.0592;

    capture_val=x*71111.0+capture_val;

   

    if(capture_val>999999.0)

    {

        for(i=0;i<6;i++)LedBuff[i]=LedChar[15]; //超出数码管的显示范围就显示FFFFFF 

    }

    else  ShowNumber((u32)capture_val);         //显示没超过999999时的数

   

    while(1)

    {     

        SEG_Scan();         

    }   

}

  

void TIM0_IRQHandler() interrupt 1

{

    x=x+1.0;

}


我们把“delay_ms(500);”改为“delay_ms(100);”,然后先软件仿真调试看看“delay_ms(100);”花费了多少时间,接着再下载进开发板看看数码管显示的数值是多少,记住要保证P3.2和P1.6用杜邦线相连。

关键字:51单片机  数据类型 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic545798.html

上一篇:51单片机-输入捕获
下一篇:51单片机-定时器&数码管扫描显示

推荐阅读

51单片机 LCD12864 驱动程序 C语言 ST7920
main.c#include "reg52.h"#include <intrins.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include "LCD12864.h"void main( void ){ Ini_Lcd(); Lcd_WriteStr(0,0,"QQ137712826"); while ( 1 ) { }}lcd12864.h#include <reg52.h>#include <intrins.h>sbi
发表于 2022-01-04
<font color='red'>51单片机</font> LCD12864 驱动程序 C语言 ST7920
51单片机 8x8LED点阵屏循环显示数字0~9
使用的是普中科技的开发板,一个点阵显示模块是由8x8共64个LED按照共阴或共阳的连接方式组成。每行的8个LED的负极连接一起,构成8根行线,每列的8个LED的正极连接一起,构成8根列线,就是共阴极接法。每行的8个LED的正极连接一起,构成8根行线,每列的8个LED的负极连接一起,构成8根列线,就是共阳极接法。若要点亮8x8点阵屏给每个LED连接到IO口是不够的,所以要使用到74Hc595芯片,只需要连接到AT89C52芯片上3个IO口即可点亮8x8LED点阵屏。代码循环数字0~9#include <reg51.h>#include <intrins.h> typedef unsigned char
发表于 2021-12-31
基于51单片机wifi物联网的浇花控制系统
一.硬件方案使用51单片机运用编程与LCD液晶显示屏实现,利用温度、湿度传感器及相应的显示、驱动执行机构、报警装置等实现温室作物生长环境控制器的设计。主要由51单片机+最小系统+lcd1602显示屏+蜂鸣器报警模块+设置按键+微型水泵+adc0832模数转换模块+YL-69土壤湿度传感器+DHT11温湿度传感器+LED指示灯+wifi模块esp8266;如图:二.设计功能(1)液晶显示检测到的土壤湿度值和环境温湿度值,有手动和自动两种控制模式;(2)通过按键设置报警值,温度大于上限值,则声光报警滴滴响;(3)当检测到的土壤湿湿度值低于报警值说明干燥启动水泵浇花。(4)s1,s2,s3,s4按键分别是设置键,加键,减键,手动自动
发表于 2021-12-31
基于<font color='red'>51单片机</font>wifi物联网的浇花控制系统
基于51单片机的GSM智能快递柜设计
一.硬件方案本设计基于STC89C52单片机的快递货柜模拟设计GSM短信发送验证码。该装置主要由单片机、电源模块、继电器电路、LED灯光报警模块、控制模块、GSM模块、键盘模块、LCD显示模块、机械开关等组成,借助成熟的GSM移动网络,当货物柜检测到快递的存在,会自动发送验证码给用户手机上,真正实现了远距离、高效率传递信息。主要由51单片机+LCD1602液晶+GSM模块+按键+继电器设计而成;如图:二.设计功能(1)采用LCD1602液晶显示当前快递柜的状态。(2)有数字按键(0-6)可以输入短信验证码,进行开柜。(3)快递员将货物存入柜子中,可以通过GSM模块向指定人发送随机的验证码。(4)验证码成功打开柜子之后失效。三.设计
发表于 2021-12-31
基于<font color='red'>51单片机</font>的GSM智能快递柜设计
基于51单片机的智能路灯照明控制系统
硬件设计仿真文件1: 功能如下图所示原理图仿真文件2:程序设计    /******定义头文件**************/#include<reg52.h> #include <INTRINS.H> #include"lcd.h"#include "ds1302.h"/******类型重定义*************/typedef unsigned char uchar;typedef unsigned int  uint;/******引脚定义***************/sbit key_1 =
发表于 2021-12-31
基于<font color='red'>51单片机</font>的智能路灯照明控制系统

推荐帖子

【T叔藏书阁】LIN总线资料专辑
汽车总线_LIN44页4.0M 汽车协议LIN总线最新中文版128页23.0M LIN总线收发器TJA102070页6.1M LIN协议企业培训资料119页10.1M lin入门书77页13.2M LIN规范49页7.5M LIN-Spec_Pac2_1_and_errata209页3.1M 【T叔藏书阁】LIN总线资料专辑
tyw 汽车电子
单片机系统开发基本步骤
单片机系统开发基本步骤
电子制作 单片机
【NXP Rapid IoT评测】+ 我的评测总结
本帖最后由hujj于2019-1-2109:33编辑 从12月28日收到快递,到今天正好是24天,若从开始下载相关资料学习了解算起则差不多一个月了。在这期间,差不多有一半的时间是用在连接套件和尝试登录在线编程上,尤其是在线编程,二十多天时仅仅有两次登录成功,其余都是只有登录digikey网站进行在线编程,最后一周多时间连添加硬件都失败,手机蓝牙可以找到套件,但APP就是连不上。原项目计划准备添加红外检测装置来作家庭防盗报警装置,拿到套件后才发现这个设想不
hujj RF/无线
LM2596的开关电源设计
LM2596就是个经典的型号,只需要按照数据手册提供的方法就能够设计出最小系统,这里提供一个设计电路供大家参考,可以完美运行。5V输出的纹波1V左右。 对于图示电路之中,输入采用2个电容进行稳压,对于4脚乃关键的反馈通路,要作为重要关键的走线进行处理,防止引入干扰带来的不必要的后果。D19L8都是高噪声的器件,应远离反馈通路,实际使用中若布线布局合理,还可以性能更好 LM2596的开关电源设计
qwqwqw2088 模拟与混合信号
ADI技术指南合集(共六本)
ADI技术指南合集(共六本)这一系列的指南是很经典的,现在在这儿做个集合,希望对在学习中的人有所帮助或启。 包含如下: 电路仿真和PCB设计 放大器 开关和基准源 模数转换器 数模转换器 射频及高速器件 Timson,如果您要查看本帖隐藏内容请回复 ADI技术指南合集(共六本)
chen8710 ADI参考电路
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved