//头文件#define uchar unsigned char //这里用\"uchar\"代替\"unsigned char\",\"uchar\"用来定义无符号字符型数。
#define uint unsigned int //\"uint\"用来定义无符号整型数。 uchar distemp; //定义变量 uchar IRCOM[7];
/*********声明子函数**************/
void delay(uchar x); // x*0.14MS void delayms(uint);
sbit IRIN = P3^3; //定义红外接收器数据线
.
.
/********定义LED灯口线***********/
sbit P2_0=P2^0; //定义LED灯口线。 sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P2_4=P2^4; sbit P2_5=P2^5; sbit P2_6=P2^6; sbit P2_7=P2^7;
void IR_IN() interrupt 2 using 0 {
unsigned char j,k,N=0; EX1 = 0; delay(15); if (IRIN==1) { EX1 =1; return; }
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 {delay(1);}
for (j=0;j<4;j++) //收集四组数据 {
for (k=0;k<8;k++) //每组数据有8位 {
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 {delay(1);}
while (!IRIN) //等 IR 变为高电平 {delay(1);}
while (IRIN) //计算IR高电平时长 {
delay(1);
N++; if (N>=30) { EX1=1; return;} //0.14ms计数过长自动离开。
} //高电平计数完毕 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1” N=0; } }
if (IRCOM[2]!=~IRCOM[3]) { EX1=1; return; }
.
.
switch(IRCOM[2]) {
case 0x45: // 全亮 P2=0x00; break;
case 0x47: // 全灭 P2=0xff; break;
case 0x16: //当得出十六进制值为 0x16时。 P2_7=~P2_7; break; case 0x0c: P2_6=~P2_6; break; case 0x18: P2_5=~P2_5; break; case 0x5e: P2_4=~P2_4; break; case 0x08: P2_3=~P2_3; break; case 0x1c: P2_2=~P2_2; break; case 0x5a: P2_1=~P2_1; break; case 0x42: P2_0=~P2_0; break; }
EX1 = 1; }
void delay(unsigned char x) {
unsigned char i; while(x--) {
for (i = 0; i<13; i++) {}
.
延时函数 x*0.14MS // .
} }
void delayms(uint xms) // 延时函数 x*1ms { uint k,y; for(k=xms;k>0;k--) //i=xms即延时约xms毫秒 for(y=110;y>0;y--); }
void check() {
P2=0X7F; delayms(200); P2=0X3F; delayms(200); P2=0X1F; delayms(200); P2=0X0F; delayms(200);
P2=0X07; delayms(200); P2=0X03; delayms(200); P2=0X01; delayms(200); P2=0X00; delayms(1000); P2=0XFF; }
main() // 主函数 {
check(); //开机自检LED的好坏
IE = 0x84; //允许总中断中断,使能 INT1 外部中断 TCON = 0x10; //触发方式为脉冲负边沿触发 IRIN=1; //I/O口初始化 delayms(10); //延时 while(1) { ; } }
五、 系统实现(清晰的实物照片)
.
.
.
.
六、 个人总结(课程学习体会与收获及对课程的建议)
通过本次红外系统的设计,我大有收获。从得到题目到查找资料,从电路板的调试到失败后再一次全部重新开始,在这一个充满挑战伴随挫折,充满热情伴随打击的过程中,我感触颇深,它已不仅是一个对我三年学习知识情况和我的应用动手能力的检验,而且还是对我的钻研精神,面对困难的心态,做事的毅力和耐心的考验。我在这个过程中深刻的感受到了做毕业设计的意义所在。这个课题的根本技术就是单片机控制技术,加部分外围电路来实现一些复杂的功能。可以根据要求改变软件来实现功能的更新和扩展。
课程设计成绩:
指导教师签字:
年 月 日
.