ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:1.56MB ,
资源ID:4335790      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4335790.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课程设计.docx

1、课程设计珠海学院课 程 设 计 报 告课 程 名 称: 单 片 机 课程设计 学 号: 03120315 姓 名: 冯文伟 专 业:电子信息科学与技术专业 班 级: 电子03班 制 订 时 间: 2014 年12月 28日 指 导 老 师: 孙永坚,严毓培 吉林大学珠海学院电子信息系2014年12月28日成绩才成绩评语:任课教师年月日(一)课程设计内容目录(一)基于51构架单片机的电子沙漏设计 4(二)设计要求 7(三)本次课程设计已实现的功能 9(四)系统框图、设计思路、系统概述 10(五)电路原理图、技术路线、实现方案细节描述 11(六)本次设计的收获心得 12(七)主要程序及注释 15(

2、一) 基于51构架单片机的电子沙漏设计(1)STC89C52RC的特点 :STC89C52RC有很宽的工作电源电压,可为2.76V,当工作在3V时,电流相当于6V工作时的1/4。 STC89C52RC工作于12Hz时,动态电流为5.5mA,空闲态为1mA,掉电状态仅为20nA。这样小的功耗很适合于电池供电的小型控制系统。 STC89C52RC具有以下几个特点: STC89C52RC与MCS-51系列的单片机在指令系统和引脚上完全兼容; 片内有4k字节在线可重复编程快擦写程序存储器; 全静态工作,工作范围:0Hz24MHz; 三级程序存储器加密; 1288位内部RAM; 32位双向输入输出线;

3、两个十六位定时器/计数器 五个中断源,两级中断优先级; 一个全双工的异步串行口; 间歇和掉电两种工作方式 超强抗干扰:高抗静电(ESD保护),轻松过 2KV/4KV快速脉冲干扰; 宽电压,不怕电源抖动 ; 宽温度范围,-4085 ; 禁止ALE输出;; 超低功耗: 1 、掉电模式:典型功耗0.1 A ; 2 、空闲模式:典型功耗2mA ; 3 、正常工作模式:典型功耗4mA-7mA ; 4 、掉电模式可由外部中断唤醒,适用于电池供电系统,如水表、气表、便携设备等。 (2)STC89C52RC引脚功能 1电源:1 VCC - 芯片电源,接+5V; 2 VSS - 接地端; 2.时钟: XTAL1

4、、XTAL2 - 晶体振荡电路反相输入端和输出端。 3.控制线: 控制线共有4根: ALE/PROG:地址锁存允许/片内EPROM编程脉冲 1 ALE功能:用来锁存P0口送出的低8位地址 2 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 PSEN:外ROM读选通信号。 RST/VPD:复位/备用电源。 1 RST(Reset)功能:复位信号输入端。 2 VPD功能:在Vcc掉电情况下,接备用电源。 EA/Vpp:内外ROM选择/片内EPROM编程电源。 EA功能:内外ROM选择端。 Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp

5、。 4.I/O口线:P0、P1、P2、P3共四个八位口。 P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。P0口也用以输出外部存储器的低8位地图1址。由于是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存,信号用ALE。 P1口是专门供用户使用的I/O口,是准双向口。 P2口是从系统扩展时作高8位地址线用。不扩展外部存储器时,P2口也可以作为用户I/O口线使用,P2口也是准双向口。 P3口是双功能口,该口的每一位均可独立地定义为第一I/O功能或第二I/O功能。作为第一功能使用时操作同P1口。(1)电源及时钟引脚VCC,VSS,XTAL1,XTAL2(2

6、)控制引脚非PSEN,ALE/非PROG,非EA/VPP,RSTI/O引脚P0,P1,P2,P3,为4个8位I/O口的外部引脚。 (二) 设计要求(按照自己的认识详细阐述)任务:1 0-99S计时可设置2 显示数值永远向上3 A组倒计时B组正计时4 翻转后计时沙漏式反正5 水平放置停止计时6 计时溢出蜂鸣报警7 LED水滴效果8 设定数据掉电可保持*9 可设定加减模式、分钟模式*10 设计电子钟功能*此次任务的了解:(1)0-99S计时可设置:编写单片机程序,单片机的P0所对应的8个I/O口接了四个数码管的八个管脚。两位的数码管共用一个P0口,一共有两个数码管,为了让两个两位的数码管直观上同时

7、亮显示个位和十位的数字,进行倒计时功能,我们让它分顺序以1s速度转换每个位的的亮灭,不断循环就能看到两个个数码管同时显示。(2)先制作每个数字显示时相应的数码管对应的LED断码,成两个表,以方便赋值查表在数码管显示相应的数字,把个位十位分开。(3)显示数值永远向上:下面的数码管查的表按重新设置,设置水银开关,使正放反放程序查的表正确,保证显示数值永远向上。(3)A组倒计时B组正计时:电子沙漏,正放时沙漏往下流,上面一个两位数码管A组进行倒计时,下面一个两位数码管B组进行正计时。(4)翻转后计时沙漏式反正:设置水银开关,P3.2为1,P3.1为0时,A组正计时,B组倒计时。P3.2为0,P3.1

8、为1时,A组倒计时,B组正计时。显示永远向上。(5)水平放置停止计时:当水银开关P3.2和P3.1同时为1时,就是水平放置事,停止计时,数字不变。此时平放时可以长按按键,可以切换模式,当为1时,模式为2,此时为时钟模式,当为0时,模式为1,此时为沙漏模式。(6)计时溢出蜂鸣报警:当A组或者B组数码管其中一个计时到00时,计时溢出,调用蜂鸣器,此时使蜂鸣器对应芯片管脚P3.5置0,响起。(7)LED水滴效果:在倒计时的同时设定LED灯显示,当AB记时LED灯有流动的效果,效果如沙漏一般。(8)设定数据掉电可保持:当单片机设置好各项功能知道,进行倒计时,当计时没有结束就断电之后设置掉电保持模式,使

9、数据不丢失,不至于重新设置数值。(三) 本次课程设计已实现的功能本次课程设计实现了以下七个功能:1 0-99S计时可设置2 显示数值永远向上3 A组倒计时B组正计时4 翻转后计时沙漏式反正5 水平放置停止计时6 计时溢出蜂鸣报警7 LED水滴效果(四) 系统框图、设计思路、系统概述(1)系统框图: (五) 电路原理图、技术路线、实现方案细节描述实物图:(六) 本次设计的收获心得在此次的课程设计中,主要是设计基于51构架单片机的电子沙漏设计,说明51单片机对于现在电子行业来说非常重要。在这次课程设计中,我们各组员之间都有互相交流,互相分享自己的想法,以达到课程设计的丰满度,让我们学到更多,这是课

10、程设计的根本目的。在设计过程中,最困难的步骤就是程序设计,这次极大的考验我们的功底,能设计出来,说明自己已经已经达到了学习的要求,没有设计出来的话,也可以在反复设计中,查找资料,从中也能学习到许多,这是课程设计的最终目的。程序设计过程中,刚开始是一头雾水,组员之间都感到失望,原因是我们对程序设计接触较少,功底不扎实,但是后来,通过看书本上的资料,然后通过一个一个模块的实现,以达到全部模块的实现。通过一个一个模块的实现,这样才能让我们增强信心,才有继续学习和开拓的动力,这是非常重要的。在设计过程中,我们已经知道自己的短板,所以每一次课程设计都是自我学习,自我成长的好机会,千万不能掉以轻心,这对我

11、们以后的毕业设计有个好的开头。这次课程设计遇到的问题远远大于大一,大二时候的课程设计,还好老师的细心教导,让我们才能加快进度,才能学到更多。(七) 主要程序及注释#include#include#define uchar unsigned char #define uint unsigned intsbit dig1=P10;sbit dig2=P11;sbit dig3=P36;sbit dig4=P37;sbit key=P12;sbit led=P20;sbit int0=P32;sbit int1=P33;sbit bell=P35;sbit led1=P15;sbit led2=P1

12、6;sbit led3=P17;char i;uchar shi,fen,miao;uchar count,num1,num2,shu,moshi;uchar flag,jian_flag,sfm_flag,zf_flag;uchar code tabledu1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/正uchar code tabledu2=0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x82;uchar code ledd=0x3f,0x1f,0x27,0x38;uchar code

13、 ledd1=0xc0,0x20,0xe0;void fenz();void jian();void shal();void init();/EEPROM操作命令定义#define RdCommand 0x01 /定义ISP的操作命令#define PrgCommand 0x02#define EraseCommand 0x03 #define Error 1#define Ok 0#define WaitTime 0x01 /定义CPU的等待时间sfr ISP_DATA=0xe2; /寄存器申明sfr ISP_ADDRH=0xe3;sfr ISP_ADDRL=0xe4;sfr ISP_CMD

14、=0xe5;sfr ISP_TRIG=0xe6;sfr ISP_CONTR=0xe7;/EEPROM相关函数声明void ISP_IAP_enable(void);void ISP_IAP_disable(void);void ISPgoon(void);unsigned char byte_read(unsigned int byte_addr);void SectorErase(unsigned int sector_addr);void byte_write(unsigned int byte_addr, unsigned char original_data);void delay(u

15、char x) uchar a,b; for(a=100;a0;a-) for(b=x;b0;b-);void display1(uchar shi,uchar ge) /display1(num2/10,num2%10); dig4=0; P0=tabledu2shi; delay(5); dig4=1; dig3=0; P0=tabledu2ge; delay(5); dig3=1; void display2(uchar shi,uchar ge) /display2(num1/10,num1%10); dig1=0; P0=tabledu1shi; delay(5); dig1=1;

16、dig2=0; P0=tabledu1ge; delay(5); dig2=1; void display3(uchar shi,uchar ge) / display3(num2%10,num2/10); dig3=0; P0=tabledu1shi; delay(5); dig3=1; dig4=0; P0=tabledu1ge; delay(5); dig4=1; void display4(uchar shi,uchar ge) / display4(num1/10,num1%10); dig1=0; P0=tabledu2shi; delay(5); dig1=1; dig2=0;

17、P0=tabledu2ge; delay(5); dig2=1; void main() init(); num2=byte_read(0x2200); num1= 99 - num2;num2=99;num1=0; while(1) if(int0=1)&(int1=1) while(key=0) TR0=0; shu+; if(shu=2) shu=0; for(i=50;i0;i-) delay(10); display4(shu/10,shu%10); TR0=1; if(shu=0) moshi=1; if(shu=1) moshi=2; while(moshi=1) shal();

18、 while(moshi=2) fenz(); void time0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+;void shal()/*/zheng面沙漏 TR0=1; if(int0=0) if(key=0) delay(1); if(key=0) /关键语句 SectorErase(0x2200);/擦除扇区 byte_write(0x2200,num2);/重新写入数据; jian_flag=0; if(count=20) count=0; if(flag=2) bell=1; if(num2=

19、0) num2=1;TR0=0;bell=0;flag=1; num2-; if(num1=100) num1=98;TR0=0; num1+; /* /正面 流水灯 if(num2)&(int1) led1=0;led2=0;led3=0; i+; if(i0)&(i=4) i=0;P2=0x3f;led1=0;led2=0;led3=0; if(num2=0)P2=0xc0;led1=1;led2=1;led3=1; /* display2(num2/10,num2%10); display1(num1/10,num1%10); /*/*/fang面沙漏 if(int1=0) if(cou

20、nt=20) count=0; if(flag=1) bell=1; if(num1=0) num1=1;TR0=0; num1-; num2+; if(num2=100) num2=99;TR0=0;bell=0;flag=2; /* /fang面 流水灯 if(num1)&(int0) P2=0xe0; led1=1;led2=1;led3=1; i+; if(i=3) i=-1;P2=0xe0;led1=0;led2=0;led3=0; if(num1=0)P2=0x3f;led1=0;led2=0;led3=0; /* jian();/按键选择 display3(num1/10,num

21、1%10); display4(num2%10,num2/10); /*/*/水平 if(int0=1)&(int1=1) TR0=0; display1(num1/10,num1%10); display2(num2/10,num2%10); bell=1; while(key=0) shu+; if(shu=2) shu=0; for(i=50;i0;i-) delay(10); display4(shu/10,shu%10); if(shu=0) moshi=1; if(shu=1) moshi=2; /*void jian() if(key=0) delay(1); if(key=0)

22、 TR0=0; while(!key); delay(1); while(!key); while(jian_flag=0) if(int0=0) jian_flag=1;/倒过来不用按键 if(key=0) delay(1); while(key=0) /if(int0=0) /jian_flag=1;/倒过来要用按键 num1+; if(num1=100) num1=0; if(num2=0) num2=100; num2-; for(i=10;i0;i-) delay(1);display3(num2/10,num2%10);display4(num1%10,num1/10); disp

23、lay3(num2/10,num2%10); display4(num1%10,num1/10); void fenz() TR0=1; while(int0=0)|(int1=0)|key)&(moshi=2) if(count=20) count=0; miao+; if(miao=60) miao=0; fen+; if(fen=60) fen=0; shi+; if(shi=24)shi=0; /*/跟下面反面设置一样的 if(int1=0)/zheng zf_flag=1;/如果没加标志位,当sfm_flag=4;时,倒立过去再正面时sfm_flag还是为4,则会跳过下面第一条语句,

24、只有一直显示时分 if(sfm_flag!=4)&(sfm_flag!=5) sfm_flag=6; display3(miao%10,miao/10); display4(miao/10,miao%10); if(sfm_flag=4|sfm_flag=5) display4(shi/10,shi%10);display3(fen%10,fen/10); if(key=0) delay(1); if(key=0) TR0=0; for(i=7;i0;i-) delay(100); if(key=1) if(sfm_flag=4) if(shi=0) shi=24; shi-; if(sfm_flag=6) if(miao=0) miao=60; miao-; if(sfm_flag=5) if(fen=0) fen=60; fen-; while(key=0) for(i=20;i0;i-) delay(50);sfm_flag=4;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1