返回一字节中某一位的值

#include <iostream>
using namespace std;

bool bit(char c,int num)//返回c的第num(0~7)位的值
{
cout<< ((c&(1<<num))>>num)<<endl;
return (c&(1<<num))>>num;
}

int main()
{
char a=6;
for(int i=0;i<8;i++)
bit(a,i);
return 0;
}


#include "reg51.h" #include "intrins.h" //重定义数据类型 typedef unsigned int u32; typedef int s32; sbit DQ=P3^7; //定义温度变量 unsigned short tempZ; unsigned char xiaoshu1,xiaoshu2; //数码管数组 unsigned char arr[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; unsigned char arrPoint[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //实现数码管显示DS18B20温度 //延时函数,延时时间T=2*n+10us void delay(unsigned char n) { while (--n); } void Delay1ms() //@11.0592MHz { unsigned char i, j; _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } //实现DS18B20初始化 unsigned char DS18B20_Init() { unsigned char x; DQ=1; DQ=0;//此时由主机拉低总线电平 //延时至少480us delay(240); DQ=1; //此时主机释放总线,然后由弱上拉电阻逐渐拉高电阻 delay(25);//为了上拉电阻完成上拉 x=DQ; delay(125);//延时240us以上,完成整个初始化时序 return x; } //实现主机写入字节数据 void writeOneByte(unsigned char oneByte) { unsigned char i; for(i=0;i<8;i++) { DQ=1; DQ=0;//此时由主机拉低总线电平 _nop_(); DQ=oneByte&0x01; delay(10);//延时30us,让从机取样 delay(10); //延时约30us DQ=1;//主机释放总线 oneByte>>=1;//每处理完个比特位,将数据右移一位 } } //读取字节数据,读取时默认从低位先读 unsigned char readOneByte() { unsigned char i; unsigned char oneByte; for(i=0;i<8;i++) { DQ=1; DQ=0;//此时由主机拉低总线电平 _nop_(); oneByte>>=1;//每处理完个比特位,将数据右移一位 DQ=1;//主机释放总线 delay(2);//延时到接近15us if(DQ) { oneByte|=0x80; } delay(18); DQ=1; } return oneByte; } //读取温度函数 void readTemp() { unsigned char tempL; unsigned short tempH; DS18B20_Init();//初始化 writeOneByte(0xcc);//ROM操作 writeOneByte(0x44);//RAM操作 DS18B20_Init();//初始化 writeOneByte(0xcc);//ROM操作 writeOneByte(0xbe);//RAM操作 //读取温度DS18B20先给低位温度,再给高位 tempL=readOneByte(); tempH=readOneByte(); //取出温度整数部分 //tempZ=(tempH<<4)+(tempL>>4); tempZ=(tempH<<8|tempL)>>4; //取出温度小数部分(前两位/第一位或第二位) xiaoshu1=((tempL&0x0F)*10)/16; xiaoshu2=(((tempL&0x0F)*100)/16)%10; } // void numTubeShow(unsigned short zhengshu,unsigned char xiaoshu1,unsigned char xiaoshu2) { P2=0xfe; P0=arr[zhengshu/10]; Delay1ms(); P0=0xff; P2=0xfd; P0=arrPoint[zhengshu%10]; Delay1ms(); P0=0xff; P2=0xfb; P0=arr[xiaoshu1]; Delay1ms(); P0=0xff; P2=0xf7; P0=arr[xiaoshu2]; Delay1ms(); P0=0xff; } void main() { while(1) { readTemp(); numTubeShow(tempZ,xiaoshu1,xiaoshu2); } }(将温度和蜂鸣器结合(当温度达到具体的某温度时,蜂鸣器可以报警(阶梯式报警)))
08-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值