基于pwm调光的智能多功能台灯设计毕业设计论文内容摘要:

uchar xdata IRDATABUF[4]。 /* 数据缓冲区 */ sbit IR=P3^2。 uint xdata TimeBUF[33]。 /* 时间缓冲区 */ uint xdata TimeCount =0。 /* 时间计数器 */ /***********************红外处理程序 ****************************/ void IR_CL() { uchar i,j。 uint IRDATA = 0。 14 if( TimeCount == 33 ) /* 收到一包数据 */ { TR1 = 0。 TH0 = 0。 TL0 = 0。 TimeCount = 0。 for( i = 0。 i 4。 i++ ) /* 根据时间计算遥 控器发送的字节 */ { for( j = 1。 j 9。 j++ ) { IRDATA = 1。 if( TimeBUF[ i * 8 + j ] = 1800 ) /* 时间大于 2毫秒的位为 1,否则为 0 */ { IRDATA |= 0x80。 } } IRDATABUF[ i ] = IRDATA。 IRDATA = 0。 } EX0 = 1。 } } /****************************************************************/ /*延时 /****************************************************************/ void delayms(unsigned int ms) { unsigned int x。 for(。 ms。 ms) //ms=0 则跳出 for(x = 1000。 x。 x)。 } //*****************// //以下是 DS18B20 驱动程序 //*****************// sbit DQ=P1^1。 //温度输出入口 unsigned char data temper_data[2]={0x00,0x00}。 //读出温度暂放 unsigned char data _1820display[9]={0x00}。 //显示单元数据,共 4 个数据和一个运算暂用 unsigned int temper。 //**************温度小数部分用查表法 ***********// 15 unsigned char code ditab[16]= { 0x00,0x01,0x01,0x02, 0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07, 0x08,0x08,0x09,0x09 }。 /*****************11us 延时函数 *************************/ // void _18B20_delay(unsigned int t) { for (。 t0。 t)。 } /****************DS18B20 复位函数 ************************/ void _18B20_reset(void) { char presence=1。 while(presence) { while(presence) { DQ=1。 _nop_()。 _nop_()。 //从高拉到低 DQ=0。 _18B20_delay(50)。 //550 us DQ=1。 _18B20_delay(6)。 //66 us presence=DQ。 //presence=0 复位成功,继续下一步 } _18B20_delay(45)。 //延时 500 us presence=~DQ。 } DQ=1。 //拉高电平 } /****************DS18B20 写一字节命令函数 ************************/ void _18B20_write(unsigned char val) { unsigned char i。 for(i=8。 i0。 i) { DQ=1。 _nop_()。 _nop_()。 //从高拉到低 DQ=0。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 //5 us 16 DQ=valamp。 0x01。 //最低位移出 _18B20_delay(6)。 //66 us val=val/2。 //右移一位 } DQ=1。 _18B20_delay(1)。 } /****************DS18B20 读一字节函数 ***********************/ unsigned char _18B20read_byte(void) { unsigned char i。 unsigned char value=0。 for(i=8。 i0。 i) { DQ=1。 _nop_()。 _nop_()。 //从高拉到低 value=1。 DQ=0。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 //4 us DQ=1。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 //4 us if(DQ)value|=0x80。 _18B20_delay(6)。 //66 us } DQ=1。 return(value)。 } /****************读出温度函数 ***********************/ unsigned int _18B20_read() { _18B20_reset()。 //总线复位 _18B20_delay(200)。 _18B20_write(0xcc)。 //发命令 _18B20_write(0x44)。 //发转换命令 _18B20_reset()。 _18B20_delay(1)。 _18B20_write(0xcc)。 //发命令 _18B20_write(0xbe)。 temper_data[0]=_18B20read_byte()。 //读温度的低字节 temper_data[1]=_18B20read_byte()。 //读温度的高字节 temper=temper_data[1]。 temper=8。 temper=temper|temper_data[0]。 // 两字节合成一个整型变量 17 return temper。 //返回温度值 } /****************温度数据处理函数 ************************/ //二进 制高字节的低半字节和低字节的高半字节组成一字节,这个 //字节的二进制转换为十进制后就是温度值的百、十、个位值,而剩下 //的低字节的低半字节转化十进制后,就是温度值的小数部分 /********************************************************/ void _18B20_work(unsigned int tem) { unsigned char n=0。 if(tem6348) // 温度值正负判断 { tem=65536tem。 n=1。 } // 负温度求补码,标志位置 1 _1820display[4]=temamp。 0x0f。 // 取小数部分的值 _1820display[0]=ditab[_1820display[4]]。 // 存入小数部分显示值 _1820display[4]=tem4。 // 取中间八位,即整数部分的值 _1820display[3]=_1820display[4]/100。 // 取百位数据暂存 _1820display[1]=_1820display[4]%100。 // 取后两位数据暂存 _1820display[2]=_1820display[1]/10。 // 取十位数据暂存 _1820display[1]=_1820display[1]%10。 /******************??????????**************************/ if(!_1820display[3]) { _1820display[3]=39。 39。 39。 039。 //????0???? if(!_1820display[2]) _1820display[2]=39。 39。 39。 039。 //????0???? } if(n) _1820display[3]=39。 39。 39。 039。 //????????? } /******************DS18B20 初始化 **************************/ void _18B20_init()//18B20??? { _18B20_reset()。 //开机先转换一次 _18B20_write(0xcc)。 //Skip ROM _18B20_write(0x44)。 //发转换命令 } //以下是 1602 驱动程序 sbit LCD_RS = P2^5。 18 sbit LCD_RW = P2^6。 sbit LCD_E = P2^7。 define LCD_DATA P0 /************************************************** ** 延时 1MS ****************************************************/ void delay(unsigned int z) { unsigned int x,y。 for(x=z。 x0。 x) for(y=114。 y0。 y)。 } /*******************1602 写数据 ************************/ void WriteDataLcd(unsigned char wdata) { LCD_RW=0。 LCD_RS=1。 LCD_DATA=wdata。 delay(1)。 LCD_E=1。 delay(1)。 LCD_E=0。 } /******************1602 写命令 ***********************/ void WriteCommandLcd(unsigned char wdata) { LCD_RW=0。 LCD_RS=0。 LCD_DATA=wdata。 delay(1)。 LCD_E=1。 delay(1)。 LCD_E=0。 } uchar code hanzi[4][8]= //中文汉字库 { 0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00, //日 0x0f,0x0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。