洛阳理工单片机与接口技术课程设计报告.docx
《洛阳理工单片机与接口技术课程设计报告.docx》由会员分享,可在线阅读,更多相关《洛阳理工单片机与接口技术课程设计报告.docx(33页珍藏版)》请在冰豆网上搜索。
洛阳理工单片机与接口技术课程设计报告
洛阳理工学院
课程设计报告
课程名称单片机原理与接口技术
设计题目基于STC89C52单片机的实验系统开发与设计
专业通信工程
班级B120509
学号B12050923
姓名徐国旗
完成日期2015年1月10日
课程设计任务书
设计题目:
基于STC89C52单片机的实验系统开发与设计
设计内容与要求:
一、设计内容
利用STC系列单片机作为微控制器开发一套软、硬件相结合的单片机实验平台,主要包括以下内容:
1.电路原理图设计,主要包括集LCD显示模块、串口通信模块、数码管显示模块、LED发光二极管、键盘等接口电路的设计;
2.学习集成电路等芯片的焊接方法与技巧,进行实际元器件的识别,进行电路板焊接;
3.在KeilC环境下,进行软件设计。
主要包括流水灯、计数器、LCD字符显示、键盘的控制等功能程序设计;
4.针对所开发的实验板,结合器件选择、原理图设计、硬件焊接、软件编程调试、软硬件联调等方面写出课程设计报告。
二、设计要求
1.完成综合实验系统的电路结构分析,进行模块分解,掌握各部分电路的工作原理;
2.独立完成电路板的焊接,掌握故障排除方法,完成实验平台的硬件设计及开发;
3.结合KeilC软件在焊接无误的单片机实验平台上开发出流水灯、LCD显示模块,数码管显示模块等程序设计;
4.按照要求撰写课程设计论文。
指导教师:
李传锋
2014年12月1日
课程设计评语
成绩:
指导教师:
_______________
年月日
目录
摘要1
ABSTRACT2
第1章概述3
1.1设计题目3
1.2设计步骤3
1.3Proteus与KeilC51软件介绍3
第2章硬件电路设计4
2.1电路各元器件介绍4
2.1.1LCD1602液晶4
2.1.2两位一体共阴数码管5
2.1.3其它元器件介绍6
2.2仿真电路连接与实物焊接7
2.2.1protues仿真电路7
2.2.2电路板焊接8
第3章软件设计9
3.1程序整体思路9
3.2程序编程实现10
3.3程序的优缺点分析12
第4章仿真及实物效果展示12
4.1关闭菜单与主菜单12
4.2流水灯模块13
4.3计数器模块14
4.4LCD液晶显示模块14
心得体会15
参考文献15
附 录16
基于STC89C52单片机的实验系统开发与设计
摘要
单片机,全称单片微型计算机(英语:
Single-ChipMicrocomputer),又称微控制器(Microcontroller),是把中央处理器、存储器、定时/计数(Timer/Counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。
与应用在个人电脑中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。
它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。
由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;由于单芯片微电脑常用于当控制器故又名singlechipmicrocontroller,但是目前在中国大陆仍多沿用“单片机”的称呼。
主要特点:
1、主流单片机包括CPU、4KB容量的ROM、128B容量的RAM、2个16位定时/计数器、4个8位并行口、全双工串口行口、ADC/DAC、SPI、I2C、ISP、IAP。
2、系统结构简单,使用方便,实现模块化;
3、单片机可靠性高,可工作到10^6~10^7小时无故障;
4、处理功能强,速度快。
5、低电压,低功耗,便于生产便携式产品
6、控制功能强
7、环境适应能力强。
本次课程设计就是利用STC系列单片机作为微控制器开发一套软、硬件相结合的单片机实验平台,主要通过电路原理图,进行电路的焊接。
原理图主要包括集LCD显示模块、串口通信模块、数码管显示模块、LED发光二极管、键盘等接口电路的设计。
关键词:
STC单片机,数码管,流水灯,LCD液晶显示
Developmentanddesignof experimental systembasedonSTC89C52singlechipmicrocomputer
ABSTRACT
Singlechipmicrocomputer, thesinglechipmicrocomputer (English Name:
Single-Chip Microcomputer), alsoknownasmicro controller (Microcontroller),isthecentral processor, memory, timer/counter (Timer/Counter), avarietyofinputandoutputinterfaceare integratedwithmicro computer onasingleintegratedcircuit chip. Comparedwiththe general-purposemicroprocessorsusedinpersonal computer, itismoreemphasison self supply (noexternalhardware) andcostsavings. Itsbiggestadvantageis smallsize, canbeputintheinstrument, but smallstoragecapacity, inputandoutputinterface simple,functionisrelatively low. Becauseof itsdevelopmentisveryrapid, theolddefinitionsof SCM hasbeenunabletomeet, so known inmanyapplications forawiderrangeof micro controller; singlechip microcomputer as controller isoftenusedwhen isalsoknownasthesingle chip microcontroller, butatpresent, inthe China mostlyusesthe "chip"call. Themainfeatures:
1, themainstream chip includingCPU, ROM, 4KB capacityof 128BcapacityRAM, 2 16bittimer /counter 4, a 8bitparallelport, fullduplexserialport forexport, ADC/DAC, SPI, I2C, ISP, IAP.
2, thesystem hastheadvantagesofsimplestructure, convenientuse, realizemodularization;
The3 singlechipmicrocomputer, highreliability, can workto10^6 ~10^7 hourswithout fault;
4, strongprocessingability, speed.
5, lowvoltage, lowpowerconsumption, easyproduction ofportable products
6, strongcontrolfunction
7, strongabilitytoadapttotheenvironment.
SCMexperiment platformfor thecurriculumdesign isthecombinationof microcontrollerisdeveloped as asetofsoft, hardware usingSTC seriesmicrocontroller, mainlythroughthe circuit principlediagram, welding circuit.Schematic including setLCD displaymodule, serialcommunicationmodule,digitaltubedisplay moduledesign, LEDlight-emittingdiode, keyboardinterfacecircuit. The MCU Coursesetup it ismodular hardwarestructureandsimple human-computerinteractionfunction, hardwaremodule andpartof thedemoprogram.
KEYWORDS:
STCmicrocontroller, digitaltube, waterlights, LCDliquidcrystaldisplay
第1章概述
1.1设计题目
基于51系列单片机的实验平台开发设计
1.2设计步骤
1.学习各元器件,弄清楚其工作原理;
2.Proteus软件仿真电路图的绘制;
3.根据电路图在开发板上进行焊接;
4.编写、调试开发板程序
5.下载到单片机中,查看实际运行效果。
1.3Proteus与KeilC51软件介绍
Proteus软件是英国LabCenterElectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前比较好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍
第2章硬件电路设计
2.1电路各元器件介绍
2.1.1LCD1602液晶
液晶显示器,或称LCD(LiquidCrystalDisplay),为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。
液晶显示器功耗很低,因此倍受工程师青睐,适用于使用电池的电子设备。
它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。
1、LCD1602实物图
图1LCD外观及引脚
显示容量:
16个×2排字符;工作电流2.0mA(5.0V);字符尺寸:
2.95×4.35mm。
【能够看到的是2排,各16个字符,不是汉字】
2、LCD1602的读写
LCD1602的第5脚:
R/W,读写操作选择(1-读,0-写)。
表1LCD1602的读写
RS
R/W
寄存器及操作
0
0
指令寄存器写入
0
1
忙信号和地址计数器读出
1
0
数据寄存器写入
1
1
数据寄存器读出
LCD1602的第6脚:
E端为使能端,当E端由高电平跳变成低电平时(负
跳变),液晶模块执行命令。
【类似于74LS373,需要负跳变】执行一条命令或写入一个数据,都要使E有一个负跳变。
2.1.2两位一体共阴数码管
1
2
2.1
数码管是一种半导体发光器件,其基本单元是发光二极管。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
同时数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字
1、实物图
图2两位一体LED数码管
2、共阴极LED数码管的内部结构原理图:
图3共阴极LED数码管的内部结构原理图
表2共阴数码管字模表
显示
0
1
2
3
4
5
6
7
8
9
字模
0x3f
0x06
0x5b
0x4f
0x66
0x6d
0x7d
0x07
0x7f
0x6f
此次设计中两位一体数码管采用74LS374锁存器锁存,电路详见附录。
2.1.3其它元器件介绍
1、LED流水灯
流水灯中用8只LED发光二极管练成一排,作为流水灯。
二极管长引脚为正极短引脚为负极,也可用万用表测量。
发光二极管如图所示。
图4LED发光二极管
2、74LS138、74LS373芯片
图574LS138引脚及真值表
注:
1表示高电平,0表示低电平,×表示任意【C为高位,A为低位】
OE
LE
D
Q
0
1
1
1
0
1
0
0
0
0
×
不变
1
×
×
高阻态
图674LS373引脚及功能表
74LS373的三种工作方式:
跟随(OE=0,LE=1,输出跟随输入)
锁存(OE=0,LE从高变为低负跳变时,锁存D0~D7)
高阻(OE=1,Q0~Q7输出为高阻,相当于断开)
另外,此次设计中还用的排阻、色环电阻、电容、三极管等元件,在此不再做详细介绍。
2.2仿真电路连接与实物焊接
2.2.1protues仿真电路
在protues中连接各模块电路,注意各元器件的接法,各模块连接电路图如下:
图7液晶显示及流水灯模块
图8数码管及按键模块
其它模块的连接在此不再展示,详见附录。
2.2.2电路板焊接
1、焊接准备
根据电路原理图,焊接元器件。
先读出色环电阻的阻值,判断电容引脚的正负极,或用万用表测试。
检测各器件是否正常。
准备好电烙铁、焊锡、松香等必备物品。
2、焊接
给电烙铁加热,达到温度后按电路板上元件从低到高的顺序进行焊接,在焊接时要细心、仔细,在正确的位置焊上正确的元件,防止出现错误。
3、检测焊接电路
完成后检查是否有漏焊、连锡等问题。
在我们组用了一上午焊接电路,检查时发现LCD液晶显示不能显示、一个发光二极管不亮,经检测是器件损坏,经更换后故障解除。
焊接实物图如下:
图9焊接电路图
第3章软件设计
3.1程序整体思路
从电路着手编写程序,希望一个程序能把各模块连接起来,而不是用多个程序进行加载。
并且打开电源后能够根据菜单提示通过按键重复进入各模块,而不是每次都需要复位。
所以可以先分开写各模块程序,然后连接起来。
可用while语句查询各标志位实现开电源后能够重复进入各模块。
程序的流程及各标志位含义如下:
图10程序流程图
要实现流程图所示内容,需要解决下面几个问题:
(1)如何在各个模块之间灵活转换,并且在转换时尽可能少的影响其它模块;
(2)如何在一个模块中用多个按键实现多种功能;(3)如何用LCD显示操作提示信息;(4)如何解决在仿真电路中不会出现但在实际电路板中出现的按键抖动问题。
表3各标志位含义
s
总标志位,1开,0关
b1
1写时计数器菜单
s1
每次进入主菜单时写主菜单
b2
更新计数值时重新显示
s2
刚通电或关闭时写关闭菜单
c
LCD模块总标志位
a
流水灯总标志位,1进入0退出
c0
1时写LCD菜单
a1
流水灯左循环标志位
c1
LCD显示姓名
a2
流水灯右循环标志位
c2
LCD显示学号
a3
流水灯暂停标志位
c3
LCD显示日期
b
计数器总标志位,1进入0退出
3.2程序编程实现
(1)流水灯函数程序(执行该模块的同时,LCD上显示流水灯菜单,详见附录):
voidledmod(){
writemenu(LEDmenu);//写菜单
for(i=0;i<3;i++)//先闪烁几下后全亮
{P2=0x55;
delay(150);
P2=0xaa;
delay(150);}
P2=0;
while
(1){
if(a1==1){
for(i=0;i<8;i++)//往左流
{
if(a==0)break;//a=0,跳出LED模块,下同
if(a2==1){a1=0;break;}
P2=led[i];
delay(200);
while(a3==1)if(a==0)break;}//a3=1,执行while循环,相当于暂停
}
if(a2==1){
for(i=0;i<8;i++)//往右流
{
if(a==0)break;
if(a1==1){a2=0;break;}
P2=led[7-i];
delay(200);
while(a3==1)if(a==0)break;
}
}if(a==0)break;}}
(2)计数器函数程序(执行该模块的同时,LCD上显示计数器菜单,详见附录):
voidcoutermod(){
if(b1==1){b1=0;//进入计数器后,写菜单并让数码管显示0,流水灯熄灭
writemenu(counter);
P0=0x3f;
P2=0xff;}
if(b2==1){b2=0;//按下按键数据改变时,数码管重新显示
p25=1;p26=0;p27=0;
P0=table[count/10];
p25=p26=p27=0;
P0=table[count%10];}}
(3)LCD液晶显示模块程序(执行该模块的同时,LCD上显示其菜单,详见附录):
voidLCDmod(){
if(c0==1){c0=0;writemenu(lcdmenu);}//写LCD菜单
if(c1==1){c1=0;//
wcmd(0x80+0x40);for(j=0;j<16;j++)wdat(name[j]);}
if(c2==1){c2=0;
wcmd(0x80+0x40);for(j=0;j<16;j++)wdat(num[j]);}
if(c3==1){c3=0;
wcmd(0x80+0x40);for(j=0;j<16;j++)wdat(date[j]);}}
(4)写各菜单函数(用于写各个模块的菜单):
voidwritemenu(unsignedcharp[])
{wcmd(0x01);
for(j=0;j<16;j++)
wdat(p[j]);
wcmd(0x80+0x40);
for(;j<32;j++)
wdat(p[j]);
(5)主函数
voidmain()
{
TCON=0x55;//01010101,TR1=TR0=IT1=IT0=1
TMOD=0x66;//01100110,两个都为计数方式2
TH0=TL0=0xff;
TH1=TL1=0xff;
IE=0x8f;
LCD_init();
writemenu(OFF);
P0=0;
while
(1){
if(s){//s=1,开始;s=0,关闭。
while
(1){
if(s1){s1=0;writemenu(mainmenu);}
if(a==1){ledmod();}
if(b==1){coutermod();}
if(c==1){LCDmod();}
if(s==0){writemenu(OFF);break;}
}}}}
(6)四个中断函数:
key0()interrupt1{
delay(30);if(p34)return;//防按键抖动
if(a==0&&b==0&&c==0&&s){a=1;return;}//&&b==0&&c==0&&s,判断是否在主菜单中,下同
if(a==1)if(a1==0&&a3==0)a1=1;//&&a3==0,暂停时不能通过中断改变循环方向
if(b==1){count++;if(count==100)count=0;b2=1;}
if(c==1){if(c1==0){c1=1;}}
}
key1()interrupt3{
delay(30);if(p35)return;//防按键抖动
if(b==0&&a==0&&c==0&&s){b=b1=1;return;}//b1=1,第一次进入计数器
if(a==1)if(a2==0&&a3==0)a2=1;
if(b==1){count--;if(count<0)count=0;b2=1;}
if(c==1){if(c2==0){c2=1;}}
}
key2()interrupt0{
delay(30);if(p32)return;//防按键抖动
if(c==0&&b==0&&a==0&&s){c=1;c0=1;return;}
if(a==1&&(a1||a2)){a3=!
a3;}//&&(a1||a2),防止刚进入流水灯时,按下暂停键暂停
if(b==1){count=0;b2=1;}
if(c==1){if(c3==0){c3=1;}}
}
key3()interrupt2{
delay(30);if(p33)return;//防按键抖动
if(a==0&&b==0&&c==0){s=!
s;}//在关闭或主菜单中按下key3开始或进入主菜单
if(a==1){a=0;a1=a2=a3=0;}
if(b==1){b=