已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计报告基于单片机的多功能综合应用系统的设计 摘要近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。本次课程设计采用AT89C51单片机作为主要核心部件,加上LED、LCD、键盘、LED点阵等外围设备,实现了键盘控制LED并以LCD显示及LED点阵显示和可校时数字时钟、温度控制等功能,这些功能贴近日常生活,非常具有现实意义。目录摘要2一、概述41.1设计意义41.2设计目标5第一部分:基本功能5第二部分:基本应用模块5第三部分:基于仿真的扩展模块5第四部分:赛前训练模块51.3设计要求51.4 任务分配6二、硬件和程序设计7元器件及开发环境7元器件清单7开发环境8第一部分:基本功能81.1 单片机最小系统81.2 LED彩灯模块101.3 LCD 显示模块101.4 键盘控制模块111.5 第一部分整体图111.6 硬件实物图121.7 程序设计13第二部分:基本应用模块132.1 数字时钟132.2 程序设计14第三部分:基于仿真的扩展模块153.1 点阵基础8*8点阵调节153.2 点阵模块16*16点阵显示153.3 程序设计16第四部分:赛前训练模块164.1 系统描述164.2 温度采集模块174.3 时钟模块174.4 通信模块174.5 显示模块184.6 温度控制系统整体图184.7 程序设计18三、总结和心得19四、参考资料20附录(程序代码节选)21第一部分(节选主要部分)21第二部分(节选主要部分)23一、概述1.1设计意义本次单片机课程设计内容包括单片机正常启动和复位,LED花样控制及亮度、色彩变化调节,LCD液晶显示屏的调节,点阵LED的文字输出,时钟芯片DS1302的配置,温度传感器DS18B20的使用,以及键盘控制单片机工作,对以上技术的掌握可以有效地提高我们的实际应用能力,如基于LED的节日艺术彩灯控制系统、温度采集和实时监控系统、电子日历等,具有非常实际的意义和价值,使我们对知识的学习由理论提升到实践,让专业知识学习得到极大巩固和提高。1.2设计目标第一部分:基本功能1设计并实现具有复位功能的单片机小系统。2利用单片机进行灯光的场景开关控制、循环点亮控制、花样变化控制及速度变化控制。3利用单片机进行灯光的色彩连续变化效果控制。4利用单片机进行灯光的三色联动定时控制(以交通灯为例)。5. 配合2至4项中功能,实现液晶屏输出功能或状态信息。6. 实现基于4X4键盘的输入功能。第二部分:基本应用模块7. 数字时钟的设计(要求:显示时间、调整时间、闹钟功能等)第三部分:基于仿真的扩展模块8.16x16点阵LED显示同组同学汉字名。第四部分:赛前训练模块9.温度监控系统1.3设计要求1能启动、停止单片机;2能通过开关(按键)进行功能选择;3基本功能部分要体现循环、组合和色彩变化的控制功能和效果,实现三色联动定时控制,控制变化规律的类型或功能不少于5种。1.4 任务分配根据组内成员的擅长方向,由纪琛负责电路仿真和程序设计,马浩负责硬件的搭建和调试。第一部分用时3周,第二部分用时2周,第三部分用时1周,第四部分用时3周,共用时9周。二、硬件和程序设计元器件及开发环境元器件清单序号名称、规格单位数量/组组数备注1AT89S51/2片120AT89S512连线把4共用分红、黑、蓝、绿等色312MHz晶振只120Crystal447p电容只220510u电容(电解)只120Electrolytic capacitor60.1u电容只120capacitor7电阻 330只1020resistor8电阻 1k只1020resistor9可调电阻 10k只42010电阻: 5108排阻只22011红色LED小灯只320LED12绿色LED小灯只22013蓝色LED小灯只32014按键式开关只120Button15拨动式开关只620switch16面包板块1201774LS04片220可换用74LS07/06、74HC245以改善驱动能力18RT1602液晶显示屏只12019DS18B20温度传感器只120208550三极管只120PNP型21有源一体蜂鸣器5V只120(补充:由于本组第二部分设计要求,设计时自行增加了时钟芯片DS1302和32.768KHz晶振各一个)开发环境硬件仿真环境Proteus 7软件开发环境Keil Vision4第一部分:基本功能1.1 单片机最小系统1.1.1 复位电路1.1.2 晶振电路1.1.3 最小系统整体图1.2 LED彩灯模块1.3 LCD 显示模块1.4 键盘控制模块1.5 第一部分整体图1.6 硬件实物图1.7 程序设计(详细程序见附录)第二部分:基本应用模块2.1 数字时钟2.1.1 DS1302时钟电路2.1.2 数字时钟整体图2.2 程序设计第三部分:基于仿真的扩展模块3.1 点阵基础8*8点阵调节3.2 点阵模块16*16点阵显示3.3 程序设计(见压缩包附件)第四部分:赛前训练模块4.1 系统描述本系统由AT89C51做主控芯片,外部直流稳压电源给系统供电(未给出电源详细设计),通过I2C与24C02C构成的外部存储电路通信读取预存的温度上下限值,通过DS1302时钟模块读取准确的时间信息,通过DS18B20进行温度采集,当采集温度与预设的上下限温度比较,高于上限则红灯亮蜂鸣器响且启动风扇进行降温,低于下限则蓝灯亮蜂鸣器响且启动电热丝进行升温,考虑到要显示的信息较多,系统使用12864液晶AMPIRE128X64进行数据显示,当控制方式切换为手动模式时,使用按钮控制风扇和电热丝,串口RS-232用于与PC进行通信,可以手动设定温度上下限、当前时间、工作模式(自动、手动)。由于时间和个人能力问题,本电路的串口通信功能未得到完善,软件设计也存在问题,虽然基本检测和自动控制能实现,但离预期可基本投入实际应用的目标还很遥远。4.2 温度采集模块4.3 时钟模块4.4 通信模块4.5 显示模块4.6 温度控制系统整体图4.7 程序设计(详细见压缩包附件)三、总结和心得在这次的单片机课程设计实验过程中,我遇到过很多难题,比如,如何调节占空比使得三色灯的颜色更具连续性,如何配置DS1302芯片,如何进行LCD的初始化,如何使用较少的端口连接4个8*8点阵组成一个16*16点阵、如何温度采样等等,这些问题都曾导致我们的试验进度缓慢,因为我是负责仿真和程序部分的,如果我这边出不来,硬件那边就无法进行,因此我经常需要查阅大量网络资料和馆藏书籍,实时学习相关知识以保证我的知识量足以设计出稳定可靠的电路并写出符合功能要求的程序代码,这是很需要时间和精力的,因为很多情况都是,可能看了一上午的书,检查了一上午的代码,仍然解决不了我们遇到的问题。就比如我们后期调试第一部分的电路时,LCD实物一直没有显示,但是仿真却有反应,找了半天才发现有2个控制端口接错位了。从这些细小的问题可以看出,有时候一个产品的好坏并没有决定于它大的硬件设计或者程序驱动等,而往往是一些平时没注意的细微之处,在关键时刻导致整个产品的失败。另一个教训就是,平时应该多查阅资料,有时候使用别人已经做好的模块可以节省大量的时间,设计初期我花大量时间去调试LCD驱动和键盘初始化,结果有现成的没及时用,白白浪费大量时间。如果平时多阅读,使用的时候就能很快联想到相关见过的或者曾经做过的模块,这样可以大大缩短实验周期,提高效率。总之,这次课程设计我学到了不少东西,理论知识永远还是需要实验来巩固才能提高。四、参考资料1.单片机课程设计指导(第2版) 北京航空航天大学出版社 作者:楼然苗 李光飞 2012.12. 单片机技术-课程设计与项目实例 中国电力出版社 作者:李海滨等 2009.103 Proteus教程-电子线路设计、制版与仿真 清华大学出版社 作者:朱清彗 2008.94 51系列单片机设计实例(第2版) 北京航空航天大学出版社 作者:楼然苗 李光飞 2006.25基于5103K的单片机实验指导书(内部试用)附录(程序代码节选)第一部分(节选主要部分)#include #include /标准输入输出#include#include#include last1_led.h#define Data P0/数据端口sbit RS = P24; /Pin4sbit RW = P25; /Pin5sbit E = P26; /Pin6sbit p1_0=P10;/接东西绿灯/sbit p1_1=P11;/接东西黄灯/sbit p1_2=P12;/接东西红灯/sbit p1_3=P13;/接南北绿灯/sbit p1_4=P14;/接南北黄灯/sbit p1_5=P15;/接南北红灯/unsigned char key;static int i=0;char data TimeNum= ;char data Test1= ;/延时函数1/void delay1(unsigned int x)/键盘扫描函数/unsigned char keyscan(void)void last1_led(void);void roadlight(void)void DelayUs(unsigned char us)/delay usvoid DelayMs(unsigned char ms)/* 写入命令 */ void WriteCommand(unsigned char c)/* 写入数据函数 */ void WriteData(unsigned char c)/* 写入字节函数 */ /* 写入字符串函数 */ void ShowString (unsigned char line,char *ptr)/* 初始化函数 */ void InitLcd()void lcdshow(void)InitLcd(); /初始化LCDDelayMs(15); /延时保证信号稳定 WriteCommand(0x01); /显示清屏 sprintf(Test1, LCD Test ); /打印输出第一行信息ShowString(0,Test1);sprintf(TimeNum, Hello AT89C51 );/打印输出第二行信息ShowString(1,TimeNum);/ 三色联动/void delay_h(int x)/主函数/void main(void)unsigned char keycode;P1=0xFF;srand(3);while(1)keycode=keyscan();switch(keycode)case 0:last1_led();P1=0xFF;break;case 1:roadlight();P1=0xff;break;case 2:lcdshow();break;case 3:while(1)pwm();break;default:break;/*功能: 8个LED的4种花样显示 */#include typedef unsigned char U8;typedef unsigned int U16;/*宏定义*/#define speed P2#define led_data P1#define uchar unsigned char #define uint unsigned int /*端口定义*/sbit key_speed_jia=P20; /int0 sbit key_speed_jian=P21; /int1/* 4种花样数据定义 */ uchar code table0=0xE7,0xDB,0xBD,0x7E,0xFF,0x7E,0x3C, 0x18,0x00,0xFF,0xE7,0xC3,0x81,0x00; uchar code table1=0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00, 0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF; uchar code table2=0xAA,0x55; uchar code table3=0x00,0xFF; uint sudu; /流水灯速度uchar cishu; /闪烁次数/* * 名称:last1_led * 功能:循环调用各个子程序 */ void last1_led(void) void exter_int0()interrupt 0/外部中断0函数 void exter_int1()interrupt 2/外部中断1函数 第二部分(节选主要部分)#include#define uint unsigned int#define uchar unsigned char uchar Second,Minute,Hour,Date,Month,Year,week;/时间等变量#define one 0x80 /第一行的初始位置#define two 0xc0 /第二行初始位置sbit RS_1602=P20; /1602数据命令端sbit E_1602=P21;/1602使能端sbit IO_1302=P24;/1302数据端sbit CLK_1302=P23;/1302时钟端sbit RST_1302=P22;/1302复位端sbit key_mode=P10;/功能按键sbit key_up=P11;/增量键sbit key_down=P12;/减量键sbit ACC0=ACC0;sbit ACC7=ACC7;uchar code tab1=20 - - week ;/液晶第一行默认显示数据uchar code tab2= : : ;/液晶第二行默认显示数据void init();/定时器0初始化/*ds1302*/void write_byte(uchar dat)/1302字节写uchar kk;ACC=dat;RST_1302=1;/启动读写操作for(kk=8;kk0;kk-)/8位数据IO_1302=ACC0;/先传送数据低位CLK_1302=0;CLK_1302=1;/上升沿输入数据ACC=ACC1;/右移位uchar read_byte()/1302字节读uchar kk;RST_1302=1;/启动读写操作for(kk=8;kk0;kk-)ACC7=IO_1302;/先读入数据低位CLK_1302=1;CLK_1302=0;/下降沿输出数据ACC=ACC1;/右移位return (ACC);void write_1302(uchar add,uchar dat) /1302地址写RST_1302=0;CLK_1302=0;RST_1302=1;/启动读写操作write_byte(add);/写地址write_byte(dat);/写数据CLK_1302=1;RST_1302=0;/禁止读写操作uchar read_1302(uchar add)/1302地址读uchar temp;RST_1302=0;CLK_1302=0;RST_1302=1;/启动读写操作write_byte(add);/写地址temp=read_byte();/读数据CLK_1302=1;RST_1302=0;/禁止读写操作return(temp);void ds1302_init()/1302初始化RST_1302=0;/禁止读写操作CLK_1302=0;/时钟为低write_1302(0x80,Second|0x00);/允许写void keyscan()/按键处理子程序uchar key1n;/功能键按下次数if(key_mode=0)/key_down为功能键delay(5);/延时去抖动if(key_mode=0)/功能键确认按下while(!key_mode);/等待按键释放key1n+;/功能键按下次数加一if(key1n=9)/为9时 调为1 则18key1n=1;switch(key1n)/功能键按键次数不同实现不同操作case 1: /时调整秒TR0=0;/关闭定时器write_1602com(two+0x0b);/写入光标位置write_1602com(0x0f);/设置光标为闪烁write_1302(0x8e,0x00);/允许写write_1302(0x80,0x80|Dec_BCD(Second);/Secondbreak;case 2: write_1602com(two+8);break;/Minute闪烁case 3: write_1602com(two+5);break;/Hour闪烁case 4: write_1602com(one+0x0f);break;/week闪烁case 5: write_1602com(one+0x09);break;/Date闪烁case 6: write_1602com(one+0x06);break;/Month闪烁case 7: write_1602com(one+0x03);break;/Year闪烁case 8:write_1602com(0x0c);/设置光标不闪烁write_1302(0x80,0x00|Dec_BCD(Second);/Secondwrite_1302(0x8e,0x80);/禁止写TR0=1;/打开定时器break;if(key1n!=0)/当key_mode按下以后。再按以下键才有效if(key_up=0) /上调键delay(5);/延时去抖动if(key_up=0)/上调键确认按下while(!key_up);/等待按键释放switch(key1n)/功能键按键次数不同实现不同操作case 1:Second+;/秒加1if(Second=60)/加到60时调为0Second=0;write_hms(0x0a,Second);/显示新的秒数write_1302(0x80,0x80|Dec_BCD(Second);/写入新的秒数write_1602com(two+0x0b);/因指针自动加一,要写回原位置break;case 2:Minute+;/分钟加1if(Minute=60)/加到60时调为0Minute=0;write_hms(7,Minute);/显示新的分钟write_1302(0x82,Dec_BCD(Minute);/写入新的分钟write_1602com(two+8);/光标在原位闪烁break;case 3:Hour+;/小时加1if(Hour=24)/加到24时调为0Hour=0;write_hms(4,Hour);/显示新的小时write_1302(0x84,Dec_BCD(Hour);/写入新的小时write_1602com(two+5);/光标在原位闪烁break;case 4:week+;/星期加1if(week=8)/加到8时调为1week=1;write_week(week);/显示新的星期write_1302(0x8a,week);/写入新的星期write_1602com(one+0x0f);/光标在原位闪烁break;case 5:Date+;/日期加1if(Date=32)/加到32时调为1Date=1;write_ymd(8,Date);/显示新的日期write_1302(0x86,Dec_BCD(Date);/写入新的日期write_1602com(one+9);/光标在原位闪烁break;case 6:Month+;/月份加1if(Month=13)/加到13时调为1Month=1;write_ymd(5,Month);/显示新的月份write_1302(0x88,Dec_BCD(Month);/写入新的月份write_1602com(one+6);/光标在原位闪烁break;case 7:Year+;/年加1if(Year=100)/加到100时调为0Year=0;write_ymd(2,Year);/显示新的年份write_1302(0x8c,Dec_BCD(Year);/写入新的年份write_1602com(one+3);/光标在原位闪烁break;if(key_down=0) /下调键delay(5);/延时去抖动if(key_down=0)/下调键确认按下while(!key_down);/等待按键释放switch(key1n)/功能键按键次数不同实现不同操作case 1:Second-;/秒减1if(Second=-1)/减为-1时 调为59Second=59;write_hms(0x0a,Second);/显示新的秒数write_1302(0x80,0x80|Dec_BCD(Second);/写入新的秒数write_1602com(two+0x0b);/光标在原位闪烁break;case 2:Minute-;/分钟减1if(Minute=-1)/减为-1时 调为59Minute=59;write_hms(7,Minute);/显示新的分钟数write_1302(0x82,Dec_BCD(Minute);/写入新的分钟数write_1602com(two+8);/光标在原位闪烁break;case 3:Hour-;/小时减1if(Hour=-1)/减为-1时 调为59Hour=23;write_hms(4,Hour);/显示新的小时数write_1302(0x84,Dec_BCD(Hour);/写入新的小时数write_1602com(two+5);/光标在原位闪烁break;case 4:week-;/星期减1if(week=0)/减为0时 调为7week=7;write_week(week);/显示新的星期数write_1302(0x8a,week);/写入新的星期数write_1602c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 1.1处理照片(教案)2023-2024学年四年级下册信息技术川教版
- 第四单元第一课《玲珑沙包》(教学设计)-2024-2025学年四年级上册综合实践活动鲁科版
- 中国超细碳化硅粉行业市场占有率及投资前景预测分析报告
- 中国透明防水胶行业市场占有率及投资前景预测分析报告
- 中国重载RGV小车行业市场前景预测及投资价值评估分析报告
- 中国金属制管行业市场前景预测及投资价值评估分析报告
- 语文一年级上册(2024)第八单元 阅读9 乌鸦喝水教案设计
- 2025证券经纪人秋招笔试题及答案
- 2025校招:自然语言处理工程师题库及答案
- 2025校招:云计算面试题及答案
- 轴承故障诊断技术课件
- 家庭教育劳动
- 企业三体系培训课件
- 哎呀流血了-大班健康安全教育活动
- 设备故障应急计划
- 2025年职业道德知识考试题库
- DB37∕T 5302-2024 既有城市桥梁现场检测及承载能力评估技术标准
- 安全生产法培训 课件
- 公司行政部费用管理制度
- 中国麻醉医生
- 公司运维项目管理制度
评论
0/150
提交评论