单片机浮点数的显示编程.doc_第1页
单片机浮点数的显示编程.doc_第2页
单片机浮点数的显示编程.doc_第3页
单片机浮点数的显示编程.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机浮点数的显示编程 标题:单片机浮点数的显示编程2007-10-04 11:26:16单片机浮点数的显示编程经常接到读者的来信来电,谈到学习单片机编程已有一定进步,可以进行定点数的显示。但这些读者对如何进行浮点数显示却一筹未展,毫无头绪。而工业自动化控制中会牵涉到大量的浮点数运算与显示,这里笔者根据一简单的实例来详细介绍一下浮点数的C语言显示设计。更多的C语言学习内容可上查看。电路构成假设显示为5位数码管,其电路见图1(作者注:使用Protel99se打开)。其中最高位数码管作符号显示,其余的4位数码管进行浮点数显示。图1软件设计流程图2为主程序及定时器0中断程序的状态流程。主程序在上电时进行初始化,包括设置定时器初值及开中断等。无限循环过程中,不断调用取样子函数获取待显的浮点数,并将浮点数转为整数。浮点数转为整数的处理过程如下:首先判断取样获取的浮点数的正、负,若小于0,则符号位标志fu_hao清0,否则置1。下来,取浮点数的绝对值。再下来,判断浮点数的大小,若浮点数大于等于0而小于10,小数点标志point置0;若浮点数大于等于10而小于100,小数点标志point置1;若浮点数大于等于100而小于1000,小数点标志point置2;若浮点数大于等于1000而小于10000,小数点标志point置3。需说明的是:由于显示数值的数码管为4位,因此假设取样获得的浮点数范围从0.0009999。T0定时中断程序,用于刷新浮点数的显示,它会根据小数点标志point的变化,自动点亮某位数码管的小数点。并且T0定时中断程序还会根据符号位标志fu_hao,熄灭最高位数码管或显示“-”。图2程序实例详解#include /51单片机头文件#include /调用绝对值计算库函数必需的头文件#define uchar unsigned char /变量类型的宏定义#define uint unsigned intuchar code DIS_SEG710=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f; /09的数码管段码uchar code DIS_BIT5=0xfe,0xfd,0xfb,0xf7,0xef;/5位数码管位码/=float x=-2000; /定义取样获取的浮点数(作演示时初始化为-2000)uint disp_val; /无符号整型变量作显示缓冲uchar point; /无符号字符型变量作小数点标志pointbit fu_hao; /位变量作符号标志fu_haofloat sampling(void); /函数声明/*void delay(uint k) /定义延时子函数uint data i,j;for(i=0;ik;i+)for(j=0;j4)dis_cnt=0; /扫描5位数码管的计数值 switch(dis_cnt) case 4: if(fu_hao=0)P0=0x40; /如果符号标志fu_hao为0,/则最高位(万)位数码管显示“-”。 else P0=0x00; /否则熄灭最高位(万)位数码管。 P2=DIS_BIT4;break; /选中万位数码管。 /* case 3:if(point=0)P0=DIS_SEG7disp_val/1000|0x80; /如果小数点/标志point为0,则千位数码管显示且同时点亮小数点。 else P0=DIS_SEG7disp_val/1000; /否则仅千位数码管显示。 P2=DIS_BIT3;break; /选中千位数码管。 /* case 2:if(point=1) P0=DIS_SEG7(disp_val%1000)/100|0x80; /如果小数点标志point为1,则百位数码管显示且同时点亮小数点。 else P0=DIS_SEG7(disp_val%1000)/100; /否则仅百位数码管 /显示。 P2=DIS_BIT2;break; /选中百位数码管。 /* case 1:if(point=2) P0=DIS_SEG7(disp_val%100)/10|0x80; /如果/小数点标志point为1,则十位数码管显示且同时点亮小数点。 else P0=DIS_SEG7(disp_val%100)/10; /否则仅十位数码管显示。 P2=DIS_BIT1;break; /选中十位数码管。 /* case 0:if(point=3) P0=DIS_SEG7(disp_val%10); /如果小数点标志point为1,则个位数码管显示且同时点亮小数点。 else P0=DIS_SEG7(disp_val%10); /否则仅个位数码管显示。 P2=DIS_BIT0;break; /选中个位数码管。 default:break; /默认为退出 /=void main(void) / 定义主函数 float temp; /定义浮点型局部变量 delay(500); /延时,待电源稳定 TMOD=0x01; /定时器T0方式1 TH0=-(2000/256); /2ms定时初值(晶振为12.000MHz) TL0=-(2000%256); ET0=1;TR0=1; /开T0中断,启动T0 EA=1; /开CPU中断 while(1) /无限循环 temp=sampling(); /调用取样子函数获取待显的浮点数 EA=0; /进行浮点数处理前关闭中断 /* if(temp=0)&(temp=10)&(temp=100)&(temp=1000)&(temp10000) /若浮点数大于等于1000而小于10000。 point=3;disp_val=(int)temp; /小数点标志point置3。 /* EA=1; /浮点数处理完毕后打开中断 delay(1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论