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

发布者:快乐的天使最新更新时间:2021-10-19 来源: 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单片机  数据类型 引用地址:51单片机-数据类型强制转换

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

推荐阅读最新更新时间:2024-11-16 23:08

用89C51单片机的P1口输出正脉冲编程
用89C51的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意)。编出汇编语言程序。 解: ORG 0100H ABC:SETB P1.0 SETB P1.7 JB PI.7,$ JNB P1.7,$ CLR P1.0 MOV R2,#0 DAY: NOP NOP DJNZ R2,DAY SJMP ABC
[单片机]
51单片机多路抢答器设计
高校是个院系、部门较多的单位 ,且学校的活动多 ,而抢答的活动精彩而又有趣 ,市面上8 路以上的抢答器很少 ,且价格贵 ,4 路的抢答器至少要800 元以上。如果我们能带领学生自己设计一个多路抢答器的话 ,这样一来既降低了成本 ,又引发了学生的兴趣。 1 基本功能 (1) 可同时供16 个代表队参加比赛 (2) 给节目主持人一个控制开关 ,用来控制系统清零和抢答开始。 (3) 可显示优先抢答代表队的编号 ,同时给出提示 ,并封锁输入 ,禁止其他选手抢答。 (4) 具有定时抢答功能 ,抢答时间可由主持人设定。 (5) 在设定时间内抢答有效 ,定时器停止工作。 (6) 定时时间已到 ,无人抢答 ,本次抢答无效。 基于单片机的多
[单片机]
<font color='red'>51单片机</font>多路抢答器设计
51单片机之计时器
一、实验目的: 让六个数码管动态显示数字,计算秒数 二、实验分析: a.因为要显示秒数,所以我们首先应该定义一个数组,用来存放0-9数字在数码管上对应的 十六进制数 b.3/8译码器的使能设置 c.定时器的理解。首先应该知道定时器与TMOD和和TCON有关。对于TMOD值得我们特别注意的是TMOD的Gate位(门控位)和C/T位。Gate=0时,仅由运行控制位TR1/TR0来启动定时器运行。而当Gate=1时,仅由运行控制位TR1/TR0和外中断引脚(INT0和INT1)上的高电平共同来启动定时器运行。C/T=0为定时模式,C/T=1为计数模式。我这次用到的是定时器1的方式一,为了不影响TMOD上的其他位,我
[单片机]
基于51单片机的DHT11温湿度控制系统
单片机驱动DHT11获取环境温湿度并在1602显示,同时可以调整温湿度的各自的上下限,有提示降温除湿功能。程序实测可用 单片机源程序如下: //http://www.51hei.com/bbs/dpj-51190-1.html #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */ typedef signed cha
[单片机]
基于<font color='red'>51单片机</font>的DHT11温湿度控制系统
8051单片机教程第十二课:逻辑运算类指令
单片机教程第十二课:逻辑运算类指令: 对累加器A的逻辑操作: CLRA;将A中的值清0,单周期单字节指令,与MOVA,#00H效果相同。 CPLA;将A中的值按位取反 RLA;将A中的值逻辑左移 RLCA;将A中的值加上进位位进行逻辑左移 RRA;将A中的值进行逻辑右移 RRCA;将A中的值加上进位位进行逻辑右移 SWAPA;将A中的值高、低4位交换。 例:(A)=73H,则执行CPLA,这样进行: 73H化为二进制为01110011, 逐位取反即为10001100,也就是8CH。 RLA是将(A)中的值的第7位送到第0位,第0位送1位,依次类推。 例:A中的值为68H,执
[单片机]
51单片机心形流水和数码管同步效果显示仿真与程序
LED流水和数码管流水效果 独立 进行,实现方法包里有代码,互相交流。 仿真原理图: 单片机源程序如下: #include reg51.h #include intrins.h #define Number 50 //数码管数字长亮时间,t=Number*50ms=2500ms #define Speed 6 //数码管数字显示流动速度,t=Speed*50ms=300ms #define time100 100 //延时函数时间:t=time100=100ms #define time1000 1000 //延时函数时间:t=time1000=1000ms #define uchar unsigned
[单片机]
<font color='red'>51单片机</font>心形流水和数码管同步效果显示仿真与程序
51单片机软件抗干扰的技术误区
单片机 中存在这样一种广泛流传的误解:在MCS-51系列单片机中,只要用指令使程序从起始地址开始执行,就可以复位单片机,摆脱干扰。通过一个简单的实验,揭示了软件复位的可靠方法。   有的单片机(如8098)有专门的复位指令,某些增强型MCS-51系统单片机虽然没有复位指令,但片内集成了WATCHDOG电路,故抗干扰也不成问题。而普及型MCS-51系列单片机(如8031和8032)既然无复位指令,又不带硬件WATCHDOS,如果没有外接硬件WATCHDOG电路,就必须采用软件抗干扰技术。常用的软件抗干扰技术有:软件陷阱、指令冗余、软件WATCHDOG等,它们的作用是在系统受干扰时能及时发现,再用软件的方法使系统复位。所谓软件复位
[单片机]

推荐帖子

无线监控新动向 3G平台如何与安防融合?
无线监控在一些特殊领域中,如偏远山区、水电站等区域,发挥着越来越重要的作用。而3G的兴起,也为无线监控带来新的发展。随着第三代移动通信技术(3G)商业化应用规模的不断拓展,三大运营商纷纷基于3G高速无线接入的特性,发展多媒体视频类业务,而基于3G无线网络的视频监控应用已成为核心内容。3G的安防应用也必将给安防领域带来新的契机,推动安防产业从模拟监控、数字监控、有线网络监控向无线网络视频监控发展。由于3G技术先进、有较大的传输带宽(与较前的无线传输相比较),能够在全球范围内更好地实现
xyh_521 安防电子
MSP430F425自带LCD采用4-MUX驱动方式。
我想用这自带的LCD显示数据,当要看数据时,可以清晰看见,当不要看时,处于背光状态。请问这怎么做,才能达到这样的目的。MSP430F425自带LCD采用4-MUX驱动方式。晕什么叫处于处于背光状态?看书呀就是像手机那样,当你按键的时候屏幕才亮,不按它时候,屏幕光的自动熄灭那种呀。回复沙发wangfuchong的帖子很容易实现啊,用一个GPIO口去控制背光。然后用Timer设计一个的定时器。按键按下时打开背光,定时器开始计数,定时到了关背光。回复板凳小明同学
小明同学 微控制器 MCU
个人闲置9成新spartan 3e 开发板出售
个人闲置的spantan3e500开发板,价格1050,需要的可以QQ:247287388联系我价格可以小酌本站强荐:185娱乐^城.足球^真_人.彩票齐全^手机可投^注任何游戏.首次开户送10元.首存送58元.信誉绝对保证185.cc个人闲置9成新spartan3e开发板出售是购买的还是大学计划申请的?本站强荐:185娱乐﹒城.足球﹒真_人.彩票齐全﹒手机可投﹒注任何游戏.首次开户送10元.首存送58元.信誉绝对保证185.ccb
pengwr 淘e淘
关于2407 仿真时load程序的问题
在load程序时出现下面错误:Dataverificationfailedataddress0x0Pleaseverifytargetmemoryandmemorymap.请各位老师指点一下! 关于2407仿真时load程序的问题可能是CMD文件的问题。我觉得好像不是CMD文件的问题,同样的程序在以前的板子上就可以,在新板子上就有这个问题,谢谢了!我再查查!
vashaoye 微控制器 MCU
STM32开发指南V1.0 库函数 + [ST主题月]
《STM32开发指南V1.0库函数版本》完整版本,高清pdf,有标签标记,分享给大家!!!STM32开发指南V1.0库函数+下载不了啊。下载了解压出错。 要下载两个一起解压才行的感谢分享,图文并茂,受益匪浅,感谢感谢!!!
wujianwei3980 stm32/stm8
模拟电子技术、数字电子技术---童诗白、华成英、阎石、康华光---整理下载
新的一年,特整理模拟电子、数字电子方面的经典书籍,作为新年礼包献给大家祝大家新的一年都能学到好东西同时也向给我们提供这么经典的知识的名家们致敬资料说明:本次整理的包括以下书籍:童诗白、华成英的模拟电子技术基础第二、第三、第四版;阎石的数字电子技术基础第四、第五版康华光的电子技术基础第五版:数字部分、模拟部分
tiankai001 模拟电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved