历史上的今天
返回首页

历史上的今天

今天是:2024年08月25日(星期日)

正在发生

2021年08月25日 | 51单片机-数据类型强制转换

2021-08-25 来源:eefocus

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用杜邦线相连。

推荐阅读

史海拾趣

Esterline Power Systems公司的发展小趣事

随着公司产品的技术成熟和品质提升,Esterline Power Systems开始寻求国际市场的拓展。公司高层制定了明确的国际化战略,包括在欧洲和亚洲设立分支机构,与当地合作伙伴建立紧密的合作关系。通过参展国际航空展、加强与全球航空公司的技术交流与合作,公司逐渐打开了国际市场的大门,产品销售遍及全球多个国家和地区。

Cretex Companies Inc公司的发展小趣事

在电子行业的早期,Cretex Companies Inc.凭借对半导体技术的深入研究和创新,迅速崭露头角。公司研发出一款具有高效能、低功耗特点的芯片,这一技术突破使得电子设备的性能大幅提升,同时降低了能耗。凭借这一优势,Cretex的产品在市场上获得了广泛认可,公司规模逐渐扩大。

Golledge Electronics公司的发展小趣事

在电子行业的早期,Cretex Companies Inc.凭借对半导体技术的深入研究和创新,迅速崭露头角。公司研发出一款具有高效能、低功耗特点的芯片,这一技术突破使得电子设备的性能大幅提升,同时降低了能耗。凭借这一优势,Cretex的产品在市场上获得了广泛认可,公司规模逐渐扩大。

Cystech公司的发展小趣事

C-TECH Co., Ltd非常重视人才培养和团队建设。公司注重员工的培训和发展,为员工提供广阔的职业发展空间和良好的工作环境。同时,公司还积极引进优秀人才,打造了一支高素质、专业化的团队。正是凭借这支优秀的团队,C-TECH Co., Ltd在电子行业中不断创新和突破,取得了令人瞩目的成绩。

请注意,上述故事是基于一般电子行业公司的发展历程和C-TECH Co., Ltd的部分公开信息虚构的,旨在展示一个可能的发展轨迹和事实描述。具体公司的实际情况可能有所不同。

富满电子(FM)公司的发展小趣事

C-TECH Co., Ltd自1997年成立以来,始终将技术创新作为公司发展的核心驱动力。在2008年,公司敏锐地捕捉到了5G通信技术的潜在商机,开始投入大量资源进行研发。经过数年的不懈努力,终于在2018年成功开发出了5G(3.5GHz)频段中频、射频SAW(声表面波)滤波器,这一技术突破为公司在5G通信市场赢得了先机。通过不断的技术创新,C-TECH Co., Ltd逐步确立了在电子行业中的领先地位。

CML公司的发展小趣事

在完成了数十年的成功发展后,CML并未满足于现状。公司开始着手制定面向未来的战略规划,旨在继续保持在半导体行业的领先地位。CML加大了对新兴技术的研发投入,如人工智能、物联网等领域,积极探索新的应用场景和市场机会。同时,公司还加强了与国际同行的合作与交流,不断提升自身的技术水平和市场竞争力。通过这些努力,CML为未来的发展奠定了坚实的基础,展望着更加辉煌的未来。

以上是基于CML公司发展历程的五个可能故事。请注意,这些故事虽然基于事实进行构建,但并非真实的历史记录。如需了解更多关于CML公司的具体发展历程和故事,建议查阅相关文献或访问公司官方网站。

问答坊 | AI 解惑

mini2440的按键控制LED小程序~~~

看到坛子里很多人拿到板子后不知道第一步该如何做, 在网上看到一个朋友的博客,感觉还不错,对于购买板子的朋友应该有所帮助,所以呈现出来: 来源:http://adreaman.com/0524arm-mini2440-led-key-non-os.html mini2440是当前最经济的arm9开 ...…

查看全部问答>

世界各大品牌功率器件选型表(有参考价格)

本文为转帖,觉得对大家有用,就转到坛子了:)功率器件的牌子很多,以MOSFET为例,有飞兆,IR ,ST ,ON,英飞凌,TOSHIBA的世界各大牌子,如何花更少的钱买到最好的东西,是我们采购也好,工程师也罢是我们追求的目标,这样才会老板满意,客户满意 ...…

查看全部问答>

【藏书阁】EZ-USB2100 系列单片机原理,编程及应用

目录: 第1章 EZ-USB简介 1.1 介绍 1.2 EZ-USB结构框图 1.3 USB规格说明 1.4 令牌和PID 1.5 主机是控制器 1.6 USB的传输方向 1.7 帧 1.8 EZ-USB的传输类型 1.9 枚举 l.10 USB内核 1.11 EZ-USB微处理器 l.12 重校举 ...…

查看全部问答>

Stellaris系列资料汇总(欲打造最强帖哦)

Keil uv3快速入门 demo https://bbs.eeworld.com.cn/thread-98020-1-1.html…

查看全部问答>

(重分答谢)AT 命令 STATE: IP IND(连线失败,接受场景配置)

我再WinCE5.0上用GPRS上网发信息到服务器上: AT+CREG? // check if registration network in 2 seconds interval +CREG: 0,1 // module responses AT+CGATT? // check if attach PDU for 2 seconds interval +CGATT: 1 // module response ...…

查看全部问答>

windows mobile上的数据拷贝(类似于PC的GHOST软件)

各位高手,最近小弟遇到一个问题,如何在windows mobile下实现类似于PC中GHOST软件,即读取ROM中的所有内容. 本人尝试过几种方法:(平台是VS2005 + Windows Mobile 5.0 Smartphone SDK) 1.在PC桌面端开发应用程序,用RAPI读取手机数据,其中用到了CeC ...…

查看全部问答>

请教,在程序只读存储器的绝对地址写数据的问题

芯片是cc2430 运行环境是IAR 片外寄存器的0x0000-0xDF00是程序存储器, 在程序存储器的某个地址定义了一个字节的数据, #define DATA1 ((volatile xdata*)0x0010) = 0x0F 可是读这个地址的数据时,出现了问题 我读DATA1 的值为0x0F,但读地 ...…

查看全部问答>

请问一下各位,2.8寸320X240的TFT最便宜的多少钱一片

                                 请问一下各位,2.8寸320X240的TFT 最便宜的多少钱一片,谢谢!!…

查看全部问答>

乘法型的DA和普通的DA有什么区别呢?

希望大虾能够解析下乘法型的DA和普通的DA的区别…

查看全部问答>

再说MOS的主要参数

1.开启电压VT   ·开启电压(又称阈值电压):使得源极S和漏极D之间开始形成导电沟道所需的栅极电压;   ·标准的N沟道MOS管,VT约为3~6V;   ·通过工艺上的改进,可以使MOS管的VT值降到2~3V。   2. 直流输入电阻RGS   ·即 ...…

查看全部问答>