遥控钥匙条形码

2022-09-14 21:06:01

本篇文章给大家谈谈《遥控钥匙条形码》对应的知识点,希望对各位有所帮助。

本文目录一览:

遥控器如何控制数码管电子钟

7 主要功能为:DS1302,DS18B20,液晶1602驱动

8 万能电视遥控器(000)的解码。

9 用遥控器控制DS1302的各种功能

10 DS18B20的精度为0.06摄氏度

11 DS1302有蜂鸣器定时报警,继电器控制高电家器,蜂鸣器整点报时

12 接口:蜂鸣器P2.2

13 继电器 K1:P2.1 K2:P2.0

14 每秒闪灯 P3.1

15 红外接收头 P3.2 外部中断零 T0

16 按键:KEY1:P3.3(调整时间及切换)P3.4(调蜂鸣器定时) P3.5(调继电器定时)

17 DS18B20:数据传送 DQ P3.7

18 DS1302 :CE P2.7 CK=P2.5 IO=P2.6

19 液晶1602:RS P1.0 RW P1.1 EN P1.2 数据传输接口 P0

20

21 注:程序中青色显示部分为可扩展部分

22

23 /**************************************************************************************/

24

25 //所用到的文件库

26 #include REGX51.H

27 #include "1602LCDDriver.h"

28 #include "DS18B20Driver.h"

29 #include "DS1302Driver.h"

30 #include INTRINS.H

31

32 //1302的数据表示结构体

33 struct TimerStruct

34 {

35 unsigned char Year;

36 unsigned char Month;

37 unsigned char Day;

38 unsigned char Week;

39 unsigned char Hour;

40 unsigned char Minute;

41 unsigned char Second;

42 };

43 struct TimerStruct RealClock;

44

45 //标志常量定义

46 const unsigned char DATECODE1[]={"TS"};

47 const unsigned char DATECODE2[]={"DF"};

48 const unsigned char DATECODE3[]={"DJ"};

49

50 //重要常数定义

51 #define distinguish_y 0x80 //引导码

52 #define distinguish_a 0x7e //地址码

53

54 //各个接口定义

55 sbit key1=P3^3;

C51 COMPILER V7.50 确温度测量LCD显蔩的实时时钟 03/21/2007 11:05:44 PAGE 2

56 sbit key2=P3^4;

57 sbit key3=P3^5;

58 sbit sound=P2^2;

59 sbit k1=P2^1;

60 sbit k2=P2^0;

61 sbit led=P3^1;

62

63 //有关液晶显示的变量

64 unsigned char idata mins,hours,days,months,weeks,years; //超128个变量扩展变量空间

65 unsigned char a,k,endf_flag;

66 bit keychange_flag,biaof_flag,biaoj_flag,fmq_flag,key_flag;

67 unsigned char idata Minute1,Hour1,Day1,Month1,Week1,Year1;//超128个变量扩展变量空间

68 unsigned char idata Minute2,Hour2,Day2,Month2,Week2,Year2;//超128个变量扩展变量空间

69 unsigned char DATECODE22[1]={' '};

70 unsigned char DATECODE33[1]={' '};

71

72 //红外参量

73 bit receiv_en,bootable,rled_flag,end_flag,change_flag,led_flag,bell_flag,click,data_flag;

74 unsigned char receiv_data[4];

75 unsigned char receiv_times,led_count,led_a,bell_time,Irq_times;

76

77 //液晶显示数据

78 unsigned char DateBuffer1[]={"2006/08/18/5"};

79 unsigned char TimeBuffer1[]= {"23:50:00"};

80

81 //1302内部数据

82 unsigned char DateBuffer[]={"2005/01/01/5"};

83 unsigned char TimeBuffer[]= {"00:00:00"};

84 unsigned char LCDDisplayBuffer[]={" "};

85

86 //函数声明

87 void tiaoshi(struct TimerStruct *Real);

88 void dingshif(void);

89 void dingshij(void);

90 void tiao_delay(void);

91 void quxiaofmq(void);

92 void quxiaojdq(void);

93 void show_quxiaofmq(void);

94

95 //有关延时的中断

96 void times1() interrupt 3 using 2

97 {

98 1 TH1=0X3C;

99 1 TL1=0XA8;

100 1 if(bell_flagbell_time2) //蜂鸣器提示

101 1 {

102 2 sound=0;

103 2 bell_time++;

104 2 }

105 1 else

106 1 {

107 2 sound=1;

108 2 bell_time=0;

109 2 bell_flag=0;

110 2 }

111 1 if(++Irq_times==10) //没秒闪灯指示

112 1 {

113 2 click=~click;

114 2 }

115 1 else if(Irq_times==20)

116 1 {

117 2 Irq_times=0;

C51 COMPILER V7.50 确温度测量LCD显蔩的实时时钟 03/21/2007 11:05:44 PAGE 3

118 2 click=~click;

119 2 }

120 1 }

121

122 //蜂鸣器测试

123 void fmq_delay(unsigned char delaytimef)

124 {

125 1 unsigned char j,h,k;

126 1 sound=0;TR1=0; //蜂鸣器由此函数控制时,关中断

127 1 for(j=delaytimef;j0;j--)

128 1 //for(e=10;e0;e--) //延时1S

129 1 for(k=20;k0;k--) //延时1MS

130 1 for(h=248;h0;h--);

131 1 sound=1; //返回由中断控制蜂鸣器

132 1 TR1=1;

133 1 }

134

135 //遥控器编码测试

136 //编码接收处理

137 unsigned int difference(unsigned int val1,val2) //误差处理函数

138 {

139 1 if(val1val2)

140 1 {

141 2 return(val1-val2);

142 2 }

143 1 else

144 1 {

145 2 return(val2-val1);

146 2 }

147 1 }

148 void receiv_ray(void) interrupt 0 using 1 //红外接收

149 {

150 1 unsigned int pulse_width;

151 1 if(receiv_en)

152 1 {

153 2 pulse_width=TH0*256+TL0;

154 2 TH0=0;

155 2 TL0=0;

156 2 if(difference(pulse_width,13400)300) //接收到引导码

157 2 {

158 3 bootable=1;

159 3 }

160 2 if(bootable)

161 2 {

162 3 receiv_data[receiv_times/8]=1;

163 3 if(difference(pulse_width,1100)200) //接收到零

164 3 {

165 4 receiv_data[receiv_times/8]=0x7f;

166 4 }

167 3 else if(difference(pulse_width,2100)200) //接收到一

168 3 {

169 4 receiv_data[receiv_times/8]|=0x80;

170 4 }

171 3 if(++receiv_times31)

172 3 {

173 4 receiv_times=0;

174 4 bootable=0;

175 4 rled_flag=1;

176 4 bell_flag=1;

177 4 EX0=1;

178 4 }

179 3 }

C51 COMPILER V7.50 确温度测量LCD显蔩的实时时钟 03/21/2007 11:05:44 PAGE 4

180 2 }

181 1 }

182 //接收到遥控器按键处理

183 void rled_deal(void)

184 {

185 1

186 1 switch(receiv_data[2])

187 1 {

188 2 case 0x03 : k1=1; break; //继电器一工作 “1”

189 2 case 0x05 : k2=1; break; //继电器二工作 “2”

190 2 case 0x25 : k1=0; break; //继电器一关闭 “电源”

191 2 case 0x1d : k2=0; break; //继电器二关闭 “静音”

192 2 case 0x2d : endf_flag=0; break; //切断蜂鸣器叫 “屏显” 键

193 2 case 0x3b : show_quxiaofmq(); break; //取消蜂鸣器 “伴音” 键

194 2 case 0x27 : quxiaojdq(); break; //取消继电器 “丽音” 键

195 2 case 0xb1 : tiaoshi(RealClock);led_flag=1;break; //调整时间 “制式” 键

196 2 case 0xa3 : dingshif();led_flag=1; break; //调整蜂鸣器定时时间 “画中画”键

197 2 case 0xa9 : dingshij();led_flag=1; break; //调整继电器定时时间 “正常 ” 键

198 2 default : break;

199 2 }

200 1 }

201 //红外控制调整数据

202 void led_tiao (void)

203 {

204 1 led_count=0;

205 1 end_flag=0;

206 1 while(!end_flag)

207 1 {

208 2 if(receiv_data[2]==0x2d) end_flag=1; //“OK完成”键

209 2

210 2 if(receiv_data[2]==0x35||receiv_data[2]==0x37)

211 2 {

212 3 led_count++,receiv_data[2]=0x00; //“音量+”或“频道”上键

213 3 }

214 2 if(receiv_data[2]==0x3d||receiv_data[2]==0x3f)

215 2 {

216 3 led_count--,receiv_data[2]=0x00; //“音量-”或“频道”下键

217 3 }

218 2 data_flag=0;

219 2 switch(receiv_data[2])

220 2 {

221 3

222 3 case 0x01 : led_a=0;data_flag=1; //“0”

223 3 break;

224 3 case 0x03 : led_a=1;data_flag=1; //“1”

225 3 break;

226 3 case 0x05 : led_a=2;data_flag=1; //“2”

227 3 break;

228 3 case 0x07 : led_a=3;data_flag=1; //“3”

229 3 break;

230 3 case 0x09 : led_a=4;data_flag=1; //“4”

231 3 break;

232 3 case 0x0b : led_a=5;data_flag=1; //“5”

233 3 break;

234 3 case 0x0d : led_a=6;data_flag=1; //“6”

235 3 break;

236 3 case 0x0f : led_a=7;data_flag=1; //“7”

237 3 break;

238 3 case 0x11 : led_a=8;data_flag=1; //“8”

239 3 break;

240 3 case 0x13 : led_a=9;data_flag=1; //“9”

241 3 break;

C51 COMPILER V7.50 确温度测量LCD显蔩的实时时钟 03/21/2007 11:05:44 PAGE 5

242 3 default: break;

243 3 }

244 2 //光标移动方向控制

245 2 led_count=led_count%11;

246 2 switch(led_count)

247 2 {

248 3 case 0: write_lcd_command(0x80+0x45);

249 3 if(data_flag==1) TimeBuffer1[4]=led_a+0x30; break; //分个修改对应位置的字符

250 3 case 1: write_lcd_command(0x80+0x44);

251 3 if(data_flag==1) TimeBuffer1[3]=led_a+0x30; break; //分十

252 3 case 2: write_lcd_command(0x80+0x42);

253 3 if(data_flag==1) TimeBuffer1[1]=led_a+0x30;break; //时个

254 3 case 3: write_lcd_command(0x80+0x41);

255 3 if(data_flag==1) TimeBuffer1[0]=led_a+0x30;break; //时十

256 3 case 4: write_lcd_command(0x80+0x0c);

257 3 if(data_flag==1) DateBuffer1[11]=led_a+0x30;break; //星期 不闪

258 3 case 5: write_lcd_command(0x80+0x0a);

259 3 if(data_flag==1) DateBuffer1[9]=led_a+0x30;break; //日个 不闪

260 3 case 6: write_lcd_command(0x80+0x9);

261 3 if(data_flag==1) DateBuffer1[8]=led_a+0x30; break; //日十

262 3 case 7: write_lcd_command(0x80+0x7);

263 3 if(data_flag==1) DateBuffer1[6]=led_a+0x30;break; //月个

264 3 case 8: write_lcd_command(0x80+0x6);

265 3 if(data_flag==1) DateBuffer1[5]=led_a+0x30;break; //月十

266 3 case 9: write_lcd_command(0x80+0x4);

267 3 if(data_flag==1) DateBuffer1[3]=led_a+0x30;break; //年个

268 3 case 10: write_lcd_command(0x80+0x3);

269 3 if(data_flag==1) DateBuffer1[2]=led_a+0x30;break; //年十

270 3 default: break;

271 3 //case 11: write_lcd_command(0x80+0x2);break; //年百

272 3 //case 12: write_lcd_command(0x80+0x1);break; //年千

273 3 }

274 2 tiao_delay();

275 2 tiao_delay();

276 2 //write_lcd_command(0X0C); //全部字符显示,光标消失

277 2 lcd_displaystr_ram(0,1,DateBuffer1); //实时显示修改的数据

278 2 lcd_displaystr_ram(1,1,TimeBuffer1); //实时显示修改的数据

279 2 write_lcd_command(0x0f); //符号显示,光标显示,光标闪烁

280 2

281 2 }

282 1 //数值记录

283 1 mins=TimeBuffer1[4]-0x30+(TimeBuffer1[3]-0x30)*10; //分

284 1 hours=TimeBuffer1[1]-0x30+(TimeBuffer1[0]-0x30)*10; //时

285 1 days=DateBuffer1[9]-0x30+(DateBuffer1[8]-0x30)*10; //日

286 1 months=DateBuffer1[6]-0x30+(DateBuffer1[5]-0x30)*10; //月

287 1 weeks=DateBuffer1[11]-0x30; //星期

288 1 years=DateBuffer1[3]-0x30+(DateBuffer1[2]-0x30)*10; //年

美的空调遥控器

这个情况我也遇到过,五一的买的美的不到一个月空调遥控就出现这样的问题!后来打了售后电话,也过来人看了,一检查没问题,等到人一走,问题如故。最后又打售后,售后说有个什么键,我找了半天也没有找到!真正的问题其实还是电池,我换了一对南孚,果然好了!只能怪他美的配的电池太差,谁能想到用不到一个月那电池就不行啊!

总结一句:美的生活原来是没电的!

遥控器按下什么键数码管就显示什么的51单片机红外c程序,最好能给一下程序注释

/*-----------------------------------------------

遥控器上1-9会在数码管上对应显示

------------------------------------------------*/

#includereg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit IR=P3^2; //红外接口标志

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换

sbit LATCH1=P2^2;//定义锁存使能端口 段锁存

sbit LATCH2=P2^3;// 位锁存

/*------------------------------------------------

全局变量声明

------------------------------------------------*/

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9

unsigned char irtime;//红外用全局变量

bit irpro_ok,irok;

unsigned char IRcord[4];

unsigned char irdata[33];

/*------------------------------------------------

函数声明

------------------------------------------------*/

void Ir_work(void);

void Ircordpro(void);

/*------------------------------------------------

定时器0中断处理

------------------------------------------------*/

void tim0_isr (void) interrupt 1 using 1

{

irtime++; //用于计数2个下降沿之间的时间

}

/*------------------------------------------------

外部中断0中断处理

------------------------------------------------*/

void EX0_ISR (void) interrupt 0 //外部中断0服务函数

{

static unsigned char i; //接收红外信号处理

static bit startflag; //是否开始处理标志位

if(startflag)

{

if(irtime63irtime=33)//引导码 TC9012的头码,9ms+4.5ms

i=0;

irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1

irtime=0;

i++;

if(i==33)

{

irok=1;

i=0;

}

}

else

{

irtime=0;

startflag=1;

}

}

/*------------------------------------------------

定时器0初始化

------------------------------------------------*/

void TIM0init(void)//定时器0初始化

{

TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值

TH0=0x00; //重载值

TL0=0x00; //初始化值

ET0=1; //开中断

TR0=1;

}

/*------------------------------------------------

外部中断0初始化

------------------------------------------------*/

void EX0init(void)

{

IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)

EX0 = 1; //使能外部中断

EA = 1; //开总中断

}

/*------------------------------------------------

键值处理

------------------------------------------------*/

void Ir_work(void)//红外键值散转程序

{

switch(IRcord[2])//判断第三个数码值

{

case 0x0c:DataPort=dofly_DuanMa[1];break;//1 显示相应的按键值

case 0x18:DataPort=dofly_DuanMa[2];break;//2

case 0x5e:DataPort=dofly_DuanMa[3];break;//3

case 0x08:DataPort=dofly_DuanMa[4];break;//4

case 0x1c:DataPort=dofly_DuanMa[5];break;//5

case 0x5a:DataPort=dofly_DuanMa[6];break;//6

case 0x42:DataPort=dofly_DuanMa[7];break;//7

case 0x52:DataPort=dofly_DuanMa[8];break;//8

case 0x4a:DataPort=dofly_DuanMa[9];break;//9

default:break;

}

irpro_ok=0;//处理完成标志

}

/*------------------------------------------------

红外码值处理

------------------------------------------------*/

void Ircordpro(void)//红外码值处理函数

{

unsigned char i, j, k;

unsigned char cord,value;

k=1;

for(i=0;i4;i++) //处理4个字节

{

for(j=1;j=8;j++) //处理1个字节8位

{

cord=irdata[k];

if(cord7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差

value|=0x80;

if(j8)

{

value=1;

}

k++;

}

IRcord[i]=value;

value=0;

}

irpro_ok=1;//处理完毕标志位置1

}

/*------------------------------------------------

主函数

------------------------------------------------*/

void main(void)

{

EX0init(); //初始化外部中断

TIM0init();//初始化定时器

DataPort=0xfe; //取位码 第一位数码管选通,即二进制1111 1110

LATCH2=1; //位锁存

LATCH2=0;

while(1)//主循环

{

if(irok) //如果接收好了进行红外处理

{

Ircordpro();

irok=0;

}

if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等

{

Ir_work();

}

}

}

毕业设计:怎么在C语言程序中编写一个通过遥控器的数字按键在数码管上显示左移的程序

首先,LZ 得会遥控解码 并知道遥控器的数据码。然后得想好功能,如:

一、什么条件让它移位。

二、当显示 ⑦⑧⑨⑩ 的时候,下一步是什么?? ①②③④,还是 ⑧⑨⑩空?如果是后者,后续又该如何?

三、是否循环显示10位学号,流动时间间隔又多少

这遥控器,怎么看怎么像 普中科技用的KM-001遥控器,1-9在最下面三行,第一行是 电源、模式、静音。

还有,用户码是“00”,“FF”只是用户码反码

关于《遥控钥匙条形码》的介绍到此就结束了。

相关阅读

推荐阅读

热门话题

更多

阅读排行

更多
当前位置:2000-3000价位手机推荐>>正文