c51中的bit,char的强制类型转换。
data为非0,,bit强制后,为1。否则为0
data的在char强制后取后8位。
(1)强制转换有什么好处?
例如:
unsigned char x ;
sbit SDA = P1^0 ;
1)、要用x来记录p1.0的值,可以用:
for(i=0;i<8;i++)
{
x |= (unsigned char )SDA ;
x <<=1;
}
2)、要用SDA来一位一位传送x的值,可以:
for(i=0;i<8;i++)
{
SDA = (bit)(x&0x80);
x <<=1;
}
在进行强制转换时,如果要转换成的格式位数小于原本的位数,则舍弃高位保留低位,比如将int型(16位)的转换成char型(8位),则会舍去高八位,保留int型的低八位,所以结果是0
http://blog.sina.com.cn/s/blog_533f26760102vg0i.html
谭浩强 C语言 第三版
类型转换
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:
实型赋予整型,舍去小数部分。前面的例子已经说明了这种情况。
整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。
自己加注:标准C没有位类型,通过具体实例,模拟SPI,IIC串行按位读写字节时SDA=temp&0x80;或者SDA=(bit)(temp&0x80);是按照bit(0x80) ?bit(true),bit(fals)如果(dat&0x80)结果不为零,0x80不等于true;(dat&0x80)结果不为零,则为false。
数据类型转化灵活设置原则,以事实为依据2020.3.7
数据类型转换
·自动转换:在不同类型数据的混合运算中,由系统自动实现转换,由少字节类型向多字节类型转换。不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。
·强制转换:由强制转换运算符完成转换。
关键字:c51 bit char 强制类型转换
引用地址:
c51中的bit,char的强制类型转换
推荐阅读最新更新时间:2024-11-16 20:53
单片机C语言教程:C51数组的使用
数组不过就是同一类型变量的有序集合。形象的能这样去理解,就像一个 学校在操场上排队,每一个级代表一个数据类型,每一个班级为一个数组,每一个学生就是 数组中的一个数据。数据中的每个数据都能用唯一的下标来确定其位置,下标能是一维 或多维的。就如在学校的方队中要找一个学生,这个学生在 I 年级 H 班 X 组 Y 号的,那么 能把这个学生看做在 I 类型的 H 数组中(X,Y)下标位置中。数组和普通变量一样,要 求先定义了才能使用,下面是定义一维或多维数组的方式: “数据类型”是指数组中的各数据单元的类型,每个数组中的数据单元只能是同一数据 类型。“数组名”是整个数组的标识,命名方法和变量命名方法是一样的。在编译时系统会 根据数
[单片机]
单片机简易秒表C51程序
本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52;找到数码管的原理图即可.这是一整个单片机开发板的电路图其他的忽略. 以下是程序源代码: /** *项目:简易秒表 *设计任务书 *一、任务简介: *秒表是体育比赛常用计时工具。本设计要求利用现有的 *有限资源,设计具有储存多个比赛成绩功能的简易秒表, *并能利用键盘查询历史成绩。 *二、设计要求: *⑴ 系统硬件设计: *利用 ISP-III.1型用户板完成设计要 求; *⑵ 系统软件设计: *完成控制软件的编写与调试; *⑶ 基本功能: *① 开机数码管显示0000; *按下1#键开始计时;再次按下1#键停止计时; *② 在停止状 态下, *按下3#键清除所有计
[单片机]
用proteus+keil-C51入门单片机
网上有用面包板入门单片机的,有自己焊板子入门单片机的,但很少有文章介绍用proteus入门单片机的。为什么呢,因为商人要赚钱,如果你不买他的硬件,买正版proteus赚的也不会到他的口袋里,所以商人绝对不会推广这种廉价而且高效的单片机入门方式。 之前我也尝试着焊一个单片机最小系统,结果电脑死活检测不到我焊的设备。又因为严重缺乏硬件调试的经验,单片机的自制之旅就暂时搁浅了。proteus在自制的期间就装好了,可是不会用,也就没有发现它的强大之处。 用了proteus,就可以省下买硬件的钱,对于入门级的爱好者来说,首先要搞清楚一些原理,对芯片和外设没有要求,所以使用proteus元件库中的器件就可以开始做仿真实验了,和在真板子上
[单片机]
c51中定时器工作时如何使用T0脚输入脉冲信号?
嵌入式系统中,定时器是一种常用的设备,可以实现各种时间控制功能,如计时、计数、产生中断等。8051单片机中有两个定时器:T0和T1,其中T0定时器主要用于计时和计数操作,可以通过T0脚输入脉冲信号来控制定时器的工作。 T0脚是单片机的P3.4口,既可以作为普通的输入输出口,也可以作为T0定时器的外部输入引脚。当T0脚作为定时器的外部输入引脚时,可以通过输入的脉冲信号来控制定时器的计数。在使用T0脚输入脉冲信号时,需要采取一些措施来确保信号的稳定性和正确性。 首先,需要确定输入脉冲信号的频率。在使用T0脚输入脉冲信号时,需要将信号的频率与定时器的工作频率相匹配。具体来说,当定时器使用外部时钟源时,其工作频率为外部时钟源频率的一半,因
[单片机]
Keil C51库函数原型列表
//1. CTYPE.H bit isalnum(char c); bit isalpha(char c); bit iscntrl(char c); bit isdigit(char c); bit isgraph(char c); bit islower(char c); bit isprint(char c); bit ispunct(char c); bit isspace(char c); bit isupper(char c); bit isxdigit(char c); bit toascii(char c); bit toint(char c); char tolower(char c); char __tolow
[单片机]
C51---6.1 矩阵键盘+6.2 矩阵密码锁
矩阵键盘 原理图 代码 按下的按键会在LCD上显示按下了哪一个按键 mian函数 #include REGX52.H #include Delay.h //包含Delay头文件 #include LCD1602.h //包含LCD1602头文件 #include MatrixKey.h //包含矩阵键盘头文件 unsigned char KeyNum; void main() { LCD_Init(); //LCD初始化 LCD_ShowString(1,1, MatrixKey: ); //LCD显示字符串 while(1) { KeyNum=MatrixKe
[单片机]
C51外中断程序
没有中断时以流水灯显示,外中断0使左右4个LED交替闪烁,外中断1使LED闪亮, #include reg51.h unsigned char code design ={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00}; void Delay(unsigned int i){ unsigned int j; for(;i 0;i--) for(j=0;j 125;j++); } void main(){ unsigned char i; EA=1; EX0=1; EX1=1; IT0=1; //脉冲触发方式 IT1=0; //使用电平触发 PX0
[单片机]
[C51代码]串口通信
/********************************************** * File: Serial_Comm_1.C * Description: Serial Communication Example 1 * Created Date: 2007-10-01 * Last Modified: 2007-10-01 * Author: Jeffrey - Schicksal@126.com * Notes: None **********************************************/ #include Atmel/AT89X51.h unsigned c
[单片机]