首页 (精品)单片机程序知识点剖析207

(精品)单片机程序知识点剖析207

举报
开通vip

(精品)单片机程序知识点剖析207单片机程序知识点按键扫描支持连续按一般思路u8KEY_Scan(void)两个等于控制占空比{timer0()interrupt1if(KEY按下){{t++;//每次定时器溢出加1delay_ms(10);//延时10-20ms,防抖。if(t==250)//PWM周期100个单位if(KEY确实按下)returnKEY_Value;{return无效值;t=0;/...

(精品)单片机程序知识点剖析207
单片机程序知识点按键扫描支持连续按一般思路u8KEY_Scan(void)两个等于控制占空比{timer0()interrupt1if(KEY按下){{t++;//每次定时器溢出加1delay_ms(10);//延时10-20ms,防抖。if(t==250)//PWM周期100个单位if(KEY确实按下)returnKEY_Value;{return无效值;t=0;//使t=0,开始新的PWM周期}P1=0x00;//输出端口}}按键扫描不支持连续按一般思路//按照当前占空比切换输出为高电平if(PWM_T==t)u8KEY_Scan(void){{P1=0xff;staticu8key_up=1;}}if(key_up&&KEY按下)数码管动态显示{delay_ms(10);//延时,防抖unsignedcharcodekey_up=0;//标记这次key已经按DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,下0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0xif(KEY确实按下)79,0x71};//显示段码值0~F{unsignedcharcodereturnKEY_VALUE;WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xb}f,0x7f};/分别对应相应的数码管点亮,即位码}elseif(KEY没有按下)key_up=1;while(1)return没有按下{}DataPort=WeiMa[i];//取位码串口通讯2LATCH2=1;//位锁存LATCH2=0;voidUART()interrupt4//取显示数据,段码{DataPort=DuanMa[num+i];if(RI)//检测是否接收完成LATCH1=1;//段锁存{LATCH1=0;num=SBUF;//num取出接收缓存器的值//扫描间隙延时,时间太长会闪烁,太P1=SBUF;短会造成重影num++;Delay(200);RI=0;i++;SBUF=num;//检测8位扫描完全结束?如扫描完成则while(!TI);从第一个开始再次扫描8位TI=0;}}if(8==i)i=0;}第1页数码管动态显示/*------------------------------------------------显示函数,用于动态扫描数码管输入参数FirstBit 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示需要显示的第一位,如赋值2表示从第三个数码管开始显示,如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2------------------------------------------------*/存储显示值的数组unsignedcharTempData[10];分解显示信息,如要显示68,则68/10=668%10=8TempData[0]=dofly_DuanMa[num/10];TempData[1]=dofly_DuanMa[num%10];voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;i>1)|0x80;第7页}}}}红外接受1voidint0()interrupt0//定义外部中断0{staticuchari;IRdata的第一个位if((IRtime<53)&&(IRtime>=32))i=0;/IRdata[i]=IRtime;//以T0的溢出次数来//计算脉宽,把这个时间//存到数组里面到后面判断IRtime=0;//计数清零,下一个下降沿的时//候在存入脉宽i++;//计数脉宽存入的次数if(i==33){IRok=1;//那么表示脉宽检测完毕i=0;//把脉宽计数清零准备下次存入}}else{IRtime=0;//引导码开始进入把脉宽计数//清零开始计数startflag=1;//开始处理标志位置1}}//提取它的33次脉宽进行数据解码voidIRcordpro(){uchari,j,k,cord,value;=1;从第一位脉宽开始取丢弃引导码脉宽for(i=0;i<4;i++){for(j=0;j<8;j++){cord=IRdata[k];//把脉宽存入cordstaticbitstartflag;//开始储存脉宽标志位if(startflag)//开始接收脉宽检测{/*判断是否是引导码,底电平9000us+高4500us,这个自己可以算我以11.0592来算了NEC 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 的引导码低8000-10000+高4000-5000如果已经接收了引导码那么i不会被置0就会开始依次存入脉宽*/如果是引导码那么执行i=0把他存到//如果脉宽大于我11.0592的t0溢出率为约278us*5=1390那么判断为1if(cord>5)value=value|0x80;//value位左移依次接收8位数据。if(j<7)value=value>>1;}k++;//每执行一次脉宽位加1}IRcord[i]=value;。value=0;//清零value方便下次在存入数据}IRpro_ok=1;//接收完4个字节后IRprook//置1表示红外解码完成}数据转字符在1602显示charcodeTab[16]="0123456789ABCDEF";voidIr_work(void){//处理客户码TempData[0]=Tab[IRcord[0]/16];TempData[1]=Tab[IRcord[0]%16];TempData[2]='-';//处理客户码TempData[3]=Tab[IRcord[1]/16];TempData[4]=Tab[IRcord[1]%16];TempData[5]='-';//处理数据码TempData[6]=Tab[IRcord[2]/16];TempData[7]=Tab[IRcord[2]%16];TempData[8]='-';//处理数据反码第8页TempData[9]=Tab[IRcord[3]/16];}TempData[10]=Tab[IRcord[3]%16];LCD_Write_String(5,1,TempData);irpro_ok=0;//处理完成标志8*8点阵流动显示发送一个字节------------------------------------------------*/while(1)voidSendByte(unsignedchardat){{for(k=0;k<=112;k++)//所有的字符个数SBUF=dat;//延时长度,改变此值可以改变流动速度while(!TI);for(l=20;l>0;l--)TI=0;for(i=0;i<=7;i++)//8列显示}{/*------------------------------------------------SendSeg(segout[7-i]);发送一个字符串//写入字节方向改变------------------------------------------------*/Send2Byte(~(*(tab+i+k)),0xff,1);voidSendStr(unsignedchar*s)Out595();{DelayMs(1);//\0表示字符串结束标志,Send2Byte(0xff,0xff,0);//delay(10);防止重影通过检测是否字符串末尾Out595();while(*s!='\0')}{}SendByte(*s);串口通讯1s++;}/*------------------------------------------------}DS1302如图所示,时钟日历寄存器包含在7个读/写寄存器内,读/写寄存器中的数据是BCD码。秒寄存器(81h、80h)的BIT7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。小时寄存器(85h、84h)的BIT7用于定义DS1302是运行于12小时模式还是24小时第9页模式,当为1时,选择12小时模式,此时BIT5为AM/PM位,在24小时模式时此位为小时数据位。控制寄存器(8Fh、8Eh)的BIT7是写保护位(WP),其它7位均为0。在任何对时钟或RAM读写操作之前,WP位必须为0。当WP位为1时,不能对任何时钟日历寄存器或RAM进行写操作。DS1302的工作模式寄存器如图下所示所谓突发模式是指一次传送多个字节的时钟信号或RAM数据。DS1302通信时序DS1302读写数据时序,图8为读一字节时序,图9为写一字节时序,数据的传输是从最低位开始(BIT0)。数据是以位(BIT)为单位依次写入或读出,读写数据操作中SCLK上升沿时执行写入数据,下降沿时执行读出数据。读数据:CE端从低到高的一个上升沿开始允许开始读数据,拉低CE端则禁止读写数据;开始的8个SCLK周期,写命令字节,数据的后8个SCLK周期读出数据。写数据:CE端从低到高的一个上升沿开始允许开始写数据,拉低CE端则禁止读写数据;开始的8个SCLK周期,写命令字节,数据的后8个SCLK周期写入数据。第10页第11页
本文档为【(精品)单片机程序知识点剖析207】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥13.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
is_090279
暂无简介~
格式:doc
大小:542KB
软件:Word
页数:0
分类:
上传时间:2021-09-19
浏览量:4