流水灯、数码管、按键、液晶显示器LCD驱动程序和RS232串口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
引言
单片机(微操纵器)是一种集成电路芯片,是采纳超大规模集成电路技术与数据处置能力的中央处置器CPU,只读存储器ROM,各类各样的I / O口和中断系统、按时器/计数器功能(可能包括显示驱动电路、脉宽调制电路,模拟多路复用器和A / D转换器电路)集成到一块硅组成的小型和完美的微机系统,普遍应用于工业操纵领域。
自1980年代以来,8位单片机,进展到此刻的300高速单片机。
以其极高的性价比,是人们的注意和关切,应用很广,进展专门快。
单片机体积小、重量轻、抗干扰能力强、环境要求不高,本钱低,靠得住性高,灵活性好,开发较为容易。
由于这些优势,
在我国单片机已普遍应用于工业自动化操纵、自动检测、智能仪器仪表、电力电子、机电一体化设备和其他方面,最典型的是单片机51单片机。
在本次课程设计中以STC89C52芯片为核心,辅以必要的电路,设计了流水灯、数码管、按键、液晶显示器LCD驱动程序和RS232串口程序。
同时系统硬件设计简单、稳固性高、价钱低廉等优势。
关键词:液晶显示器,STC89C52,RS232
MCU (Microcontrollers) is A kind of integrated circuit chips, is to use very large scale integrated circuit technology with data processing ability of the central processor CPU, ROM, A variety of I/O mouth and interrupt system, timer/counter function (may include display driver circuit, pulse width modulation circuit, analog multiplexer and A/D converter circuit) is integrated into A piece of silicon consisting of A small and perfect microcomputer system, widely used in industrial control field. Since the 1980 s, by the time of the four, 8-bit microcontroller, development to the present 300 m high speed single chip microcomputer.
SCM since the 1970 s, with its extremely high cost performance, is very wide, developing very quickly. SCM small size, light weight, strong anti-jamming capability, environmental requirements is not high, low cost, high reliability, good flexibility, development is relatively easy. Because of these advantages, in our country, SCM has been widely used in industrial automation control, automatic detection, intelligent instruments and other aspects, and is most typical in the microcontroller 51 single-chip microcomputer ,The curriculum design through study and application of it, STC89C52 chip as the core, supplemented by necessary circuit, designed a light water program, digital tube, key procedures, LCD driver and RS232 serial interface program.
At the same time the system has simple hardware design, high stability, price is low wait for an advantage .
Key words: liquid crystal display,STC89C52,RS232
第一章整体设计方案
1.1 课程设计任务
(1)依照硬件电路画出原理图及PCB图;
(2)在硬件电路上完成流水灯、数码管、按键、液晶显示器和RS232串口通信驱动程序。
(3)组内分派表如表1-1
表1-1 组内分派表
1.2 设计流程
(1)利用Altium Designer软件绘制原理图和PCB图 ;
(2)利用keil5进行流水灯,数码管,按键,液晶显示器和RS232串口通信程序的编写;
(3)利用PZISP自动下载软件将程序下载到STC89C52单片机上。
第二章硬件设计与分析
硬件分析
STC89C52
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处置器,俗称单片机。
该器件采纳ATMEL 弄密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容STC89C52具体介绍如下:
①主电源引脚(2根)
VCC(P in40):电源输入,接+5V电源
GND(P in20):接地线
②外接晶振引脚(2根)
XTAL1(P in19):片内振荡电路的输入端
XTAL2(P in20):片内振荡电路的输出端
③操纵引脚(4根)
RST/VPP(P in9):复位引脚,引脚上显现2个机械周期的高电平将使单片机复位。
ALE/PROG(P in30):地址锁存许诺信号
PSEN(P in29):外部存储器读选通信号
EA/VPP(P in31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,若是接高电平那么从内部程序存储器读指令。
④可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,别离位P0、P1、P2、P3口,每一个口有8位(8根引脚),共32根。
P0口(P in39~P in32):8位准双向I/O口线,名称为P~P
P1口(P in01~P in08):8位准双向I/O口线,名称为P~P
P2口(P in21~P in28):8位准双向I/O口线,名称为P~P
P3口(P in10~P in17):8位准双向I/O口线,名称为P~P
STC89C52要紧功能如表2-1所示。
表2-1 STC89C52要紧功能
主要功能特性
2.1.2 MAX232
MAX232芯片(如图)是美信公司专门为电脑的RS-232标准串口设计的接口电路,利用+5V单电源供电。
内部结构大体可分三个部份:第一部份是电荷泵电路。
由1、2、3、4、5、6脚和4只电容组成。
功能是产生+12V和-12V两个电源,提供给RS-232串口电平的需要。
第二部份是数据转换通道。
由7、8、9、10、11、12、13、14脚组成两个数据通道。
其中13脚(R1in)、12脚(R1out)、11脚(T1out)、14脚(T1out)为第一数据通道。
8脚(R2in)、9脚(R2out)、10脚(T2in)、7脚(T2out)
为第二数据通道。
TTL/CMOS数据从T1in、T2in输入转换成RS-232数据从T1out、T2out送到电脑DB9插头;DB9插头的RS-232数据从R1in、R2in输入转换成TTL/CMOS数据后从R1out、R2out输出。
第三部份是供电。
15脚GND、16脚VCC(+5 V)。
图2.1 MAX232
2.1.3 74HC573八进制3非反转透明锁存器
高性能硅门CMOS器件
SL74HC573(图 2.2(a)、(b)别离为引脚图和内部结构图)跟LS/AL573 的管脚一样。
器件的输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。
当锁存使能端LE为高时,这些器件的锁存关于数据是透明的(也确实是说输出同步)。
当锁存使能变低时,符合成立时刻和维持时刻的数据会被锁存。
u36755X出能直接接到 CMOS,NMOS 和 TTL 接口上
u25805X作电压范围:
u20302X输入电流:
CMOS 器件的高噪声抗击特性
图(b) SL74HC573内部结构图图2..2(a) SL74HC573引脚图
电路设计分析
单片机总操纵电路
如以下图
图2.3 单片机总操纵电路
时钟电路
STC89C52内部有一个用于组成振荡器的高增益反相放大器,引脚RXD和TXD别离是此放大器的输入端和输出端。
时钟能够由内部方式产生或外部方式产生。
内部方式的时钟电路如图2.4(a) 所示,在RXD和TXD引脚上外接按时元件,内部振荡器就产生自激振荡。
按时元件通常采纳石英晶体和电容组成的并联谐振回路。
晶体振荡频率能够在~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。
外部方式的时钟电路如图(b)所示,RXD接地,TXD接外部振荡器。
对外部振荡信号无特殊要求,只要求保证脉冲宽度,一样采纳频率低于12MHz的方波信号。
片内时钟发生器把振荡频率两分频,产生一个两相
时钟P1和P2,供单片机利用。
RXD接地,TXD接外部振荡器。
对外部振荡信号无特殊要求,只要求保证脉冲宽度,一样采纳频率低于12MHz的方波信号。
片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机利用。
(a)内部方式时钟电路(b)外部方式时钟电路
图2.4 时钟电路
2复位及复位电路
(1)复位操作
复位是单片机的初始化操作。
其要紧功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除进入系统的正常初始化之外,当由于程序运行犯错或操作错误使系统处于死锁状态时,为摆脱窘境,也需按复位键从头启动。
除PC之外,复位操作还对其他一些寄放器有阻碍,它们的复位状态如表2-2所示。
表2-2 一些寄放器的复位状态
寄存器复位状态寄存器复位状态
PC0000H TCON00H
ACC00H TL000H
PSW00H TH000H
SP07H TL100H
DPTR0000H TH100H
P0-P3FFH SCON00H
IP XX000000B SBUF不定
IE0X000000B PCON0XXX0000B
TMOD00H
(2)复位信号及其产生
RST引脚是复位信号的输入端。
复位信号是高电平有效,其有效时刻应持续24个振荡周期(即二个机械周期)以上。
假设利用颇率为6MHz 的晶振,那么复位信号持续时刻应超过4us才能完成复位操作。
产生复位信号的电路逻辑如图所示:
图2.5 复位信号的电路逻辑图
整个复位电路包括芯片内、外两部份。
外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每一个机械周期的S5P2时刻对施密特触发器的输出进行采样,然后才取得内部复位操作所需要的信号。
复位操作有上电自动复位相按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图(a)所示。
这佯,只要电源Vcc的上升时刻不超过1ms,就能够够实现自动上电复位,即接通电源就成了系统的复位初始化。
按键手动复位有电平方式和脉冲方式两种。
其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图(b)所示;而按键脉冲复位那么是利用RC微分电路产生的正脉冲来实现的,其电路如图(c)所示:
(a)上电复位(b)按键电平复位(c)按键脉冲复位
图2.6 复位电路
上述电路图中的电阻、电容参数适用于6MHz晶振,能保证复位信号高电平持续时刻大于2个机器周期。
本系统的复位电路采纳图(b)上电复位方式。
第三章软件设计与分析
利用Altium Designer绘制电路图
绘制电路图关键步骤:
新建一个工程绘制原理图绘制元件库绘制PCB封装错误检查及生成PCB 摆放元件位置设置布线规那么手工或自动布线检查结果。
绘制的原理图和PCB 图见附录中的图1和图2。
编程与分析
利用Keil5软件进行流水灯,数码管,按键,液晶显示器和RS232串口通信程序的编写,程序代码见附录。
实验结果与分析
实验现象:当接通电源时、流水灯花腔闪烁,当按下S3键,将改变流水灯的闪烁速度;按下S4时,液晶显示屏上显示一个心形图案(见附录图3);按下S5时,液晶屏第二行显示“sixth design”字样;按下S6时,数码管显示数字。
期间的延迟时刻能够依照需要和视觉成效自行设计。
分析:按键操纵数码管和液晶屏的显示要紧通过中断程序和键扫描实现对数组的依次访问来实现;流水灯主若是通过循环移动来实现。
第四章总结与致谢
4.1 总结
1.在咱们一组我担任组长,我就成立了咱们自己的QQ群,将网上查找的资料都会分享到群里,如此增强了团队合作精神,也是咱们的设计速度大大的提高了。
在设计前咱们进行合理分派任务,在设计进程中咱们尽管碰到了很多困难,比如,在进行原理图和PCB图的绘制时咱们没有元件库,咱们通过在百度中查阅资料和看郭天祥的视频,最后画出了自己需要的元件库。
PCB图的绘制进程咱们是最头疼的,起初没有PCB 库,咱们在许教师的帮忙和指导下找上了元件库,为了把线布好,我和组员满冠军不断的进行手工布线,一次又一次的失败没有让咱们悲观丧气,持续坚持了两个晚上咱们终于制出了咱们想要的PCB图。
更为宝贵的是,咱们彼此鼓舞,同舟共济处置每一个问题。
这种团队精神是咱们美好的回忆。
咱们花了很多心血来做那个课程设计,咱们还请了薛伟东和王子银两位同窗给咱们指导。
2.增强了咱们对电子器件的了解,尤其是对STC89C52单片机有了更深切的了解。
一直以来,咱们都对电子器件很感爱好,对生活中的电子器件的应用专门好奇,通过这次课程设计咱们了解到了电子应用的奇异的地方。
3.提高了咱们利用电脑对电路进行仿真的能力。
对Altium Designer、keil软件进一步的把握做了基础。
4.做到了理论联系实际。
在上学期学过单片机原理与接口技术这门课程,咱们没有完全弄懂某些元器件的原理和用途,而这次课程设计恰
恰提供了一个好机遇,让咱们从实践中加深了对所学知识的明白得。
4.2 致谢
在这次课程设计中不论是咱们的组员仍是舍友都给了我精神上的鼓舞,使我对这次课程设计有了专门大的信心。
尽管在设计进程中碰到了重重困难,可是通过许教师推荐郭天祥的视频后,一切问题就取得了解决。
最后,超级感激在这次课程设计中帮忙我的每一名教师和同窗。
参考文献
[1]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2020
[2]谭浩强.C程序设计[M].北京:清华大学出版社,2021
[3]求是科技.8051系列单片机C程序设计[J].北京:人民邮电出版社,2006
[4]闫石.数字电子技术基础(第四版)[M].高等教育出版社,1998
[5]黄遵熹.单片机原理接口与应用[M].西安:西北工业出版社,1997
[6]张毅光.单片机原理与接口技术(C51编程)[M].北京:人民邮电出版社,2020
附录
附录1 源程序代码
花腔流灯并用按键操纵流水灯的速度、液晶屏显示及数码管显示
#include<reg52.h>
#include<>
#define uchar unsigned char
#define uint unsigned int
uchar num,nu,h,m,i,g;
unsigned char speed; //贮存流水灯的流动速度
uchar z,a,b,temp;
uchar code table[]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7}; uchar code table1[]={
0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E, 0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00, 0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01, 0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00, 0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00};//心图案
uchar code table2[]="sixth design"; //概念数组
uchar code table3[]={ //十六进制0~f
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit dsen2=P3^5;
sbit dsen1=P3^4;
sbit S3=P2^4;
sbit S4=P2^5;
sbit S5=P2^6;
sbit S6=P2^7;
sbit lcden=P3^6;//液晶使能端
sbit lcdrs=P3^7;//液晶数据命令选择端sbit lcdrw=P3^2;//液晶数据读写端
sbit crl=P3^3;
/*延时*/
void delayms(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--)
;
}
void write_com(uchar com) //液晶驱动{
lcdrs=0;
lcdrw=0;
P0=com;
delayms(10);
lcden=1;
delayms(10);
lcden=0;
}
void write_data(uchar date) //液晶显示{
lcdrs=1;
lcdrw=0;
P0=date;
delayms(10);
lcden=1;
delayms(10);
lcden=0;
}
void init() //初始化
{
crl=0;
lcdrw=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
/*主函数*/
void main(void)
{
TMOD=0x02; //利用按时器T0的方式2
EA=1; //开总中断
ET0=1; //按时器T0中断许诺
TR0=1; //按时器T0开始运行
TH0=256-200;//按时器赋初值,每200us产生一次中断
TL0=256-200; //按时器赋初值,每200us产生一次中断speed=100;
while(1)
{
for(a=0;a<=3;a++)
{
P1=table[a];
delayms(speed);
}
temp=0xfe;
for(b=0;b<=8;b++)
{
P1=temp;
delayms(speed);
temp=temp<<1;
}
temp=0x7f;
for(b=0;b<=8;b++)
{
P1=temp;
delayms(speed);
temp=temp>>1;
}
for(a=4;a<=7;a++)
{
P1=table[a];
delayms(speed);
}
}
}
timer0 () interrupt 1 using 1 { TR0=0;
P2=0xff;
if((P2&0xf0)!=0xf0)
{
delayms(20);
if((P2&0xf0)!=0xf0)
{
if(S3==0)
{
speed=50;
}
if(S4==0)
{
char m=0;
init();
write_com(0x40); //设定CGRAM地址
for(m=0;m<64;m++) //将心型代码写入CGRAM中
{
write_data(table1[m]);
}
write_com(0x85); //设定上排的显示位置
for(m=0;m<4;m++) //显示心型图案的上半部份
{
write_data(m);
}
write_com(0xc5); //将显示坐标转移到下排和上排相对应的地址
for(m=4;m<8;m++) //显示心型图案的下半部份
{
write_data(m);
P0=0x00;
}
if(S5==0)
{
init();
speed=100;
write_com(0x80+0x40); //液晶第2行操纵
for(nu=0;nu<16;nu++) //第2排显示
{
write_data(table2[nu]); //读入数组
}
delayms(700);
write_com(0x01);
P=0x00;
}
if(S6==0)
{
init();
引脚输出低电平,数码显示器接通电源预备点亮for(g=0;g<16;g++)
{
dsen1=1;
引脚输出低电平,数码显示器接通电源预备点亮
for(i=0;i<16;i++)
{
P0=table3[i];
delayms(500);
if(S3==0||S4==0||S5==0)
break;
}
dsen1=0;
P0=table3[g];
delayms(500);
}
P0=0x00;
}
}
}
TR0=1;
}
附录2 电路图
图1 原理图
图2自动布线 PCB图
图3 实物心形图。