1、试用期小结尊敬的江苏三恒科技集团领导:您好!我叫程克辉,毕业于西北师范大学知行学院,电子信息工程专业。在试用期的两个多月里,我在工程中心软件项目部实习工作,我很荣幸,能跟着*副总经理学习与专业相关的电子知识,收获不少!这两个多月在任总的指导下,我成功的了解、计算了:BT151 可控硅、LM2940(1 安恒流调节器) 、LM317 三端可调正稳压器集成电路、LM2674 电源高效降压稳压转换器、13F-11 网络隔离变压器、光耦开关、继电器、SC50462 红外遥控发射模块、SM3XX0/3XX1红外接收头等电子元器件。在任总的指导下和上面的学习我跟着任总学习“煤矿防爆显示系统”的电路设计、模
2、块学习,也成功的用c 语言成功的编写控制该系统的 c 程序,由于公司没有人用 c 对红外解码程序的编写,故在任总的悉心指导下,几经努力终于编写成功并且能稳定的通过硬件的测试。硬件部分:1、外部 12V 电源转换成 5V 模块。由 LM2674 器件实现2、外部 1A 恒流源模块。由 LM317 和 LM2940 实现3、五个独立按键控制继电器模块。由光耦开关实现4、继电器动作模块。5、红外接收模块。由 SM3XX0/3XX1 红外接收头实现6、外部的四路光端机、视频转换器、光缆传输、摄像头、画面分割器、网络视频等模块试用期的期间,由于刚来啥器件都没有,每每遇到困难的时候我就及时向*主任汇报,在
3、张主任积极帮助下我的问题往往能很快的得到解决。特别感谢张主任的无私支持和关怀!在红外线解码的 c 程序设计上,我面临着很大的困难,在学校根本就没有接触过红外线的解码,因为红外线是一种看不到摸不着的东西,且我们公司的红外线发射器用的是杭州士兰电子的器件很特殊。它没有引导码只有 16 位的用户码和按键的数据码,这样写出来的 c 解码程序就很容易受到外部红外线的干扰。在程序初始化和有红外脉冲时能接收 16 位的 0 脉冲,即使解码出错也能有 00H 的码进入。还好最后在我用数码管把红外线解出来的码显示出来,这样一切问题就迎刃而解了!程序能成功调试并通过硬件测试。以上是我的试用期小结,在试用期中不足的
4、地方望领导同事及时指出,以便于本人及时改正!两个月体会到三恒的精神,知道了集团的发展潜力!万分幸运,我能成为三恒的一员!此致!敬礼!二零一一年九月七日红外线解码程序和公司具体项目要求程序:#include/#include#define uint unsigned int /宏定义#define uchar unsigned charuchar num;uchar irtime,startflag,bitnum,irreceok;uchar irdata16,ircode2;uchar irprosok;uchar n;sbit key1=P33; /独立按键定义sbit key2=P34;s
5、bit key3=P35;sbit key4=P36;sbit key5=P37;sbit key6=P20; /继电器端口定义sbit key7=P21;sbit key8=P22;sbit key9=P23;sbit key10=P24;void irmove(); /动作函数的申明void delay(uint z) /延时子函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void keyskay()if(key1=0)delay(5); /消抖if(key1=0) /如果键 1 确实按下P2=0xff;key6=0; / 继电器 1 动作显示器显示第
6、一屏画面while(!key1);delay(5);while(!key1);else if(key2=0)delay(5);if(key2=0) / 如果键 2 确实按下P2=0xff;key7=0; / 继电器 2 动作显示器显示第二屏画面while(!key2);delay(5);while(!key2);else if(key3=0)delay(5);if(key3=0) /如果键 3 确实按下P2=0xff;key8=0; / 继电器 3 动作显示器显示第三屏画面while(!key3);delay(5);while(!key3);else if(key4=0)delay(5);if
7、(key4=0) / 如果键 4 确实按下P2=0xff;key9=0; / 继电器 4 动作显示器显示第四屏画面while(!key4);delay(5);while(!key4);else if(key5=0)delay(5);if(key5=0) / 如果键 5 确实按下P2=0xff;key10=0; / 继电器 5 动作显示器四路画面同时显示while(!key5);delay(5);while(!key5);/*选择定时器模式、启动定时器、开中断的初始化*/void time0init(void) TMOD=0x02;TH0=0x00;TL0=0x00;ET0=1;EA=1;TR0
8、=1;/*外部中断 0 初始化*/void int0init()IT0=1;EX0=1;EA=1;/*读取用户码、数据码并且判断 0、1*/void irpros()uchar k,i,j;/变量定义uchar value;k=0; /从第一个读取的时间开始判断 0、1for(j=0;j1;/因为是从高位读取遥控器发送的数据,顾要右移吧第一次读的数据位送到最低位if(irdatak6)/每进来一次进行判断读取的时间值是不是 1value=value | 0x80; /是 1 就用或运算把读取数置 1k+; /往下读取下一个时间值ircodej=value;/把二进制的码存到一个数组中irpro
9、sok=1; /数据从时间值处理到二进制值成功/*根据读取的二进制数据码判断哪一个继电器工作*/void irmove()switch(ircode1)case 0x01: /如果数据码是 01H 就显示第一屏P2=0xff;key6=0;break;case 0x09: /如果数据码是 09H 就显示第 2 屏P2=0xff;key7=0;break;case 0x05: /如果数据码是 05H 就显示第 3 屏P2=0xff;key8=0;break;case 0x0d: /如果数据码是 0dH 就显示第 4 屏if(n=1)break;/第二次进来就自动退出P2=0xff;key9=0;
10、n=1;while(ircode1=0x0d);delay(5);while(ircode1=0x0d);break;if(ircode1=0x0dkey10=0;n=0;while(n);delay(100);while(n); void main()time0init();int0init();while(1) /使程序一直运行keyskay(); /按键优先if(irreceok)/如果接收到红外并且 16 位接收成功就进入时间值的处理转换成二进制 irpros(); /时间值转换成二进制函数irreceok=0;if(irprosok) /如果时间值转化成二进制成功处理就进入才开中断、
11、定时irprosok=0;TR0=1;EX0=1;irmove();/成功判断数据码并且相关的继电器动作delay(100); /延时 200ms 进行红外判断并且避开外部红外干扰void timer0() interrupt 1irtime+;/255 字符型最大、对每一个脉冲自动计时void int0() interrupt 0if(startflag=1) /红外接收标志irdatabitnum=irtime; /把每一个脉冲的时间用一个数组存储irtime=0; /一个脉冲接收结束就对时间归零初始化bitnum+; /数组单元往后计数if(bitnum=16) /如果接收的码正好是 16 位的码就执行下面的操作bitnum=0; /为下一个脉冲准备,对数组初始化irreceok=1; /红外接收 OKEX0=0; / 关闭外部中断避免外部干扰TR0=0;/停止计时不再读取遥控器发来的脉冲,到这个脉冲解码完成才开启进行下一个脉冲计时else /如果有下降延进来红外接收标志位不是 1 就进入startflag=1; /置 1irtime=0;/脉冲时间计时归零