单片机课程设计模板2017
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(论文)课程名称单片机应用课程设计
题目
院(系)
专业班级
姓名
学号
指导教师
年月日
西安建筑科技大学课程设计(论文)任务书
专业班级:电子1302 学生姓名:王玖玲指导教师(签名):
一、课程设计(论文)题目
正弦波信号发生器设计
二、本次课程设计(论文)应达到的目的
本次课程设计是自动化专业学生在学习了《单片机原理及应用》课程及《模拟电子线路》、《数字电子线路》等专业基础课程之后进行的一次综合训练,其主要目的是加深学生对单片机软硬件技术和相关理论知识的理解,进一步熟悉51单片机系统设计的基本理论、方法和技能;掌握工程应用的基本内容和要求,力争做到理论与实际的统一;同时培养学生分析问题、解决问题的能力和独立完成系统设计的能力,并按要求编写相关的技术文档和设计报告等。
三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等)
1.设计内容
(1)选择51单片机,晶振采用12MHz。
(2)设计一个能产生0至50HZ正弦波信号。
通过0832D/A芯片完成数模转换。
(3)频率值由键盘输入。
(4)将频率值由LED数码管上显示(两位)。
2.设计要求
(1)按照任务书的要个求完成系统分析及方案设计。
(2)完成硬件原理图的设计,并选择相关元器件。
(3)完成控制软件流程图的设计,编写相应的单片机控制程序。
(4)撰写设计报告。
3. 成果要求
(1)在proteus中实现仿真。
(2)提交课程设计报告。
四、应收集的资料及主要参考文献:
1.李建忠.单片机原理及应用.西安电子科技大学出版社,2008
2.杨居义.单片机课程设计指导.清华大学出版社,2009
3.李海滨等.单片机技术课程设计与项目实例.中国电力出版社,2009
以及与51系列单片机相关的文献及教材。
五、审核批准意见
教研室主任(签字)
设计总说明
本系统利用单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生0HZ-50HZ的正弦波。
通过键盘输入频率值。
系统大致包括信号发生部分、数/模转换部分以及显示部分三部分,其中尤其对数/模转换部分和波形产生部分进行详细论述。
关键词:单片机AT89C51,DAC0832
摘要
水箱水位控制系统研究背景:
在工农业生产中,常常需要控制液体水位。
随着国家工业的迅速发展,水位控制技术被广泛应用到石油、化工、医药、食品等各行各业中。
低温液体(液氧、液氮、液氩、液化天然气及液体二氧化碳等)得到广泛的应用,作为贮存低温液体的容器要保证能承受其载荷;在发电厂、炼钢厂中,保持正常的锅炉汽包水位、除氧器水位、汽轮机凝气器水位、高、低压加热器水位等,是设备安全运行的保证;在教学与科学研究中,也经常碰到需要进行水位控制的实验装置。
水箱水位控制系统研究意义:
大型水箱是很多公司生产过程中必不可少的部件,它的性能和工作质量的优良不仅仅对生产有着巨大的影响,而且也关系着生产的安全。
在过去,大量的对水箱操作是由相应的人员进行操作的,这样的人工方式带来了很大的弊端,比如水位的控制,时刻监控水箱的环境,夜间的监控等等,操作员
稍有疏忽,或者简易的监则器件损坏,将带来无法弥补的损失,更严重的会危机到生产人员的人身安全等。
所以,对水箱控制,如果能够使用精密的而且完全会严格按照生产规定运行的自动化系统,可以最大限度的避免事故的几率,同时也能节省资源并能有效提高生产效率。
从水资源节约方面考虑,以往的人工控制在很多情况下,造成资源不必要的浪费,大部分原因是水箱内部水位没有及时的反馈信息到操作员,从而使控制上有一定的延迟,从而造成了水量过多或者没能及时补水而导致资源的浪费或生产出现异常。
而对水箱水位的监控以及自动化的引入可以很好的改善补水过多和及时补水的
情况,可以很好的节约资源有效的降低成本。
单片机,一小块芯片上集成了一个微型计算机的各个组成部分,它的诞生使众多自动化控制系统得以实现。
80C51以它功能强大,设计简单,制造廉价,支持指令集较多。
所以应用到众多嵌入式系统开发中。
因此,基于80C51单片机的水箱水位控制系统研究有着重要的意义。
水位控制一般指对某一水位进行控制调节,使其达到所要求的控制精度。
液体的水位自动控制,是近年来新开发的一项新技术,它是微型计算机软件、硬件、自动控制等几项技术紧密结合的产物,工程作业采用的是微机控制和原有的仪表控制,危机控制有以下明显优势:1)直观而集中的显示运行参数,能显示水位状态。
2)在运行中可以随时方便的修改各种各样的运行参数的控制值,并修改系统的控制参数,可以方便的改变水位的上限、下限。
3)具有水体控制过程的自动化处理以及监控软件良好的人机界面,操作人员在监控计算机上能根据控制效果及时修改运行参数,这样能有效地减少工人的疲劳和失误,提高生产过程的实时性、安全性。
综合以上的种种优点可以预见采用计算机控制系统是行业的大势所趋。
单片机在一块芯片上集成了一片微型计算机所需的CPU、存储器、输入、输出等部件。
单片机自问世以来,性能不断提高和完善,体积小、速度快、功耗低
的特点使它的应用领域日益广泛。
一般工业控制系统的工作环境差,干扰强,利用单片机控制就能克服这些缺点,因此单片机在控制领域得到广泛的应用,使用单片机控制水箱水位是很好的选择。
水箱水位控制系统国内外研究现状:
目前,水箱控制系统已不仅仅局限于大型的电厂、煤炭、钢铁等大型企业领域,它以自身的自动化控制系统的安全优势,已经慢慢深入到一些民用水箱产品。
但是目前阶段,它的成本还很高。
比如把一台纯手工家用水箱设计成自动化控制的水箱,从硬件的设计和铺设,对于民用化产品实施的性价比较高。
因此大规模的使用仍受到经济上的限制。
但是,从长远来看,随着自动化技术的改进和硬件成本的降低,以及人们对资源浪费的重视。
水箱控制系统仍然有大规模推广的前景。
我国仍然处于生产型发展中国家,所有几乎在能源相关的所有领域中,水箱是比不可少的部件,即使是发达国家也不例外。
它性能的优良与否关系直接关系到企业的生产安全和效益。
随着我国嵌入式技术的发展,我国控制系统技术已经达到国际水平,但是在中小型企业以及民用产品,大量的水箱控制任然通过专职的人员进行控制。
随着我国单片机开发技术的逐渐成熟,以及单片机生产成本的下降,基于单片机的水箱控制系统应用到中小型以及民用产品有着交大的发展空间。
而且越来越多的水箱生产厂商开始聘用单片机开发人员和电路设计人员,将控制系统成为水箱设计的一部分,以提高自身产品的安全性能和科技含量来提高产品在市场中的竞争力。
一些发达国家在单片机新型系统研究、制造和应用上,已经积累了很多的经验,奠定了基础,进入了国际市场。
我国在新型测控装置与系统研究、制造、应用和经验上,与其他发达国家相比还存在差距,但是我国研究人员已经克服很多困难,并在不断摸索中前进,有望在相关领域赶上甚至超越发达国家的技术水平,这是发展趋势。
水箱水位控制系统研究发展方向:
纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。
以前没有单片机时,这些东西也能做,但是只能使用复杂的模拟电路,然而这样做出来的产品不仅体积大,而且成本高,并且由于长期使用,元器件不断老化,控制的精度自然也会达不到标准。
在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完成。
这样产品的体积变小了,成本也降低了,长期使用也不会担心精度达不到了。
所以,它的魔力不仅是在现在,在将来将会有更多的人来接受它、使用它。
据统计,我国的单片机年容量已达3亿片,且每年以大约20%的速度增长,但相对于世界市场我国的占有率还不到1%。
特别是沿海地区的玩具厂等生产产品多数用到单片机,并不断地辐射向内地。
所以,学习单片机在我国是有着广阔前景的。
目录
第一章系统设计 (1)
1.1正弦信号发生器设计方案框图 (1)
1.2、DAC0832硬件简介 (1)
1.3放大整形电路 (2)
1.4振荡电路 (3)
1.5复位电路 (3)
1.6键盘电路 (4)
1.7显示电路 (4)
第二章软件设计 (6)
2.1正弦信号发生器程序的流程图 (6)
2.2程序设计: (7)
第三章仿真调试 (12)
参考文献 (15)
第一章系统设计
1.1正弦信号发生器设计方案框图
图1-1硬件设计方框图
1.2、D AC0832硬件简介
根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种连接方式:直通方式、单缓冲方式和双缓冲方式。
1、双缓冲方式:进行两级缓冲;
2、单缓冲方式:只进行一级缓冲;
3、直通方式:不进行缓冲,适用于比较简单的场合。
本设计采用的是直通连接方式。
具体电路设计如图1-2所示:
图1-2 DAC0832连接图
1.3放大整形电路
为了输入的是小信号时也能对精确的测出它的频率,所以在信号的输入口加电压放大。
有时输入的信号波形不是很好时,放大后也是失真的信号,这就会影响到所测信号的频率,因此要经过整形。
其电路如图1-3所示:
图1-3 放大整形电路
1.4振荡电路
单片机必须在时钟的驱动下才能工作。
在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。
系统所采用的振荡电路如图1-4所示。
图1-4振荡电路图
系统选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。
其大小是时钟信号频率的倒数,常用fosc表示。
如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs。
1.5复位电路
复位电路如图1-5所示,采用上电复位,由极性电容C3和电阻组成。
复位电路具有上电自动复位功能,高电平有效,在正常工作状态下复位管脚为低电平。
其电路如图1-5所示
图1-5 复位电路
1.6键盘电路
键盘电路如图所示,P2.0对应的按键有启动和停止作用,P2.1对应的按键是减少频率,P2.1对应的按键是加频率。
电路如图1-6所示
图1-6 键盘电路
1.7显示电路
显示电路如图1-7所示,频率通过与单片机相连接的LM016L显示
图1-7 显示电路
第二章软件设计2.1正弦信号发生器程序的流程图
图2-1 程序流程图
2.2程序设计:
#include <reg51.h> //头文件
#define uchar unsigned char
#define uint unsigned int
sbit lcdrw=P3^3; //位变量的定义,显示器选通信号
sbit lcdrs=P3^2; //位变量的定义,显示器读写信号
sbit lcde=P3^4; //位变量的定义,显示器使能信号
sbit k1=P2^0; //位变量的定义,按键1
sbit k2=P2^1; //位变量的定义,按键2
sbit k3=P2^2; //位变量的定义,按键3
sbit cs1=P3^5; //位变量的定义,DAC0832片选信号
sbit cs2=P3^6; //位变量的定义,DAC0832数据传送信号uchar s1num,a,ys,j; //变量的定义(字符型),延时变量
uint fre; //变量的定义(整型)频率值
uchar code tosin[256]={
0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,
0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,
0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,
0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,
0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,
0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,
0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,
0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,
0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,
0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,
0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,
0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,
0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,
0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,
0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,
0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,
0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,
0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,
0x76,0x79,0x7c,0x80 };/*正弦波码*/
void delay(uint z) //延时子程序
{
uchar i,j;
for(i=z;i>0;i--)
for(j=50;j>0;j--); //设置频率最大值为50HZ }
void delay1(uint y) //延时子程序
{
uint i;
for(i=y;i>0;i--);
}
void write_com(uchar com) //LM160L写指令
{
lcdrs=0; //LM160L选通信号P1=com;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void write_data(uchar date) //向LM160l发送数据{ lcdrs=1;
P1=date;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void init() //初始化
{
lcdrw=0;
lcde=0;
cs2=0;
cs1=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x00);
write_data(0x77); //写wave:
write_data(0x61);
write_data(0x76);
write_data(0x65);
write_data(0x3a);
write_com(0x80+0x40); //写f:
write_data(0x66);
write_data(0x3a);
}
void write_f(uint date) //写频率
{
uchar shi,ge;
shi=date/10%10;
ge=date%10;
write_com(0x80+0x42);
write_data(0x30+qian);
write_data(0x30+bai);
write_data(0x30+shi);
write_data(0x30+ge);
write_data(0x48);
write_data(0x5a);
}
void xsf() //显示频率
{
if(s1num==1) //if语句(判断是否是状态1)
{
fre=50-ys; //频率计算公式
write_f(fre); //写频率
}
}
void keyscanf() //按键部分
{
if(s1==0)
{
delay(5);
if(s1==0)
{
while(!s1); //无限循环函数
s1num++; //s1num+1
if(s1num==1) //if语句(判断是否是状态1)
{
ys=0;
write_com(0x80+0x05);
write_data(0x73); //写sine:
write_data(0x69);
write_data(0x6e);
write_data(0x65);
write_data(0x20);
write_data(0x20);
}
if(s1num==2) //if语句(判断是否是状态2)
{
s1num=0;
P1=0;
write_com(0x80+0x05);
write_data(0x20);
write_data(0x20);
write_data(0x20);
write_data(0x20);
write_data(0x20);
write_data(0x20);
write_com(0x80+0x42);
write_data(0x20);
write_data(0x20);
write_data(0x20);
write_data(0x20);
write_data(0x20);
write_data(0x20);
}
}
}
if(s2==0) //按键减频率
{
delay(5);
if(s2==0)
{ while(!s2);
ys++;
}
}
if(s3==0) //按键加频率{
delay(5);
if(s3==0)
{
while(!s3);
ys--;
}
}
}
void main() //主函数
{
init();
while(1) //无限循环语句防止程序跑飞
{
keyscanf();
if(s1num==1) //正弦波
{
for(j=0;j<255;j++)
{
P0=tosin[j];
delay(ys);
}
}
if(!(s1&s2&s3))
{
xsf();
}
}
}
第三章仿真调试
Keil仿真编译结果
图3-1 编译结果
源程序经过编译之后生成HEX文件,在proteus仿真中使用。
Proteus仿真原理图如图3-2所示;
图3-2 proteus仿真原理图
添加正确编译后的HEX文件,启动按钮开始仿真,结果如图3-3所示。
图3-3 仿真结果
按下调频按钮,输出其他频率的正弦波形,结果如图3-4所示。
图3-4 仿真结果
按下按键可输出相应频率值的正弦波,并且该频率值由显示器两位显示,仿真结果满足设计要求。
参考文献
[1]李建忠.单片机原理及应用[M].西安电子科技大学出版社,2008
[2]丁明亮,唐前辉.51单片机应用设计与仿真——基于Keil与Proteus[M].北京航空航天大学大学出版社,2009
[3]曾庆波,商俊平,代瑶,林范刚.单片机基本技能与应用系统设计[M].哈尔滨工业大学出版社,2013
[4]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009
[5]蓝和惠,宁武,闫小金.全国大学生电子设计竞赛单片机应用技能精解[M].北京:电子工业出版社,2009。