您的位置:首页 > 编程语言 > C语言/C++

基于proteus的51单片机仿真实例十九、用单片机端口演示数据的乘法运算结果

2017-04-30 07:40 453 查看
1、数据类型之间的转换

在C语言程序的表达式或变量赋值运算中,有时会出现运算对象的数据不一致的情况。C语言允许任何标准数据类型之间的隐式转换。所谓隐式转换是指系统会自动对相关数据类型进行转换,不需要强制干预。

隐式转换按以下从左到右的优先级自动进行:

bit-char-int-long-float

对于有符号和无符号型数据,无符号型数据的优先级大于有符号型数据:unsigned>signed

 

隐式数据转换时,低优先级的数据类型转为高优先级的数据类型,不一定非要按照上面的顺序逐级转换,可以隔级转换,例如将bit型赋值给int型变量时,bit型数据直接转换为int型,而不是先将bit型转换为char型,然后再转换为int型,

 

2、一般来说,如果有几个不同类型的数据同时参加运算,先将低级别类型的数据转换成高级别类型数据,再做运算处理,并且运算结果为高级别类型数据。

C语言除了能对数据类型作自动的隐式转换之外,还可以采用强制类型转换符“()”对数据类型做显式的人为转换。

 

3、本节通过两个实例来认识一下数据类型的隐式转换和强制转换。

首先实现数据类型的隐式转换。

 

4、在keil c51中新建项目ex7,输入以下程序代码,并编译生成ex7.hex文件。本实例实现一个无符号字符型变量和一个无符号整型变量相乘,然后用P0口显示乘积的低8位结果,P1口显示乘积的高8位结果。

//实例7:利用P0,P1口显示两数相乘的结果

#include <reg51.h>    //包含头文件

void main(void)

{

  unsigned char num1;    //定义无符号字符型变量 

 unsigned int num2,mul;   //定义无符号整型变量

 num1 = 22;     // 变量赋初值

 num2 = 33;

 mul = num1 * num2;  // 求两数相乘的结果

       //

 P0 = mul % 256;   //低8位送P0口

 P1 = mul / 256;   //高8位送P1口

 while(1)     //

 {

 }

}

5、在proteus中创建名称为ex7.dsn的仿真文件,电路图如下图所示,在at89c51中载入上一步生成的ex7.hex文件。

 


6、启动仿真,观察运行结果,然后与计算结果相对比,检查运行结果是否正确。如下图所示



 

7、本例演示数据强制转换的运算结果,在本例中,定义了两个无符号整型数据,将这两数相乘后强制转换为无符号字符型数据。并通过P0口将运算结果显示出来

在keil c51中创建新工程ex8,编写如下程序代码,编译并生成ex8.hex文件。

   //实例87:利用P0,P1口显示两数相乘的结果 数据的强制转换

#include <reg51.h>    //包含头文件

void main(void)

{

  unsigned char mul;    //定义无符号字符型变量 

 unsigned int num2,num1;   //定义无符号整型变量

 num1 = 22;     // 变量赋初值

 num2 = 33;

 mul = (unsigned char)(num1 * num2);  // 求两数相乘的结果

       //

 P0 = mul;   //低8位送P0口

 

 while(1)     //

 {

 }

}

8、在proteus中创建仿真文件ex8。电路图如下图所示,将上一步生成的ex8.hex文件载入at89c51中

 



 

9、启动仿真,观察运行结果,如下图所示,并与运算结果相对照,检查结果的正确性

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 proteus 单片机
相关文章推荐