8255LCD函数信号发生器解析由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“函数信号发生器程序”。
课 程 设 计 报 告
课
程
名
称
51单片机
课
程
题
目
基于8255的LCD显示函数信号发生器的设计
专
业
通信工程
班
级
学
号
姓
名
同
组
人
指
导
单
位
南京邮电大学通达学院
指
导
教
师
林建中
第一部分 实验目的及要求
1、实验目的⑴掌握Proteus对MCS51单片机的仿真⑵学习汇编语言以及C语言在51编程上的使用 ⑶掌握使用Keil软件对51单片机编程
根据提供的参考工程,在 Proteus平台自己重新画出实验所需要的电气原理图,并在此基础上编写相对应的程序,实现其功能,学习Proteus软件的使用,其中包括原理图器件的选取、原理图的电气连接、程序的编写编译以及运行,并能查出其错误等。
2、实验设备
硬件:微机(WindowsXP)
软件:Proteus 7.4 sp3,Keil uVersion 33、实验基本要求
基本要求:
⑴用存储器或算法得到信源。
⑵用DA转换器输出一函数信号(正弦、方波、三角、锯齿等,频率1000Hz),可以用
示波器进行波形观察。
⑶用LCD显示输出参数。⑷用功能键切换各信号的输出。动态显示格式: 自定
第二部分 实验工具及实验器件
1、Proteus 以及 Keil 软件的介绍
Proteus 是英国 Labcenter 公司开发的电路及单片机系统设计与仿真软件。Proteus可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能。Proteus是目前唯一能对各种处理器进行实时仿真、调试与测试的EDA工具,真正实现了在没有目标原型时就可对系统进行调试、测试和验证。Proteus 软件大大提高了企业的产品开发效率,降低了开发风险。由于Proteus软件逼真、真实的协同仿真功能,它也特别适合于作为配合单片机课堂教学和实验的学习工具。
Proteus 软件提供了30多个元器件库、7000余种元器件。元器件涉及电阻、电容、二极管、三极管、变压器、继电器、各种放大器、各种激励器、各种微控制器、各种门电路和各种终端等。Proteus 软件还提供有交直流电压表、逻辑分析仪、示波器、定时/计数器和信号发生器等测试信号工具用于电路测试。
Keil C51是美国 Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整 开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP 等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
应用 Keil 进行软件仿真开发的主要步骤为:编写源程序并保存—建立工程并添加源文件—设置工程—编译/汇编、连接,产生目标文件—程序调试。Keil 使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。首先选择菜单File-New…,在源程序编辑器中输入汇编语言或C语言源程序(或选择 File-Open…,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜单Project-New Project…,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group‘Source Group1’”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,选择工程 管理窗口的Target1,再选择Project-Option for Target‘Target1’(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“Creat Hex Fi”;其它选项卡内容一般可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。成功编译/汇编、连接后,选择菜单Debug-Start/Stop Debug Seion(或按Ctrl+F5键)进入程序调试状态,Keil 提供对程序的模拟调试功能,内建一个功能强大的仿真CPU以模拟执行程序。Keil 能以单步执行(按 F11或选择 Debug-Step)、过程单步执行(按F10或选择 Debug-Step Over)、全速执行等多种运行方式进行程序调试。如果发现程序有错,可采用在线汇编功能对程序进行在线修改(Debug-Inline Aambly…),不必执行先退出调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行调试的程序行,可采用断点设置的方法处理(Debug-Insert/Remove Breakpoint 或 Debug-Breakpoints…等)。在模拟调试程序后,还须通过编程器将.hex 目标文件烧写入单片机中才能观察目标样机真实的运行状况。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在 PROTEUS 的原理图中看到模拟的实物运行状态和过程。
2、51单片机AT89C51 51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。当前常用的51系列单片机主要产品有:
*Intel的:80C31、80C51、87C51、80C32、80C52、87C52 等; *ATMEL的:89C51、89C52、89C2051 等;
AT89C51单片机的内部结构为: 单一+5V电源供电; CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统:
一对全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
2、D/A转换集成芯片DAC0832 DAC0832是8分辨率的D/A转换集成芯片,与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。它由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
ILE:数据锁存允许控制信号输入线,高电平有效;
CS:片选信号输入线(选通数据锁存器),低电平有效;
WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;
IOUT2:电流输出端2,其值与IOUT1值之和为一常数; Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
Vcc:电源输入端,Vcc的范围为+5V~+15V;
VREF:基准电压输入线,VREF的范围为-10V~+10V;
AGND:模拟信号地
DGND:数字信号地
3、可编程并行I/O接口芯片8255A 8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。
特点:
(1)一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。
(2)具有24个可编程设置的I/O口,即3组8位的I/O口为PA口,PB口和 PC口。它们又可分为两组12位的I/O口,A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向 I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定。
RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有 I/O 口均被置成输入方式。CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0 时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1 时,8255无法与CPU做数据传输。
RD:读信号线,当这个输入引脚为低电平时,即/RD=0 且/CS=0 时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。
D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:端口B输入输出线,一个8位的 I/O 锁存器一个8位的输入输出缓冲器。PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器。当 A1=0,A0=0 时,PA 口被选择; 当 A1=0,A0=1 时,PB 口被选择;
当 A1=1,A0=0 时,PC 口被选择; 当 A1=1,A0=1 时,控制寄存器被选择。
4、LCD液晶显示器件LM016L
LM016L 是一个2*16的点阵式字符液晶显示模块,每个字符由5*7个点组成的;
内部带有HD44780控制器;
采用5V电源供电;
内建有192个字符,8个用户自建字符。
第三部分 实验原理图及程序
1、实验步骤有Proteus参与的单片机系统开发过程一般分为四步:
①在Proteus平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。
②进行单片机系统源程序设计、编辑、汇编编译、调试,最后生成目标代码文件。③在Proteus平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。
④仿真正确后,制作实际单片机系统电路,并将目标代码文件下载到实际单片机中运行、调试,直至运行成功。
2、硬件部分电路设计
由于本次实验设计的是一个由单片机组成的函数信号发生器的实验,并且题目要求我们使用的是8255芯片,由于8255并行IO口扩展方法之一,通过初始化编程设置,为单片机扩展多种方式的并行输入/输出接口,最多可扩展三个八位的IO口,分别称为A口、B口和C口,其中,A口具有输入输出双向锁存,可实现一般IO功能、选通输入功能、选通输出功能和选通输入/输出双向功能,其运用最为灵活。B口具有输出锁存和输入缓冲,能实现A口的相同功能,除了双向输入/输出功能,C口能用于一般八为IO口,具有为操作功能,在多数场合作为A口和B口的控制端口使用。8255芯片占用CPU的四个外部RAM地址单元。8255具有多种用途,通过跳线可以用于LCD数码管显示输出。DA转换器用于数字信号模拟化,DAC0832是8位分辨率的DA转换器,与微处理器完全兼容。与它类似的芯片有DAC0830和DAC0831,这个系列的转换器芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛应用。这类D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及控制电路构成。该电路的显示部分按要求则使用型号为LM016的LCD液晶显示器,通过P0口传送数据然后由 LCD 显示出来。另外,电路中还设计了两个按键,用来选择要显示的波形。基于8255口是指显示和键盘都由8255的 I/O 口控制,使用8255可编程并行口芯片,设定为工作方式0,PC口做输入,PA口做输出,使得达到控制通过按键选择发送,显示正确的数据串。
完整电路原理图如下:
(虽然题目的要求是频率1000Hz,但是经过测试,1000Hz时的波形及其不稳定,经过反复调试,得出结论:当频率为333Hz时,波形比较稳定,所以改动了题目的要求)
3、软件部分设计
程序如下:
#include #include “lcd1602.h” #define uchar unsigned char #define uint unsigned int
sbit key1 = P3 ^ 4;sbit key2 = P3 ^ 5;
code unsigned char Str1[] = “Signal Source”;code unsigned char Str2[] = “Starting...”;
unsigned char DispSin1[] = { “Wave:sin” };unsigned char DispSin2[] = { “F=333hz 2A=2.5v” };
code unsigned char DispSaw1[] = { “Wave:saw” };code unsigned char DispSaw2[] = { “F=333hz A=2.5v” };
code unsigned char DispSqu1[] = { “Wave:squ” };code unsigned char DispSqu2[] = { “F=333hz A=2.5v” };
code unsigned char DispTri1[] = { “Wave:tri” };code unsigned char DispTri2[] = { “F=333hz A=1.25v” };
code unsigned char Sin[128]= {64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106, 109,111,113,115,117,118,120,121,123,124,125,126,126, 127,127,127,127,127,127,127,126,126,125,124,123,121, 120,118,117,115,113,111,109,106,104,102,99,96,94,91, 88,85,82,79,76,73,70,67,64,60,57,54,51,48,45,42,39, 36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1, 1,0,0,0,0,0,0,0,1,1,2,3,4,6,7,9,10,12,14,16,18,21,23, 25,28,31,33,36,39,42,45,48,51,54,57,60};//T=3ms f=333hz
code unsigned char Saw[128]= { 0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 , 8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 , 16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 , 24 ,25 ,26 ,27 ,28 ,29 ,30 ,31 , 32 ,33 ,34 ,35 ,36 ,37 ,38 ,39 , 40 ,41 ,42 ,43 ,44 ,45 ,46 ,47 , 10 48 ,49 ,50 ,51 ,52 ,53 ,54 ,55 , 56 ,57 ,58 ,59 ,60 ,61 ,62 ,63 , 64 ,65 ,66 ,67 ,68 ,69 ,70 ,71 , 72 ,73 ,74 ,75 ,76 ,77 ,78 ,79 , 80 ,81 ,82 ,83 ,84 ,85 ,86 ,87 , 88 ,89 ,90 ,91 ,92 ,93 ,94 ,95 , 96 ,97 ,98 ,99 ,100 ,101 ,102 ,103, 104 ,105 ,106 ,107 ,108 112 ,113 ,114 ,115 ,116 120 ,121 ,122 ,123 ,124
code unsigned char Tri[128]= { 1,1,2,3,4,5,6,7, 8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23, 24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55, 56,57,58,59,60,61,62,63, 63,62,61,60,59,58,57,56, 55,54,53,52,51,50,49,48, 47,46,45,44,43,42,41,40, 39,38,37,36,35,34,33,32, 31,30,29,28,27,26,25,24, 23,22,21,20,19,18,17,16, 15,14,13,12,11,10,9,8, 7,6,5,4,3,2,1,1};
code unsigned char Squ[128]= {0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 127,127,127,127,127,127,127,127, 127,127,127,127,127,127,127,127, 127,127,127,127,127,127,127,127, 127,127,127,127,127,127,127,127, 127,127,127,127,127,127,127,127, ,109 ,110 ,117 ,118 ,125 ,126 ,111, ,119, ,127};11 127,127,127,127,127,127,127,127, 127,127,127,127,127,127,127,127, 127,127,127,127,127,127,127,127};
main(){ unsigned char ouoput_cnt;unsigned char dispflg;unsigned char dispbak,dispnum;lcd1602init();PORT = 0x03;lcd_clr();lcd_string(Str1, 1);lcd_string(Str2, 2);while(1){
ouoput_cnt++;
if(ouoput_cnt == 128)
ouoput_cnt =0;
if(key1 == 0 && key2 == 0)
{
P1=Sin[ouoput_cnt];
dispbak = dispnum;
dispnum = 0;
if(dispbak!= dispnum)
dispflg = 1;
}
else if(key1 == 0 && key2 == 1)
{
P1=Tri[ouoput_cnt];
dispbak = dispnum;
dispnum = 1;
if(dispbak!= dispnum)
dispflg = 1;
}
else if(key1 == 1 && key2 == 0)
{
P1=Saw[ouoput_cnt];
dispbak = dispnum;
dispnum = 2;
if(dispbak!= dispnum)
dispflg = 1;12
}
else
{
P1=Squ[ouoput_cnt];
dispbak = dispnum;
dispnum = 3;
if(dispbak!= dispnum)
dispflg = 1;
}
if(dispflg == 1)
{
dispflg = 0;
lcd_clr();
switch(dispnum)
{
case 0:
lcd_string(DispSin1, 1);
lcd_string(DispSin2, 2);
break;
case 1:
lcd_string(DispTri1, 1);
lcd_string(DispTri2, 2);
break;
case 2:
lcd_string(DispSaw1, 1);
lcd_string(DispSaw2, 2);
break;
case 3:
lcd_string(DispSqu1, 1);
lcd_string(DispSqu2, 2);
break;
default:
break;
}
} } }
第四部分 仿真测试正弦波
锯齿波
方波
三角波
第五部分 实验小结和体会本次课程设计的题目是基于8255的LCD显示函数信号发生器的设计。虽然对单片机有一定的了解,但是对于独立的设计我们还有一定的欠缺。所以这次课程设计,一开始让我们觉得不知所措。
拿到题目以后,先是通过网络和借阅的单片机相关的书籍,初步了解了单片机的基础知识以及单片机通信功能的使用,巩固了一下基本知识。接着,我们对课题进行了剖析:首先是基于8255实现,这也是本次设计的一个重点所在。这要求我们要熟悉8255芯片的功能,管脚原理等。另外,就是各种波形的切换,和设置可调的频率,也是本次试验重点所在。最后,本次试验的关键,也就是如何在知晓芯片功能,初步设计原理图的情况下,编写恰当的程序,通过发送函数和main函数中的接收函数将数据存储并显示出来。
两周的时间真的很紧迫,实验中遇到了不少难题。尤其是我的这个课题如果按照给出的频率要求运行,波形失真的厉害,(最后老师点评是分析是,我们没有使用定时器。)但是经过不断的试验,终于找到了合适的频率。为此,我们两个人高兴坏了。这次试验让我们受益匪浅,在此还要感谢指导老师的悉心指导和鼓励。
模拟 电 路 课 程 设 计 报 告中原工学院(2012年6月24日)目录1、课程设计的任务、要求及步骤2、设计方案的选择3、电路设计主要的技术指标4、函数信号发生器电路原理分析5、函......
课程设计报告书——多功能函数信号发生器多 功 能 函 数 发 生 器— — 设 计 报 告 一、设计任务�1�设计一个能产生正弦波、矩形波、三角波、锯齿波的电路�要求波形的频率在一......
一 绪论1.1 函数信号发生器的应用意义函数发生器一般是指能自动产生正弦波、三角波、方波及锯齿波、阶梯波等电压波形的电路或仪器。根据用途不同,有产生三种或多种波形的函......
函数信号发生器设计设计任务与要求⑴ 设计并制作能产生正弦波、矩形波(方波)和三角波(锯齿波)的函数发生器,本信号发生器可以考虑用专用集成芯片(如5G8038等)为核心实现。⑵ 信号频......
波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。本次课程设计使用的AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波......