电子工程训练实验报告 本文关键词:训练,实验,报告,工程,电子
电子工程训练实验报告 本文简介:大连理工大学本科实验报告题目:利用AT89S52单片机设计红外遥控发射显示电路课程名称:《电子工程训练》学院(系):电子信息与电气工程学部专业:电子信息工程班级:电子0905学号:200981022学生姓名:周柏会成绩:2012年12月21日题目:利用AT89S52单片机设计红外遥控发射显示电路1设
电子工程训练实验报告 本文内容:
大连理工大学本科实验报告
题目:
利用AT89S52单片机设计
红外遥控发射显示电路
课程名称:
《电子工程训练》
学院(系):
电子信息与电气工程学部
专
业:
电子信息工程
班
级:
电子
0905
学
号:
200981022
学生姓名:
周柏会
成
绩:
2012年
12
月
21
日
题目:利用AT89S52单片机设计红外遥控发射显示电路
1
设计要求
(1)51最小系统
(2)点阵显示预设内容
(3)红外发射系统
2
设计分析及系统方案设计
电路分为5个部分:晶振电路、复位电路、发射电路、显示电路、按键电路。
(1)晶振电路
晶振电路输入端为引脚XTAL1,输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容,石英晶体为一感性原件,与电容构成振荡回路,为片内放大器提供正反馈和振荡的相移条件,从而构成一个稳定的自激振荡器。振荡器的频率主要取决于晶体的振荡频率,一般晶体可在1.2~12
MHz之间任选,电容C1、C2可在5~30
pF之间选择,电容的大小对振荡频率有微小的影响,可起频率微调作用。
(2)复位电路
通过某种方式,使单片机内各寄存器的值变为初始状态的操作称为复位。51单片机在时钟电路工作以后,在RST/VPD端持续给出2个机器周期的高电平就可以完成复位操作。复位电路采用按键及上电复位,上电与按键均可有效复位。上电瞬间RST引脚获得高电平,单片机复位电路随着电容的C5的充电,RST引脚的高电平逐渐下降。RST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位是直接将高电平通过电阻R6、R8分压到达RESET引脚,实现复位操作。
(3)按键电路
通过键盘扫描查询,其中包括防抖、防止多按键同时操作的功能。
(4)显示电路
用点阵以一行一个图像逐列扫描的形势进行显示程序预设的字符。
(5)发射电路
用一个发光二极管和三极管组成发射电路,通过示波器是否有波形显示来判断是否能够发射红外。
电源电路
AT89S52
单片机
红外发射器
按键电路
复位电路
晶振电路
点阵显示
图一:总体电路框图
3
各功能模块硬件电路设计
51单片机最小系统由AT89S52单片机、晶振电路和复位电路组成。
图二:51单片机最小系统
图三:LED8x8点阵控制系统
图四:发射电路
4
系统软件设计
程序开始是对单片机进行初始化设置,循环扫描判断是否有键按下,如果有键按下就发射相应的红外信号,遥控发射程序流程图如图六所示。
开始
键按下
初始化
调用按键
扫描程序
扫描
按键信号发送程序
发送完毕
发送
N
Y
图六:红外遥控单元发射程序流程图
源代码:
#include
#define
KEYPORT
P1
//用P0口做键盘矩阵
sbitSetKey
=
P1^5;//设定按键
sbitKey0
=
P1^0
;
sbitKey1
=
P1^1
;
sbitKey2
=
P1^2
;
sbitKey3
=
P1^3;
sbitSend_Ir
=P1^4;//接发射二极管
//***********************************************************************
#defineROW_MAX
15
#define
COL_MAX
8
unsigned
char
code
tab[]={0
xfe,0
xfd,0
xfb,0
xf7,0
xef,0
xdf,0
xbf,0
x7f};//P2口
unsigned
char
code
graph[ROW_MAX][COL_MAX]
=
//定义字模,二维数组一行一幅图像
{
{0
xBA,0
xAA,0
xBA,0
xFE,0
x92,0
xBA,0
x92,0
xFE},//“周“字
{0
x00,0
x7C,0
x44,0
x7C,0
x44,0
x7C,0
x10,0
xFE},//“百“字
{0
x7E,0
x24,0X7C,0
x00,0
xBA,0
x44,0
x28,0
x10},//“会“字
{0
x3C,0
x10,0
x08,0
x04,0
x24,0
x24,0
x18,0
x00},//“2“字
{0
x18,0
x24,0
x24,0
x24,0
x24,0
x24,0
x18,0
x00},//“0“字
{0
x18,0
x24,0
x24,0
x24,0
x24,0
x24,0
x18,0
x00},//“0“字
{0
x18,0
x24,0
x04,0
x1C,0
x24,0
x24,0
x18,0
x00},//“9“字
{0
x18,0
x24,0
x24,0
x18,0
x24,0
x24,0
x18,0
x00},//“8“字
{0
x08,0
x08,0
x08,0
x08,0
x08,0
x18,0
x08,0
x00},//“1“字
{0
x18,0
x24,0
x24,0
x24,0
x24,0
x24,0
x18,0
x00},//“0“字
{0
x3C,0
x10,0
x08,0
x04,0
x24,0
x24,0
x18,0
x00},//“2“字
{0
x3C,0
x10,0
x08,0
x04,0
x24,0
x24,0
x18,0
x00},//“2“字
{0
x00,0
x18,0
x24,0
x42,0
x81,0
x99,0
x99,0
x66},//“心“字
{0
x3C,0
x04,0
x04,0
x3C,0
x24,0
x24,0
x3C,0
x00},//“9“字
{0
x00,0
x08,0
x08,0
x08,0
x08,0
x18,0
x08,0
x00},//“1“字发射标志
};
unsigned
int
row
=
0;//二维数组的行值变量
unsigned
int
col
=
0;//二维数组的列值变量
//unsigned
char
cnta
=
0;//扫描到哪一列
//unsigned
char
scan_cnt
=
0;//每帧图像被扫描的次数
//unsigned
char
img_cnt
=
0;//
/*---------------------------------------------------------*-
函数名称:
System_Init()
输
入:
返
回:
函数功能:
系统初始化
-*---------------------------------------------------------*/
void
System_Init(void)
{
P0
=
0
x0FF;
P1
=
0
x0FF;
P2
=
0
x0FF;
P3
=
0
x0FF;
}
/*---------------------------------------------------------*-
函数名称:
Ex0_Init()
输
入:
返
回:
函数功能:
外中断0初始化
-*---------------------------------------------------------*/
void
timer0_Init(void)
{
TMOD
=
0
x12;
TL0
=
-13;
TH0
=
-13;
ET0
=
1;
TR0
=
1;
EA
=
1;
}
/*---------------------------------------------------------*-
函数名称:
Delay()
输
入:
返
回:
函数功能:
12MHz延时
-*---------------------------------------------------------*/
void
Delay(unsigned
int
i)
{
while
(--i);
}
//--------------END
OF
FILE-------------------------------
void
HardWareTimer1(void)
{
//
设置定时器0
//
16位定时,1毫秒延时
TMOD
=
0
x12;
TH1
=
(65536-840)
/
256;
TL1
=
(65536-840)
%
256;
TF1
=
0;
TR1
=
1;
//
启动定时器2
ET1
=
0;
//
关定时器0中断
//
等待
while
(!TF1);
}
//***********************************************************************
//--------------------------------------------------------------------------
#define
Null
z
//
不能和键值相同
//
按键按下标志
static
bit
KeyPress;
//
按键缓冲区
unsigned
char
KeyBuf;
//
按键计数
unsigned
char
KeyCnt;
/*--------------------------------------------------------------------------*-
函数名称:
GetKey()
输
入:
///
返
回:
Null/(KeyBuf)
函数功能:
按键扫描
-*---------------------------------------------------------------------------*/
unsigned
char
GetKey(void)
{
unsigned
char
Keytemp;
Keytemp
=
KEYPORT;
if
(Keytemp
==
0
xff)
{
KeyPress
=
0;
//
清按键按下标志
KeyBuf
=
0;
//
清按键缓冲区
KeyCnt
=
0;
//
清按键计数器
return
Null;
}
Delay(1250);
//
延时10毫秒
Keytemp
=
KEYPORT;
if
(Keytemp
==
0
xff)
{
//
是抖动
KeyPress
=
0;
//
清按键按下标志
KeyBuf
=
0;
//
清按键缓冲区
KeyCnt
=
0;
//
清按键计数器
return
Null;
}
else
{
//
真的有键按下
if
(KeyPress)
{
return
Null;//
上次按键没有释放
}
//
是设置键按下
/*if
(SetKey
==
0)
{
KeyPress
=
1;
//
置位按键按下标志
KeyBuf
=
A
;
KeyCnt++;
//
按键计数器加1
}*/
//
是键0按下
if
(Key0
==
0)
{
KeyPress
=
1;
//
置位按键按下标志
KeyBuf
=
0
;
KeyCnt++;
//
按键计数器加1
}
//
是键1按下
if
(Key1
==
0)
{
KeyPress
=
1;
//
置位按键按下标志
KeyBuf
=
1
;
KeyCnt++;
//
按键计数器加1
}
//
是键2按下
if
(Key2
==
0)
{
KeyPress
=
1;
//
置位按键按下标志
KeyBuf
=
2
;
KeyCnt++;
//
按键计数器加1
}
//
是键3按下
if
(Key3
==
0)
{
KeyPress
=
1;
//
置位按键按下标志
KeyBuf
=
3
;
KeyCnt++;
//
按键计数器加1
}
//
同时有多个按键同时按下视为按键无效
if
(KeyCnt
>
1)
{
return
Null;
}
else
{
//
获取扫描到的键值
return
KeyBuf;
}
}
}
//***********************************************************************
bit
OP;
void
timer0(void)
interrupt
1
{
if
(OP)
{
Send_Ir
=
~Send_Ir;
}
else
{
Send_Ir
=
1;
}
}
#include
void
Send_0(void);
void
Send_1(void);
void
Send_0(void)
{
OP
=
1;
//
启动载波
HardWareTimer1();
OP
=
0;
//
关载波
HardWareTimer1();
}
void
Send_1(void)
{
OP
=
0;
//
关载波
HardWareTimer1();
OP
=
1;
//
启动载波
HardWareTimer1();
OP
=
0;
//
关载波
}
//
发送键号0--31
void
send0()
{
//起始位
Send_1();
Send_1();
//
控制位(固定为1)
Send_1();
//
系统码位
Send_0();
Send_0();
Send_0();
Send_0();
Send_0();
//
数据码位1
Send_1();
Send_1();
Send_0();
Send_0();
Send_0();
Send_1();
//
结束
Send_Ir
=
1;
HardWareTimer1();
HardWareTimer1();
HardWareTimer1();
}
//
发送键号1--33
void
send1()
{
//起始位
Send_1();
Send_1();
//
控制位(固定为1)
Send_1();
//
系统码位
Send_0();
Send_0();
Send_0();
Send_0();
Send_0();
//
数据码位1
Send_1();
Send_1();
Send_0();
Send_0();
Send_1();
Send_1();
//
结束
Send_Ir
=
1;
HardWareTimer1();
HardWareTimer1();
HardWareTimer1();
}
//
发送键号2--35
void
send2()
{
//起始位
Send_1();
Send_1();
//
控制位(固定为1)
Send_1();
//
系统码位
Send_0();
Send_0();
Send_0();
Send_0();
Send_0();
//
数据码位1
Send_1();
Send_1();
Send_0();
Send_1();
Send_0();
Send_1();
//
结束
Send_Ir
=
1;
HardWareTimer1();
HardWareTimer1();
HardWareTimer1();
}
//
发送键号3--37
void
send3()
{
//起始位
Send_1();
Send_1();
//
控制位(固定为1)
Send_1();
//
系统码位
Send_0();
Send_0();
Send_0();
Send_0();
Send_0();
//
数据码位1
Send_1();
Send_1();
Send_0();
Send_1();
Send_1();
Send_1();
//
结束
Send_Ir
=
1;
HardWareTimer1();
HardWareTimer1();
HardWareTimer1();
}
void
main(void)
{
unsigned
char
temp;
unsigned
int
pic;
unsigned
int
b;
unsigned
int
d=0;
Delay(103);
HardWareTimer1();
System_Init();
timer0_Init();
pic=
4;
while
(1)
{
temp
=
GetKey();
switch
(
temp
)
{
case
0
:
send0();
pic
=
0;
b=3;break;
case
1
:
send1();
pic
=
3;
b=12;break;
case
2
:
send2();
pic
=
12;
b=14;
break;
case
3
:
send3();
pic
=
14;
b=15;
break;
default:
break;
}
while(pic
{
while
(d<100)
{
for(col=0;col<8;col++)
{
P2=tab[col];
P0=~graph[pic][col];
Delay(50);
}
d++;
}
d=0;
pic++;
P0=0
xFF;
P2=0
xFF;
Delay(12500);
}
P0=0
xFF;
P2=0
xFF;
}
}
5
系统调试运行结果说明计分析
软件环境:
软件仿真:Keil
C51
单片机仿真:MedWin
编程器:Superpro
/Z
硬件环境:
计算机
单片机仿真器
编程器
运行结果:
1、在51单片机系统焊接完毕后电源模块的测量输出电压值为4.52V,符合要求。
2、在点阵控制系统部分焊接完毕后,接通电源后点阵显示初始化的形状,通过分别按下按键1、2、3、4,能够在解码器上显示预设好的频道“31”、“33”、“35”、“37”,同时在点阵上显示出“31”、“31”、“35”、“37”。
3、所有电路全部焊接完成接通电源后点阵显示初始化的形状,通过分别按下1、2、3键,能够在解码器上显示预设好的字符“周、百、会”、“2、0、0、9、8、1、0、2、2”、“心形符号和数字9”,同时在点阵上显示出预设的字符。按键4为红外发射按键,按下4键后在示波器上有瞬间的波形显示。
调试中出现的问题:
1,硬件问题:在最后检查时,点阵没有完全显示结果。原因:焊接电路时可能把相邻的两个节点连在一起,电路短路导致点阵的某一行没有工作。
2,软件问题:在程序编译过程中出现了两处错误,最后在同学的帮助下改正确了,运行以后结果也是正确的。
6
结论
本次试验中我利用AT89S52单片机设计了红外遥控发射显示电路。电路分为两大部分:一是按键显示部分,按键部分是利用按键扫描查询的方式进行识别,其中包括防抖、延时、禁止同时按下多键操作等功能;另一个是红外发射部分,发射部分是用高电平和载波组合方式代表1或0。其中高电平--载波代表1,载波--高电平代表0。
1,设计电路的最小系统。按照电路图焊接好电路板后,分别在用仿真器和拷入程序的单片机测试,当指示灯出现频闪效果时,说明最小系统正常工作。
2,设计点阵显示电路。按照电路图焊接好电路板,在仿真器上输入一段显示自己姓名、学号和自己设计的图形的程序,程序的显示按照按1键显示姓名,2键显示学号,3键显示图形和数字,当全速运行时能够在点阵上显示出来名字、学号和图形,说明点阵显示电路能够正常工作。
3,设计按键发射系统。按照电路图焊接好电路板,其中按键4是发射按键,通过一段测试程序,通过按键能够在示波器能够显示出发射波形,说明按键显发射系统都能够正常工作。
4,总体电路的设计。接通电源后点阵显示初始化的形状,通过分别按下按键1、2、3,能够在解码器上显示预设好的频道“周柏会”、“200981022”、“心形符号和9”,同时在点阵上显示出相应的符号,按下4键在示波器上得到了发射波形,达到了预期的目标。
本次实验通过老师的耐心指导和几位同学的大力帮助才得以完成。实验从课题的选择开始,到硬件和软件系统的设计,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。一方面通过AT89S52单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用。
参考文献
[1]
陈育斌.
MCS-51单片机应用实验教程[M].
大连理工大学出版社.
2011
[2]
谭浩强.
C程序设计[M].
清华大学出版社.
2005
篇2:浙江电子工程学校学生教学楼应急疏散演练方案
浙江电子工程学校学生教学楼应急疏散演练方案 本文关键词:疏散,浙江,演练,教学楼,应急
浙江电子工程学校学生教学楼应急疏散演练方案 本文简介:浙江电子工程学校学生教学楼应急疏散演练方案一、演练目的加强安全教育,提高学生防灾、防害意识和应对突发事件的能力。二、演练时间与地点2009年9月15日(周二)上午第一节课后,校园内。三、参加人员全体师生。四、演练组织与管理1、学校领导小组成员总指挥:吴水木领导小组成员:叶方便夏海根李来富屠关强缪伟良
浙江电子工程学校学生教学楼应急疏散演练方案 本文内容:
浙江电子工程学校学生教学楼应急疏散演练方案
一、演练目的
加强安全教育,提高学生防灾、防害意识和应对突发事件的能力。
二、演练时间与地点
2009年9月15日(周二)上午第一节课后,校园内。
三、参加人员
全体师生。
四、演练组织与管理
1、学校领导小组成员
总
指
挥:吴水木
领导小组成员:叶方便
夏海根
李来富
屠关强
缪伟良
2、演练现场
责任人
:叶方便
现场指挥:李来富
计时:王勇
五、演练流程
1、校园广播播放警报音(责任人:李来富、董成良),演练正式开始。
2、安全疏散。听到警报音后,由在场任课老师和班长负责教育学生保持镇静,有秩序且按照预定的疏散方案迅速地一手护头、一手掩鼻通过教室前、后门经靠近的楼道向教学楼外疏散,到达指定区域。上体育课的班级,由体育老师负责疏散到附近安全地区域。
注:考虑到特殊情况,各班主任要教育学生,当发生意外时,刚好上自修课,班级里没有任课老师,这时,班长和团支书应履行起老师的职责,组织全班同学疏散。
3、当学生疏散到指定区域后,班主任要迅速到自已班级所在区域,接替任课老师,清点学生人数,并向集合地负责人报告。(班主任因事不在校时,由任课老师或班长代替)
六、疏散用时目标:
一分半钟。
七、疏散目的地负责人:
疏散目的一(教学楼背面草地,靠东)负责人:屠关强、占郑华。
疏散目的二(教学楼前花坛至传达室)负责人:夏海根、陈建林。
疏散目的三(校篮球场)负责人:叶方便、张国民。
疏散目的四(女生专用篮球场)负责人:缪伟良、方忠亚、沈华顺。
八、疏散线路:
具体疏散线路另附。
九、演练工作人员安排:
教学楼东边楼梯负责人,一楼楼梯:祁建国;二楼楼梯:范志红;三楼楼梯:姚利敏。(后备人员:赵雪英、田怀珠)
教学楼中间楼梯负责人,一楼大厅出口:张明平;一楼楼梯:陈鹏杰;二楼楼梯:寿飞峰;三楼楼梯:屠国海;四楼:陈波。(后备人员:丁晓勇、冯其明和杨锡芬)
教学楼西边楼梯负责人,一楼向北门:陈关友;一楼向西通道:马力;一楼往实习车间方向通道:张敬明;二楼楼梯:张丹;三楼楼梯:张月琴;四楼楼梯:袁声明。(后备人员:唐立刚、张冠军、倪秋萍和俞林金)
当有负责人因事或上课不能及时到达指定位置时,后备人员应顶替到相应岗位,维护好经过学生的秩序,以防发生踩踏事故。
十、注意事项:
1、所有工作人员务必保持镇静有序,确保学生人身安全。
2、学生疏散过程禁止推挤踩踏,以防发生意外。
3、各班教师和相关工作人员须待学生疏散完毕方可撤离。
十一、演练结束:
疏散结束,由总指挥主持总结、评估演练效果,演练结束。
十二、说明:
1、本应急疏散演练方案也作为本学期教学楼应急疏散方案。
2、当一个岗位有多名老师时,第一位为第一责任人,以此类推,当第一责任人因事不在场时,由后续人员替代。
2009年9月8日
篇3:电子工程学院教授先进事迹:传道授业 树木育人
电子工程学院教授先进事迹:传道授业 树木育人
当学生记者走进他的办公室,他便热情地迎接我们。其颜和悦,其言真挚朴素,便是他给人的最初感觉。与他交谈,亲切之感油然而生。年届中年的他,依旧活力四射,正能量满满,对待生活也十分乐观积极。他,就是电子工程学院z教授。
三尺讲台育未来
兴趣广泛的z教授极具亲和力,课上他认真教授知识,课下他会约上几个学生一起切磋球技。站上西邮讲台的19年里,他深深地认识到与学生沟通交流的重要性。为此,他呼吁全校的老师能在教学安排的课时中留出时间给学生解答疑问。所谓“师者,所以传道授业解惑也。”z教授这样说道:“向来知识很多,奈何课时紧张。学生,尤其是那些需要沉下心钻研学问的工科生们,通过主动学习提出他们的疑惑,老师就要有效地解决知识的困惑。采用恰当的方法调动他们主动学习的能力,进而发掘培养学生勇于质疑的精神。对他们生活中的问题,也要注意观察,必要的时候给出自己的建议,使他们很好的走出困惑。在解惑的同时也要意识到,解惑的最终目的是培养学生独立的人格并使他们自己掌握一定处理问题的能力,在给予帮助的同时要留有空隙让他们自己去探索、去发现。”
信其师,爱其道,乐其学。作为一位教授,他心中一直有一个最纯朴的信念,那就是以爱施教,爱事业,爱教学,爱学生。正是这份深深的爱意,他才十几年如一日,不改初衷,立足三尺讲台。他更以他深厚的学术功底,乐观向上的人生态度,将课堂教学推向纵深。也正因如此,在课堂上,他才以饱满的热情面对着每一节课,感染在座的每一个学生。
妙语连珠解心结
采访过程中,我们提出了很多疑问,每次z教授都能旁征博引,将问题一一解答。他的妙语连珠、幽默风趣,只言片语间,便化解了我们心中的心结。
“您认为学生应该怎样做,才能在专业学习上取得成功呢?”思虑片刻后,他竟反问了我们:“你们是如何定义成功的呢?”在我们哑口无言之际,他缓缓开口对我们说:“我认为,每个人评价自己成功的标准是不一样的。成功是人们的一种自我满足,如果你觉得你得到的回报,配得起你的付出,并且没有虚度光阴,那么你就可以认为你成功了。”z教授接着说,“我们可能只看到一个人成功的表面,而他背后的付出却是我们想不来的。努力了,不一定百分百会成功;但没有努力,成功于你是绝对不可能的。有人言:越努力越幸运。我觉得这话很对,你努力了,碰到了机遇,成功便随之而来。我们要有一种毅力,要坚持,要耐得住寂寞。一个人静心学习的过程中,孤独感会时常袭来,所以耐得住寂寞便显得尤为重要。如果可以,我们最好将专业学习变成兴趣。有了兴趣,你学习时就会心情愉快。埋头苦读时,外人看来会觉得你很辛苦,却殊不知你是乐在其中。总而言之,勤动手,有耐性,乐学习,成功自然离你不远。”说罢,他微笑着看着我们。
谆谆教诲如父语
常言道:理想很丰满,现实很骨感。作为一个父亲,z教授谈到,从校门到社会,很多东西你必须花时间精力去学,去适应。在现实生活中,梦想总是太过于单薄而显得不那么重要。从现实出发,做好本职工作某种意义上就是最伟大、最实在的梦想。“学生的本职工作就是学习好自己的专业知识,除此之外还要学会待人处世的方法,自主自立,懂得如何在社会中生存。”z教授如是说。
随后,他以一个父亲的名义向同学们提出两点建议:一是要让自己变强,把自己的专业学好。可能未来从事的职业与你的专业有一定的差距,也许你会很少受益于你的专业知识,但不能停止学习,不能让你美好的四年大学在荒废的时光中度过。二是找准目标,明确“我要做什么?”,“怎么去做?”,并坚持不懈地沉下心去做。与此同时,要兼顾智商与情商的共同发展。培养独立的精神,自主自立,生活的价值在于历练与积累,别人经历的永远是别人的,只有自己去体验、去总结,故事才会是自己的。