红外遥控编码原理及C程序,51单片机红外遥控
红外遥控和C语言51红外遥控解码程序设计实例
红外遥控和C语言51红外遥控解码程序设计实例红外遥控和C语言51红外遥控解码程序设计实例什么是红外线?人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。
其中红光的波长范围为0.62~0.76μm;比红光波长还长的光叫红外线。
红外遥控在生产和生活中应用越来越广泛,不同的红外遥控芯片有不同的发码协议,但一般都是由引导码,系统码,键码三部分组成.红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。
红外发光二极管一般有黑色、深蓝、透明三种颜色。
红外遥控系统一般分发射和接收两个部分。
发射部分的主要元件为红外发光二极管。
目前大量使用的红外发光二极管发出的红外线波长为940mm左右,外形与普通φ5发光二极管相同。
接收部分的红外接收管是一种光敏二极管。
红外发光二极管一般有圆形和方形两种。
由于红外发光二极管的发射功率一般都较小(100mW左右),所以红外接收二极管接收到的信号比较微弱,因此就要增加高增益放大电路。
最近几年大多都采用成品红外接收头。
成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封装。
均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VO或OUT)。
红外接收头的引脚排列因型号不同而不尽相同,可参考厂家的使用说明。
成品红外接收头的优点是不需要复杂的调试和外壳屏蔽,使用起来如同一只三极管,非常方便。
但在使用时注意成品红外接收头的载波频率。
红外遥控常用的载波频率为38kHz,这是由发射端所使用455kHz晶振来决定的。
在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz?12?37.9kHz?38kHz。
也有一些遥控系统采用36 kHz、40kHz、56 kHz等,由发射端晶振的振荡频率来决定。
红外遥控的特点是不影响周边环境的、不干扰其他电器设备。
室内近距离(小于10米)遥控中得到了广泛的应用。
红外遥控在生产和生活中应用越来越广泛,不同的红外遥控芯片有不同的发码协议,但一般都是由引导码,系统码,键码三部分组成.引导码是告诉接收机准备接收红外遥控码.系统码是识别码,不同的遥控芯片有不同的误别码,以免搞错.遥控器上不同的按键有不同的键码,系统码和键码都是16位码,8位正码,8位反码.如SC6122的系统码是FF00,FF和00互为反码,键码1为EF10也是互为反码.SC6122的引导码为低电平为9000微秒,高电平为4500微秒.当然高电平不可能精确为9000微秒,在8000微秒到10000微秒都看作是正常范围,低电平在4000-5000之间都看作是正常范围.引导码后的32位编码(16位系统码和16位不管高低电平,载波时间都是560微秒,但低电平持续时间是1125微秒,高键码) 电平持续时间是2250微秒,所以低电平除去载波时间大约是560微秒,高电平除低电平也有一个波动范围,在400-700之间都看作去载波时间大约是1680微秒.是正常的,具体多少可以通过示波器测量出来.高电平也有一个波动范围,在400-2000之间都看作是正常的,具体多少也是根据经验.当然范围越宽,捕捉红外线的范围也越宽,越精确.在捕捉到有高低电平之间,在560-1680之间取一个中间值1120微秒,认为小于1120微秒是低电平,大于1120微秒是高电平.////////////////////////////////////////////////////////红外接收后的数据通过UART发出//晶振:12M//author:cole//date:09.6.6//////////////////////////////////////////////////////#include reg52.h void uart_init(void);#define c(x)(x)sbit Ir_Pin=P3^2;unsigned char Ir_Buf[4];//用于保存解码结果 unsigned int Ir_Get_Low() {TL0=0;TH0=0;TR0=1;while(~Ir_Pin&&(TH0&0x80)==0); TR0=0;return TH0*256+TL0;}//===unsigned int Ir_Get_High(){TL0=0;TH0=0;TR0=1;while(Ir_Pin&&(TH0&0x80)==0); TR0=0;return TH0*256+TL0; }//==main(){unsigned int temp; char i,j;P3=0xff;uart_init();do{restart:while(Ir_Pin);temp=Ir_Get_Low(); if(temp c(8500)||temp c(9500))continue;//引导脉冲低电平9000temp=Ir_Get_High();if(temp c(4000)||temp c(5000))continue;//引导脉冲高电平4500for(i=0;i 4;i++)//4个字节 {for(j=0;j 8;j++)//每个字节8位{temp=Ir_Get_Low();if(temp c(200)||temp c(800))goto restart; temp=Ir_Get_High();if(temp c(200)||temp c(2000))goto restart;Ir_Buf[i]=1;if(temp c(1120))Ir_Buf[i]|=0x80; }}for(i=2;i 4;i++){SBUF=Ir_Buf[i];while(TI==0);TI=0;}}while(1);}///////////////////////////////////////////////////////////UART初始化//波特率:9600/////////////////////////////////////////////////////////void uart_init(void) {unsigned char u;ET1=0;TMOD=0x21;//定时器1工作在方式2(自动重装) SCON=0x50;//10位uart,容许串行接受 TH1=0xFD;TL1=0xFD;u=SBUF;TR1=1;}。
51单片机红外解码资料+源代码
位地 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 址
源代码如下: #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7;
uchar irtime; //红外时间 uchar startflag; //启动接收 uchar irdata[33]; uchar bitnum; uchar irreceiveok; //红外接收完毕 uchar ircode[4]; uchar irprosok; uchar disp[8]; uchar code smg_du[]={
发射器发射的的信号为
接收器接收到的信号为
即 9ms 低电平后 4.5ms 高电平作为起始码,之后接受到两次 8 位客户码,一次八位数据码,和一次八位数据反码。
遥控器在按键按下之后周期性的发出同一种 32 位二进制编 码周期约为 108ms,一组码持续时间随本身的“0”“1”个数不同
而不同。大约在 45~63ms 之间,当一个键按下 36ms,振荡器使芯 片激活,将发射一组 108ms 的编码脉冲这 108ms 编码脉冲由一个 起始码(9ms),一个结束码(4.5ms),低八位地址码(9~18ms), 高八位地址码(9~18ms),八位数据码(9~18ms),和这八位数据 码反码(9~18ms),如果按下超过 108ms 仍未松开,接下来发射 的代码(连发代码)将仅有起始码(9ms)和结束码(2.5ms)组 成。
解码的关键是如何识别零和一: “0”和“1”都是以 0.56ms 低电平开始的,不同的是高电平 宽度不同,“0”为 0.56ms“1”为 1.168ms,所以必须根据高电平 宽度来区别“0”和“1”。 如果从 0.56ms 低电平过后,开始延时,0.56ms 后,若读到的 电平为低,说明该位为零,反之则为一,可靠其间,延时必须比 0.56ms'长一些,又不能超过 1.12ms,否则如果该位为零,读到的 已是下一位高电平,因此取(1.12+0.56)/2=0.84ms 最为可靠,一 般取 0.84ms 左右均可。根据码的格式,应该等待 9ms 起始码和 4.5ms 结束码完成后才能读码。 备注:定时器/计数器控制寄存器 TCON 位序 D7 D6 D5 D4 D3 D2 D1 D0 号 位符 TF1 TR1 TF0 IR0 IE1 IT1 IE0 IT0 号
基于51单片机的红外遥控编码解码的C语言程序和电路[1]
请勿转载!!!作品功能简介:当学习键按下后,红外接收头便可将接受到的信号存储到单片机中。
在接受到通用遥控器发出的信号后,如果按下发射键,单片机将调出刚刚储存的信息,通过红外发射头发射出和遥控器一样的信号来达到控制的作用。
#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit studylamp=P2^7;sbit lamp=P2^6;sbit studykey=P3^2;sbit remotein=P1^1;sbit remoteout=P1^0;sbit txkey=P2^0;uint i,j,m=255,n,k,s;uchar idata remotedata[206];uint head;uint remdata;//一毫秒延时程序delay1ms(uint t){for(i=0;i<t;i++)for(i=0;j<120;j++);}//初始化函数clearmen(){studylamp=1;lamp=1;remoteout=0;remotein=1;for(i=0;i<206;i++){remotedata[i]=0x00;}IE=0x00;IP=0x01;TMOD=0x22;PCON=0X00;TH1=0xf3;TL1=0xf3;IT0=1;EX0=1;EA=1;}//键功能函数void key_tx(){if(txkey==0){delay1ms(1);if(txkey==0){while(txkey==0);ET1=1;TR1=1;for(i=head;i>0;i--);remoteout=0;ET1=0;TR1=0;n=0;while(1){lamp=0;studylamp=1;if(remotedata[n]==0x00){delay1ms(10);break;}for(i=remotedata[n];i>0;i--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}n++;ET1=1;TR1=1;for(i=remotedata[n];i>0;i--);remoteout=0;ET1=0;TR1=0;n++;}}}}//主函数void main(){clearmen(); //初始化while(1){key_tx(); //按键扫描}}//40KHz发生器void time_intt1(void) interrupt 3{remoteout=~remoteout;}//外中断0void intt0(void) interrupt 0{ET1=0;TR1=0;EX0=0;EA=0;head=0;while(studykey==0);studylamp=0;lamp=1;while(remotein==1);head=0;while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();head++;}n=0;remdata=0x0000;while(1){while(remotein==1){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;}if(remdata>m) //高电平>5毫秒退出 {remotedata[n]=0x00;EX0=1;EA=1;goto end;}remotedata[n]=remdata;n++;remdata=0x0000;while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;}remotedata[n]=remdata;n++;remdata=0x00;}end: lamp=0;studylamp=0;}电路:实物:2009-06-25 12:39。
51单片机红外遥控程序
unsigned long m,Tc;
unsigned char IrOK;
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
dula=0;
P0=table[show[0]];
MOV R7,#202
DELAY882_A
NOP
NOP
DJNZ R7,DELAY882_A
RET
;=============================1000
DELAY1000 ;1.085x ((229x4)+5)=999.285
MOV R7,#229
DELAY1000_A
NOP
NOP
DJNZ R7,DELAY1000_A
Qq:735491739
红外遥控发射芯片采用PPM编码方式,当发射器按键按下后,将发射一组108ms的编码脉冲。遥控编码脉冲由前导码、8位用户码、8位用户码的反码、8位操作码以及8位操作码的反码组成。通过对用户码的检验,每个遥控器只能控制一个设备动作,这样可以有效地防止多个设备之间的干扰。编码后面还要有编码的反码,用来检验编码接收的正确性,防止误操作,增强系统的可靠性。前导码是一个遥控码的起始部分,由一个9ms的低电平(起始码)和一个4. 5ms的高电平(结果码)组成,作为接受数据的准备脉冲。以脉宽为0. 56ms、周期为1. 12ms的组合表示二进制的“0”;以脉宽为1. 68ms、周期为2. 24ms的组合表示二进制的“1”。如果按键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2. 5ms)组成。
51单片机设计的红外线遥控器电路图及工作原理
51单片机设计的红外线遥控器电路图及工作原理你家里是否有一个电视机遥控器或者空调机遥控器呢?你是否也想让它遥控其他的电器甚至让它遥控您的电脑呢?那好,跟我一起做这个“红外遥控解码器”。
该小制作所需要的元件很少:单片机TA89C2051一只,RS232接口电平与TTL电平转换心片MAX232CPE 一只,红外接收管一只,晶振11.0592MHz,电解电容10uF4只,10uF 一只,电阻1K1个,300欧姆左右1个,瓷片电容30P2个。
发光二极管8个。
价钱不足20元。
电路图及原理:主控制单元是单片机AT89C2051,中断口INT0跟红外接受管U1相连,接收红外信号的脉冲,8个发光二极管作为显示解码输出(也可以用来扩展接其他控制电路),U3是跟电脑串行口RS232相连时的电平转换心片,9、10脚分别与单片机的1、2脚相连,(1脚为串行接收,2脚为串行发送),MAX232CPE的7、8脚分别接电脑串行口的2(接收)脚、3(发送脚)。
晶振采用11.0592MHz,这样才能使得通讯的波特率达到9600b/s,电脑一般默认值是9600b/s、8位数据位、1位停止位、无校验位。
电路就这么简单了,现在分析具体的编程过程吧。
如图所示,panasonic遥控器的波形是这样的(经过反复测试的结果)。
开始位是以3.6ms低电平然后是3.6ms高电平,然后数据表示形式是0.9ms低电平0.9ms 高电平周期为1.8ms表示“0”,0.9ms低电平2.4ms高电平周期为3.3ms表示“1”,编写程序时,以大于3.4ms小于3.8ms高电平为起始位,以大于2.2ms小于2.7ms高电平表示“1”,大于0.84ms小于1.11ms高电平表示“0”。
因此,我们主要用单片机测量高电平的长短来确定是“1”还是“0”即可。
定时器0的工作方式设置为方式1:mov tmod,#09h,这样设置定时器0即是把GATE置1,16位计数器,最大计数值为2的16次方个机器周期,此方式由外中断INT0控制,即INT0为高时才允许计数器计数。
51单片机红外遥控解码程序
51单片机红外遥控解码程序类别:单片机/DSP 阅读:2975编者按:以下是网友编写的遥控解码程序!一种用延时等待的解码方法,比较容易理解,但缺点是占用CPU运行时间,第二种方法用定时器和外中断的解码方法,初学不易理解,但优点也很明显,第二种方法如果能解决连发解码就比较完美,更完善的红外遥控解码程序,请参考本站TOPA V-2008,TOP51-2005所配程序。
解码方法一;//单片机接收红外解读程序\\;硬件结构:8951,P0口数码管段码,P2.0-P2.3为位,P1为8个LED;P3.2为红外接收头,P2.7蜂鸣器,晶振12M;适用UPD6121 6122芯片接收;---------------------------------------------------------ORG 0000HAJMP MAIN ;转入主程序ORG 0003H ;外部中断P3.2脚INT0入口地址AJMP INT ;转入外部中断服务子程序(解码程序);以下为主程序进行CPU中断方式设置MAIN: SETB EA ;打开CPU总中断请求SETB IT0 ;设定INT0的触发方式为脉冲下降沿触发SETB EX0 ;打开INT0中断请求AJMP $;以下为进入P3.2脚外部中断子程序,也就是解码程序INT: CLR EA ;暂时关闭CPU的所有中断请求MOV R6,#10SB: ACALL YS1 ;调用882微秒延时子程序JB P3.2,EXIT ;延时882微秒后判断P3.2脚是否出现高; 电平如果有就退出解码程序DJNZ R6, SB ;重复10次,目的是检测在8820微秒内;如果出现高电平就退出解码程序;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB P3.2, $ ;等待高电平避开9毫秒低电平引导脉冲ACALL YS2 ;延时4.74毫秒避开4.5毫秒的结果码MOV R1,#1AH ;设定1AH为起始RAM区MOV R2,#4;PP: MOV R3,#8JJJJ: JNB P3.2,$ ;等待地址码第一位的高电平信号LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信;号此时的高低电平状态MOV C,P3.2 ;将P3.2引脚此时的电平状态0或1存入C中JNC UUU ;如果为0就跳转到UUULCALL YS3;UUU: MOV A,@R1 ;将R1中地址的给ARRC A ;将C中的值0或1移入A中的最低位MOV @R1,A ;将A中的数暂时存放在R1中DJNZ R3,JJJJ ;接收地址码的高8位INC R1 ;对R1中的值加1,换下一个RAMDJNZ R2,PP ;接收完16位地址码和8位数据码和8位数据反; 码,存放在1AH/1BH/1CH/1DH的RAM中MOV A,1CH ;比较数据码和数据反码是否正确?CPL AXRL A,1DH ;将1CH的值取反后和1DH比较不同则无效丢弃,核对数据是否准确JNZ EXITMOV DPTR,#TAB ;表头地址送指针MOV A,1DHANL A,#0FH ;相与,得到低四位码MOVC A,@A+DPTRMOV 1EH,A ;查表得表码存入1EHMOV A,1DHSWAP AANL A,#0FHMOVC A,@A+DPTRMOV 1FH,A ;查表得高四位码存入1FMOV R7,#20HDISP:MOV P0,1FH ;送数码管显示CLR P2.1ACALL YS2SETB P2.1MOV P0,1EHCLR P2.2ACALL YS2SETB P2.2MOV P1,1DH ;将按键的键值通过P1口的8个LED显示出来!CLR P2.7 ;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功LCALL YS2SETB P2.7 ;蜂鸣器停止DJNZ R7,DISPEXIT: SETB EA ;允许中断RETI ;退出解码子程序YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒D1: MOV R5,#20DJNZ R5,$DJNZ R4,D1RETYS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒D2: MOV R5,#235DJNZ R5,$DJNZ R4,D2RETYS3: MOV R4,#2 ;延时程序3,精确延时1000微秒D3:MOV R5,#248DJNZ R5,$DJNZ R4,D3RETTAB: DB 0C0H,0DEH,0A2H,8AH,9CH,89H,81H,0DAH,80H,88H,90H,85H,0E1H,86H,0A1H,0B1H;数据表,0-9-A-FEND解码方法二你的解码程序和我现在用的解码程序大体是一样的,我自己实际做了一下,发现按下遥控器,接收到红外信号后,数码管闪的厉害。
自己写的51单片机的红外线遥控接收程序(C语言)
//51单片机做的红外遥控实验(C语言)#include<reg51.h>#define u8 unsigned char#define u16 unsigned int#define ID 0x00 //本遥控器的ID号sbit ir=P3^3;code u8 seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9的段码code u8 s[]={1,0x40,0x48,0x04,0x02,0x05,0x54,0x0A,0x1E,0x0E}; u8 buf[4];bit ir_f=0;u8 nu;void delay(u16 x){while(x--);}void show(u16 x){u8 i=0,k=0;u8 s[4];kk:s[i]=x%10;if((x/10)>=1){x=x/10;i++;goto kk;}k=i+1;for(i=0;i<k;i++){P0=seg[s[i]];P2=~(8>>i);delay(300);P0=0XFF;P2=0XFF;}}void timer0_init(){TH0=0;TL0=0;TMOD|=0x01;TR0=0;}u16 low_test(){u16 t;TR0=1;while((ir==0)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0; //t=(TH*256+TL0);//机器周期数return t;}u16 high_test(){u16 t;TR0=1;while((ir==1)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0;return t;}/*u16 time_test(bit x){}*/u8 receive_8bit(){u8 d,i;u16 t;for(i=0;i<8;i++){t=low_test();t=high_test();d>>=1;if((t>=2750)&&(t<=3100)){d|=0x80;}}return d;}void ir_decode(){u16 t;u8 i;if(ir==0)//有遥控信号{t=low_test();//8295-9000us,倍频的是16590-18000if((t>=14500)&&(t<=18000))//检查引导码低电平时间{t=high_test();if((t>=8000)&&(t<=9000))//检查高电平{for(i=0;i<4;i++){buf[i]=receive_8bit();}if(buf[0]==(~buf[1]))//检查系统码是否正确{if(buf[0]==ID){if(buf[2]==(~buf[3])){//具体按键处理ir_f=1; //遥控有效}}}}}}}/*void key(){if(buf[2]==0x40){P1^=(1<<0);}if(buf[2]==0x48){P1^=(1<<1);}}*/void ir_execuse(){if(ir_f==1){switch(buf[2]){case 0x40:P1^=(1<<0);break;case 0x48:P1^=(1<<1);break;case 0x04:P1^=(1<<2);break;case 0x02:P1^=(1<<3);break;case 0x05:P1^=(1<<4);break;case 0x54:P1^=(1<<5);break;case 0x0A:P1^=(1<<6);break;case 0x1E:P1^=(1<<7);break;}ir_f=0;}}void show_d(){u8 j;for(j=0;j<10;j++){if(s[j]==buf[2]){nu=j;break;}}show(nu);}void isr_init(){EA=1;EX1=1;//外部中断,一直看3.3有没有下降沿。
51红外遥控原理
51红外遥控原理红外遥控技术是一种利用红外线进行远程无线控制的技术,广泛应用于家电、电视、空调、音响等设备上。
其原理是利用红外线的特性进行信息的传输与解码。
首先,红外遥控的原理基于红外线的传播特性。
红外线是一种波长较长的电磁辐射,其波长范围为0.75微米到1000微米。
红外线具有穿透力强、传播速度快、直线传播等特点,且几乎不受可见光的影响。
因此,红外线可以穿透透明的物体,如玻璃、塑料等,而不能穿透不透明的物体,如墙壁等。
在红外遥控中,遥控器是发射器,被控制的设备是接收器。
遥控器中包含一个红外线发射二极管,通过对其通电激活,在发射二极管前方会形成一个红外线发射区域。
而被控制的设备中则装有一个红外线接收头,用于接收发射器发出的红外线信号。
红外遥控的工作过程一般分为发射和接收两个步骤。
在发射过程中,当用户按下遥控器上的某个按键时,遥控器会从内部的码库中选择相应的红外线编码,通过发射二极管产生红外线信号。
这个红外线信号包含了具体的操作指令,如开关、音量调节、频道切换等。
发射二极管将红外线信号发出,在空气中以光的形式传播,然后被被控设备的红外线接收头接收。
在接收过程中,被控设备接收到红外线信号后,红外线接收头会将红外线转换为电信号,并将其传送给设备的中央处理芯片。
中央处理芯片会进行解码操作,将接收到的红外线信号解码成对应的指令。
然后,中央处理芯片根据解码结果执行相应的操作,控制设备的开关、音量、频道等。
例如,如果用户按下遥控器上的音量加键,中央处理芯片会解码出音量加的指令,并相应地改变设备的音量。
总体来说,红外遥控的原理是通过发射器发出红外线信号,经过空气传播到接收器,接收器将红外线信号转换成电信号并进行解码,最终通过中央处理芯片控制设备的操作。
通过这种原理,用户可以远程操控各种设备,实现便捷的家电控制。
需要注意的是,不同厂商之间的红外编码方式可能存在差异,这就需要设备的红外接收头能够识别出不同编码方式,并将其转换为标准的电信号进行解码。
51单片机红外遥控解码,很详细(汇编语言,C语言等)
//i++;
if(TH0<3)
b=1;
else b=0;
TH0=0;
TL0=0;
}
uchar hw_key()
{
uchar j,m;
//i=0;
hw_start(); //等待低电平到来
hw_pulse();
for(j=0;j<24;j++) //测试用户码脉冲宽度
{
hw_pulse();
}
for(j=0;j<8;j++) //测试键码脉冲宽度
{
hw_pulse();
if(b==1)
m=(m<<1)|1;
else
m<<=1;
}
return m; //键码
}
while(in==0); //高电平到了,
TR0=0; //关闭定+;
TH0=0;
TL0=0;
TR0=1; //高电平到了,启动定时器1,测试高电平宽度
while(in==1); //低电平到了,
TR0=0; //关闭定时器1,高电平宽度测试完
请注意甄别内容中的联系方式诱导购买等信息谨防诈骗
51单片机红外遥控解码,很详细(汇编语言,C语言等)
单片机源程序如下:
#include
#define hw_hs0038_ENTITY
#include "hw_hs0038.h"
sbit in=P3^2;
//uchar i=0;
//uchar k[2];
bit bdata b=0;
/*
void timer0(void) interrupt 1 using 1
单片机的红外遥控器编码原理与实现
单片机的红外遥控器编码原理与实现红外遥控器是我们日常生活中常见的一种设备,用于控制电器设备的开关、音量调节等操作。
而单片机作为一种重要的电子元器件,可以通过编程来实现红外遥控器的功能。
本文将介绍单片机的红外遥控器编码原理和实现过程。
一、红外编码原理红外遥控器通过发送红外信号来控制电器设备的开关。
而红外编码原理是指在红外遥控器中,将按键的信息编码成红外信号发送出去。
在遥控器中,每个按键对应一个特定的红外编码。
当按下某个按键时,遥控器会将该按键的特定编码发送出去。
接收器设备会解码接收到的红外信号,并根据解码结果来执行相应的操作。
二、红外编码实现步骤1. 硬件准备实现红外遥控器编码,首先需要准备以下硬件设备:- 单片机模块- 红外发射模块- 按键模块- 电源供应模块2. 硬件连接将单片机模块、红外发射模块、按键模块和电源供应模块按照电路图进行连接。
确保连接正确并固定好各个模块。
3. 软件编程使用单片机的编程语言(如C语言)进行编程,实现红外遥控器的功能。
具体的编程步骤如下:- 初始化相关的引脚和中断,包括红外发射引脚和按键引脚。
- 设置红外编码的格式和协议,如NEC编码、SONY编码等。
- 通过按键模块检测按键是否被按下,如果按键被按下,则执行相应的红外编码发送操作。
- 根据按键的不同,发送不同的红外编码信号。
4. 红外编码发送编写代码实现红外编码信号的发送。
根据选择的编码协议和格式,在编程中设置相应的红外编码参数,并通过红外发射模块将编码信号发送出去。
5. 测试和调试完成编程后,进行测试和调试。
将红外编码器面对接收器设备,按下遥控器的按键,观察接收器设备是否成功接收到信号并执行相应的操作。
通过以上步骤,就可以实现单片机的红外遥控器编码功能。
三、红外编码的应用红外遥控器的编码原理可以应用于各种控制场景,例如家电控制、智能家居系统、工业自动化等。
通过编程,可以实现不同按键对应不同设备的控制,提高生活和工作的便利性。
51单片机红外接收解码程序(详细解析)
51单片机红外接收解码程序接收以S52单片机作为接收系统。
以S52的P3.3口作为接收端口,该端口是外部中断1。
这个接受程序是以XC866作为红外发送控制系统,接收程序如下:#include<reg52.h>//头文件#include<intrins.h>#define uchar unsigned char//宏定义#define uint unsigned intsbit HWRx=P3^3;//位声明code uchar Table[]=//共阴数码管0-9 a-f - 表{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};uchar Table_Data[8]={0,0,0,0,0,0,0,0};//用于显示的数组uchar Table_Rx[67];//用于存储判断接收是1或0的参数void Delay();//延时子函数void Display(uchar *lp,uchar lc)//显示{uchar i;//定义变量P2=0;//端口2为输出,关闭P1=P1&0xF8;//将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管for(i=0;i<lc;i++)//循环显示,采用动态扫描{P2=Table[lp[i]]; //查表法得到要显示数字的数码段if(lp[i]>0x7f)P2+=0x80;Delay();//延时P2=0;//清0端口,准备显示下位if(i==7)//检测显示完8位否,完成直接退出,不让P1口再加1,否则进位影响到第四位数据break;P1++;//点亮下一位数码管}}void main()//主函数{EA=1;//首先开启总中断EX1=1;//开启外部中断1IT1=1;//设置成下降沿触发方式while(1)//一直显示,其它由中断处理{Display(Table_Data,8);}}void Delay()//延时时间大约为31us,晶振12M{uchar i=13;while(i)i--;}void Delay_ms(uint z) //延时时间约为1ms*X晶振为12M{uint x=0,y=0;for(x=z;x>0;x--)for(y=54;y>0;y--);}void hongwai()interrupt 2//外部中断1 ,INT1(P3^3)连接红外线接收IC数据脚{uchar i,j,tmp;EX1=0;//关闭中断j=33;//传送一组数包括引导码1位,4个八位数据,总共33位i=0;//从第一维数组开始Delay_ms(10);if(HWRx){//然后再检测红线接收脚是有数据招收,有继续,没有则退出EX1=1;return;}while(j--){//循环接收33位数据,为何我们用到66位数组,我们可以不接收高电平时间常数,只接低电平常数就//可以判断1或0了,在这里我们都接收,还有一点要知道,接收波形是反向,在没有接收时端口为高电平tmp=0;Table_Rx[i]=1;//时间量从1开始while(!HWRx) //检测高低电平的变化,这里检测的是高电平{Table_Rx[i]++;//没变继续加1Delay();//家一个延时防止,计数值一下子就加满了tmp++;//加1if(tmp==250)break;}i++;tmp=0;Table_Rx[i]=1;//时间量从1开始while(HWRx)//检测高低电平的变化,这里检测的是低电平{Table_Rx[i]++; //没变继续加1Delay();//同上tmp++;//加1,用于判断是1还是0的,低电平来了if(tmp==250)break;}i++;}P1=0xf8;i=200;//加入循环延时,抗干扰while(i)//在有接收数据的时候显示一个H{tmp=255;while(tmp){tmp--;P2=0x76;}i--;}tmp=0;for(i=3;i<19;i++,i++)//处理发送的数据{tmp>>=1;//右移一位,接收低位在前if(Table_Rx[i]>30)//检测低电平时间超过30就确认为1 tmp+=0x80;}Table_Data[0]=tmp/16;//分开2位以16进制显示,用显示发送的数据Table_Data[1]=tmp%16;tmp=0;for(i=19;i<35;i++,i++)//同上{tmp>>=1;if(Table_Rx[i]>30)tmp+=0x80;}Table_Data[2]=tmp/16;Table_Data[3]=tmp%16;tmp=0;for(i=35;i<51;i++,i++){tmp>>=1;if(Table_Rx[i]>30)tmp+=0x80;}Table_Data[4]=tmp/16;Table_Data[5]=tmp%16;tmp=0;for(i=51;i<67;i++,i++){tmp>>=1;if(Table_Rx[i]>30)tmp+=0x80;}Table_Data[6]=tmp/16;Table_Data[7]=tmp%16;EX1=1;//刚进中断时关闭了分控,现在要打开}。
用单片机解码红外遥控器
用单片机解码红外遥控器遥控器使用方便,功能多.目前已广泛应用在电视机、VCD、DVD、空调等各种家用电器中,且价格便宜,市场上非常容易买到。
如果能将遥控器上许多的按键解码出来.用作单片机系统的输入.则解决了常规矩阵键盘线路板过大、布线复杂、占用I/O口过多的弊病。
而且通过使用遥控器,操作时可实现人与设备的分离,从而更加方便使用。
下面以TC9012编码芯片的遥控器为例。
谈谈如何用常用的51系统单片机进行遥控的解码。
一、编码格式1、0和1的编码遥控器发射的信号由一串O和1的二进制代码组成.不同的芯片对0和1的编码有所不同。
通常有曼彻斯特编码和脉冲宽度编码。
TC9012的O和1采用PWM方法编码,即脉冲宽度调制,其O码和1码如图1所示(以遥控接收输出的波形为例)。
O码由O.56ms低电平和0.56ms高电平组合而成.脉冲宽度为1.12ms.1码由0.56ms低电平和1.69ms高电平组合而成.脉冲宽度为2.25ms。
在编写解码程序时.通过判断脉冲的宽度,即可得到0或1。
2、按键的编码当我们按下遥控器的按键时,遥控器将发出如图2的一串二进制代码,我们称它为一帧数据。
根据各部分的功能。
可将它们分为5部分,分别为引导码、地址码、地址码、数据码、数据反码。
遥控器发射代码时.均是低位在前。
高位在后。
由图2分析可以得到.引导码高电平为4.5ms,低电平为4.5ms。
当接收到此码时.表示一帧数据的开始。
单片机可以准备接收下面的数据。
地址码由8位二进制组成,共256种.图中地址码重发了一次。
主要是加强遥控器的可靠性.如果两次地址码不相同.则说明本帧数据有错.应丢弃。
不同的设备可以拥有不同的地址码.因此。
同种编码的遥控器只要设置地址码不同,也不会相互干扰。
图中的地址码为十六进制的0EH(注意低位在前)。
在同一个遥控器中.所有按键发出的地址码都是相同的。
数据码为8位,可编码256种状态,代表实际所按下的键。
数据反码是数据码的各位求反,通过比较数据码与数据反码.可判断接收到的数据是否正确。
基于51单片机的红外遥控器设计
基于51单片机的红外遥控器设计近年来,随着智能家居的兴起,红外遥控器在我们的生活中扮演着越来越重要的角色。
本文将基于51单片机,设计一个简单的红外遥控器。
首先,我们需要了解红外遥控器的工作原理。
红外遥控器使用红外线来传输指令。
当用户按下遥控器上的按键时,红外发射器发射一个特定的红外信号。
接收器接收到这个信号后,将其转换成电信号,并将其发送到电子设备中,实现对设备的控制。
接下来,我们需要选择合适的红外发射器和接收器。
常见的红外发射器有红外LED,常见的红外接收器有红外接收头。
在选择红外发射器和接收器时,要根据其工作频率、传输距离、灵敏度等因素进行选择。
在本设计中,我们选择了工作频率为38kHz的红外发射器和接收器。
接下来,我们需要设计电路,并进行程序开发。
首先,我们需要连接红外发射器和接收器到51单片机上。
红外发射器的一个引脚连接到51单片机的I/O口,另一个引脚连接到正极电源,第三个引脚连接到电源的接地端。
红外接收器的输出引脚连接到51单片机的I/O口,电源和接地端分别连接到正负电源。
接下来,我们需要编写程序。
首先,我们需要设置51单片机的I/O 口为输入或输出。
然后,我们需要编写程序来发送红外信号。
我们可以使用PWM技术来模拟红外信号的脉冲。
当用户按下遥控器上的按键时,我们可以发送一个特定的脉冲序列,来控制电子设备。
同时,我们还需要编写程序来接收红外信号。
当红外接收器接收到红外信号时,会输出一个特定的电平信号。
我们可以使用外部中断来检测这个信号,并进行相应的处理。
在程序开发过程中,我们需要注意红外信号的协议。
常见的红外信号协议有NEC、SONY等。
我们需要根据所使用的红外接收器的协议来编写相应的程序。
最后,我们需要测试代码的功能和稳定性。
可以通过连接电子设备,按下遥控器上的按键,来测试红外信号的发送和接收功能。
如果一切正常,我们的红外遥控器设计就完成了。
总结起来,基于51单片机的红外遥控器设计是一个简单而有趣的项目。
51单片机解码红外遥控器原理
51单片机解码红外遥控器原理电视遥控器使用的是专用集成发射芯片来实现遥控码的发射,如东芝TC9012,飞利浦SAA3010T等,通常彩电遥控信号的发射,就是将某个按键所对应的控制指令和系统码(由0和1组成的序列),调制在38KHz的载波上,然后经放大、驱动红外发射管将信号发射出去。
不同公司的遥控芯片,采用的遥控码格式也不一样。
较普遍的有两种,一种是NEC标准,一种是PHILIPS 标准。
NEC标准:遥控载波的频率为38KHz(占空比为1:3);当某个按键按下时,系统首先发射一个完整的全码,如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。
一个完整的全码=引导码+用户码+用户码+数据码+数据反码。
其中,引导码高电平4.5ms,低电平4.5ms;系统码8位,数据码8位,共32位;其中前16 位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。
后16 位为8 位的操作码和8位的操作反码,用于核对数据是否接收准确。
收端根据数据码做出应该执行什么动作的判断。
连发代码是在持续按键时发送的码。
它告知接收端,某键是在被连续地按着。
NEC标准下的发射码表示发射数据时0用“0.56ms高电平+0.565ms低电平=1.125ms”表示,数据1用“高电平0.56ms +低电平1.69ms=2.25ms”表示即发射码“0”表示发射38khz的红外线0.56ms,停止发射0.565ms,发射码“1”表示发射38khz 的红外线0.56ms,停止发射1.69ms需要注意的是:当一体化接收头收到38kHz 红外信号时,输出端输出低电平,否则为高电平。
所以一体化接收头输了的波形是与发射波形是反向的,如图PHILIPS标准:载波频率为38KHz;没有简码,点按键时,控制码在1和0之间切换,若持续按键,则控制码不变。
一个全码=起始码‘11’+控制码+用户码+用户码,如图所示。
红外遥控编码原理及C程序,51单片机红外遥控
红外遥控解解码程序#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P1^0;sbit rs=P1^2;sbit ir=P3^2;sbit led=P1^3;sbit led2=P3^7;unsigned int LowTime,HighTime,x;unsigned char a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;unsigned char flag;//中断进入标志位uchar z[4];uchar code table[]={"husidonghahahah"};uchar code table1[]={"User Code:"};void delay(uint x){uint i,j;for(i=x;i>0;i--) //i=xms即延时约xms毫秒for(j=100;j>0;j--);}void write_com(uchar com){//写液晶命令函数rs=0;lcden=0;P2=com;delay(3);lcden=1;delay(3);lcden=0;}void write_date(uchar date){//写液晶数据函数rs=1;lcden=0;P2=date;delay(3);lcden=1;delay(3);lcden=0;}void init_anjian() //初始化按键{a=0;b=0;c=0;d=0;e=0;f=0;g=0;h=0;i=0;j=0;k=0;l=0;m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;u=0;}void init_1602(){//初始化函数uchar num;lcden=0;rs=0;write_com(0x38);//1602液晶初始化write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<14;num++)//写入液晶固定部分显示{write_date(table[num]);delay(3);}write_com(0x80+0x40);for(num=0;num<9;num++){write_date(table1[num]);delay(3);}}void write_dianya(uchar add,char date){//1602液晶刷新时分秒函数4为时,7为分,10为秒char shi,ge;shi=date%100/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void dingshiqi() //定时器记高低电平时间{TH0=0; //定时器高八位置0TL0=0; //定时器低八位置0TR0=1; //开启定时器0while(ir==0); //如果是低电平就等待,给低电平计时TR0=0; //关闭定时器T0LowTime=TH0*256+TL0; //保存低电平时间TH0=0; //定时器高八位置0TL0=0; //定时器低八位置0TR0=1; //开启定时器0while(ir==1); //如果是高电平就等待,给引导码高电平计时TR0=0; //关闭定时器T0HighTime=TH0*256+TL0; //保存高电平长度}void main(){char i=0;TMOD=0x01; //定时器T0作为定时模式ET0=1; //开T0中断IT0=0; //外部中断,下降沿触发EX0=1; //开外部中断EA=1; //开总中断init_1602();while(1){}}void inter0() interrupt 0 //开始解码{EX0=0; //关闭外部中断0,不再接受红外信号,只解码当前的红外信号。
单片机的红外遥控器解码原理与实现
单片机的红外遥控器解码原理与实现红外遥控器是我们日常生活中常见的电子设备,它通过使用红外线信号与接收器进行通信。
而在这个过程中,单片机起到了解码的重要作用。
本文将介绍单片机解码红外遥控器的原理以及实现方法。
一、红外遥控器的工作原理红外遥控器是一种使用红外线进行通信的设备,它主要由发送器和接收器两部分组成。
发送器将指令数据转换为红外脉冲信号并发送出去,接收器通过接收红外线信号并将其转换为电信号,进而解码为可识别的指令。
而单片机则负责接收并解码红外信号,将其转化为具体的操作。
二、单片机解码红外信号的原理单片机解码红外信号主要分为两个步骤:红外信号的接收和信号的解码处理。
1. 红外信号的接收单片机通过外部的红外接收器接收红外信号。
红外接收器可以通过外部电路将接收到的红外信号转换为电压信号,然后通过单片机的IO 口输入。
2. 信号的解码处理接收到的红外信号经过IO口输入后,单片机需要对信号进行解码处理。
解码的过程涉及到红外信号的标准化和解析。
对于常见的红外遥控器协议,单片机需要能够识别其编码方式,确定其协议格式。
这些协议通常包含了引导码、地址码和指令码等信息。
在解析红外信号时,单片机首先需要识别引导码。
引导码是红外信号的起始标志,通常由高、低电平组成,表示编码的开始。
单片机通过判断引导码的时间长度来确定信号的开始。
接下来,单片机需要识别地址码和指令码。
地址码是用来区分不同的红外遥控器设备,指令码则表示具体的操作指令。
单片机通过判断地址码和指令码的高、低电平时间长度来确定具体的操作。
三、单片机解码红外信号的实现方法单片机解码红外信号有多种实现方法,以下是一种简单的实现示例。
首先,需要连接红外接收器到单片机的IO口,将接收到的信号输入到单片机。
接收到的信号可以通过外部中断的方式触发单片机的中断服务程序。
然后,在中断服务程序中,单片机需要根据红外协议的规则,判断引导码、地址码和指令码的时间长度。
利用计时器或延时函数可以实现对信号时间的测量。
51单片机-毕业设计基于单片机设计的红外线遥控器
从光学的角度而言,红外光是频率低于红色光的不可见光,在无线光谱的整个频率中占有很小一个频率段,波长为0.75—100微秒之间,其中0。75—3微秒之间的红外光称为近红外,3—30微秒之间的红外光称为中红外,30—100微秒之间的称为远红外。红外光就其性质而言很简单,与普通光线的频率特性没有很大的区别,但是,由于任何有热量的物体均有能量产生,所以红外的利用非常广泛,而且不可取代,能否检测红外、能测到多少红外或者红外检测的技术是否可以应用于任何自然的或想象的场合是红外应用技术的关键.
四、主要参考文献:
[1]梅丽凤,王艳秋,张军等。单片机原理及接口技术,北京:清华大学出版社,2004年。
[2]戴峻峰,付丽辉。多功能红外线遥控器的设计,传感器世界。2002,8(12):16~18.
[3]李光飞,楼然苗,胡佳文等.单片机课程设计实例指导,北京:北京航空航天出版社,
2004年.
[4]苏长赞。红外线与超声波遥控,北京:人民邮电出版社.1995年.
3.4独立式按键结构……………………………………………………………10
3。5掉电保护与低功耗设计……………………………………………………10
3。5.1低功耗的实现方法……………………………………………………10
3。5.2掉电保护与低功耗设计………………………………………………11
3。6系统完整电路设计图………………………………………………………13
2010.6。26~2010。8.10
在老师指导下反复修改,完成设计
五、指导教师意见:
指导教师签名:2010年5月10日
六、系部意见:
系主任签名:2010年5月11日
基于单片机的红外线遥控器
摘要
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
case 0x19:j=1;//100+
break;
case 0x0d:k=1;//200+
break;
case 0x16:l=1;//0
break;
case 0x0c:m=1;//1
{
temp=temp>>1; //最先读出的是高位数据
dingshiqi();//定时器记高低电平时间,数据码
if((HighTime>300)&&(HighTime<900)) //说明该位是0
temp=temp&0x7f;
if((HighTime>1200)&&(HighTime<2200)) //说明该位是1
uchar code table1[]={"User Code:"};
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)//i=xms即延时约xms毫秒
for(j=100;j>0;j--);
}
void write_com(uchar com)
{//写液晶命令函数
{
a=0;b=0;c=0;d=0;
e=0;f=0;g=0;h=0;
i=0;j=0;k=0;l=0;
m=0;n=0;o=0;p=0;
q=0;r=0;s=0;t=0;
u=0;
}
void init_1602()
{//初始化函数
uchar num;
lcden=0;
rs=0;
write_com(0x38);//1602液晶初始化
while(1)
{
}
}
void inter0() interrupt 0 //开始解码
{
EX0=0;//关闭外部中断0,不再接受红外信号,只解码当前的红外信号。
dingshiqi();//定时器记高低电平时间,引导码
if((LowTime>8500)&&(LowTime<9500)&&(HighTime>3600)&&(HighTime<5000))
TR0=0;//关闭定时器T0
HighTime=TH0*256+TL0;//保存高电平长度
}
void main()
{
char i=0;
TMOD=0x01;//定时器T0作为定时模式
ET0=1;//开T0中断
IT0=0;//外部中断,下降沿触发
EX0=1;//开外部中断
EA=1;//开总中断
init_1602();
temp=temp|0x80;
}
z[i]=temp;//将解码出的字节值储存在a[i]
}
if(z[2]=~z[3])
{
led2=~led2;
x=z[2];
init_anjian();
switch(x)
{
case 0x45:a=1;//CH-
break;
case 0x46:b=1;//CH
break;
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<14;num++)//写入液晶固定部分显示
{
write_date(table[num]);
delay(3);
}
write_com(0x80+0x40);
case 0x47:c=1;//CH+
break;
case 0x44:d=1;//<<<<
break;
case 0x40:e=1;//>>>>
break;
case 0x43:f=1;//>>||
break;
case 0x07:g=1;//-
break;
case 0x15:h=1;//+
break;
case 0x09:i=1;//EQ
while(ir==0);//如果是低电平就等待,给低电平计时
TR0=0;//关闭定时器T0
LowTime=TH0*256+TL0;//保存低电平时间
TH0=0;//定时器高八位置0
TL0=0;//定时器低八位置0
TR0=1;//开启定时器0
while(ir==1);//如果是高电平就等待,给引导码高电平计时
ge=datБайду номын сангаас%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void dingshiqi()//定时器记高低电平时间
{
TH0=0;//定时器高八位置0
TL0=0;//定时器低八位置0
TR0=1;//开启定时器0
sbit led2=P3^7;
unsigned int LowTime,HighTime,x;
unsigned char a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;
unsigned char flag;//中断进入标志位
uchar z[4];
uchar code table[]={"husidonghahahah"};
//如果是引导码,就开始解码,否则放弃,引导码的低电平计时
//次数=9000us/1=9000,判断区间:(8300-500=7800,8300+500=8800)
{
uchar i,j;
uchar temp;
//led=~led;
for(i=0;i<4;i++) //连续读取4个用户码和键功能码
{
for(j=0;j<8;j++)//每个码有8位数字
rs=0;
lcden=0;
P2=com;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void write_date(uchar date)
{//写液晶数据函数
rs=1;
lcden=0;
P2=date;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void init_anjian()//初始化按键
红外遥控解解码程序
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P1^0;
sbit rs=P1^2;
sbit ir=P3^2;
sbit led=P1^3;
for(num=0;num<9;num++)
{
write_date(table1[num]);
delay(3);
}
}
void write_dianya(uchar add,char date)
{//1602液晶刷新时分秒函数4为时,7为分,10为秒
char shi,ge;
shi=date%100/10;