当前位置:文档之家› 单片机课程设计报1

单片机课程设计报1

单片机课程设计报告基于单片机的数字钟班级:自动111姓名:汪利庆学号:112207201125指导老师:章红设计时间:21013年6月目录1、引言 (2)2、课程设计目的 (3)3、课程设计题目描述和要求 (3)4、设计总体思路和程序设计总流程 (4)5、程序设计细节 (5)6、总结与收获 (15)单片机课程设计正文一、引言现代社会科技飞速发展,人们生活节奏加快,时间就是金钱,时间就是生命。

时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。

忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。

但是,一旦重要事情,一时的耽误可能酿成大祸。

20世纪末,电子技术得到飞速发展,各类电子产品相继出现在市场,电子产品主要朝着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。

数字化电子产品已渗入到人类生活的方方面面。

单片计算机即单片微型计算机(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多输入输出口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。

而52 单片机是51单片机的升级版,功能更强大。

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。

从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。

这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

基于以上发展与现实需要本次设计课题就是基于单片机的设计-----基于单片机的多功能数字钟。

数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意义。

二、课程设计目的:1、巩固和加深对单片机原理知识的理解和运用;2、进一步提高学生综合运用所学知识的能力;3、培养学生综合分析问题、发现问题和解决问题的能力三、课程设计题目描述和要求:1、方案论证 确定总体电路原理图。

2、元器件选择 设计PCB图 或用万能电路实验板搭线 。

3、绘制程序流程图 编写C语言源程序。

4、安装调试 实现数字时钟的基本功能 即能正确显示时、分、秒 可调整时间 秒闪功能四、设计总体思路和程序设计总流程思路:1、总体思路:用51单片机、端口扩展芯片8522、6个七段码显示器等主要元件实现逐步实现多功能电子钟的计时、调时、闹钟、秒表等功能模块2、硬件的连接图:3、程序设计总流程:五、程序设计细节:1、计时部分:设置计时器0工作与方式1计时模式,并设置计时初值N=50000,使每次中断时间为50ms,再设置全局变量在循环中实现分表记录秒,分,时。

void time0_int(void) interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; timer=timer+1; if(timer>=20) { second=second+1;timer=0;if(second==60){ minute=minute+1;second=0;if(minute==60){ hour=hour+1;minute=0;if(hour==24){hour=0;}}2、检查和读出键值部分:键值设为全局变量key,首先通过置行全为0检查列是否全为1判断是否有按键按下,在通过延时消再检测消震动,如有键按下着在逐行输入0检测哪一行不为1,最后行值作为高四位列值作为底四位赋值给keyt,通过keyt值与键值代码比较得出键值。

void keyscan(){ unsigned char code_h,code_l,i1,i2;P1=0x00;code_l=PC8255;code_l=code_l&0x0f;if(code_l!=0x0f){ dl_ms();code_l=PC8255;code_l=code_l&0x0f;if(code_l!=0x0f){ code_h=0x0e;for(i1=0;i1<4;i1++){ P1=code_h;code_l=PC8255;code_l=code_l&0x0f;if(code_l==0x0f){code_h=(code_h<<1)|0x01;}else break;}}code_h=code_h<<4;keyt=code_h|code_l;for(i2=0;i2<16;i2++){ if(keyt==keytable[i2])key=i2;}}}3、显示部分Ⅰ、动态显示:通过显示部分和扫描部分相结合实现短时间间隔循环显示分秒时,这个时间小与人眼的反应时间,因此看到的是分秒时同时显示在屏幕上。

void display(void){ unsigned char segcode,bitcode,i;bitcode=0xfe;for(i=0;i<6;i++){ segcode=dis_buf[i];PA8255=table[segcode];PB8255=bitcode;dl_ms();PB8255=0xff;bitcode=bitcode<<1;bitcode=bitcode|0x01;}}Ⅱ、光标显示:全局变量v表示显示的0-5位,显示码全部定为0x70,通过逐个增减v使要改变的那一位光标点亮。

void tzdisplay(){ PA8255=0x40;PB8255=smtable[v];4、秒表功能部分:设置计时器1工作与方式1计时模式,并设置计时初值N=5000,使每次中断时间为5ms,再设置全局变量在循环中实现分表记录秒表各位,并通过主函数键值进入秒表在秒表函数内部循环使显示器显示秒表。

void mbtime(){ timer1=0;second1=0;minute1=0;hour1=0;ET1=1;while(1){ dl_ms();key=100;keyscan();if(key==13)ET1=~ET1;if(key==14)break;if(key==15)clear();dis_buf[0]=hour1/10%10;dis_buf[1]=hour1%10;dis_buf[2]=minute1/10%10;dis_buf[3]=minute1%10;dis_buf[4]=second1/10%10;dis_buf[5]=second1%10;display();}}5、调时,调闹钟部分:设置六个变量分别在v=0-5时赋予其key值,然后将其按位赋值给计时,闹钟全局变量从而实现通过键值改变时间和闹钟响应时间,然后通过赋值给形参的实参选择调计时或者闹钟。

void tztime(unsigned char d){ unsigned char a0=0,a1=0,b0=0,b1=0,c0=0,c1=0,t;v=5;while(1){ for(t=1;t<=100;t++)dl_ms();key=100;keyscan();tzdisplay();if(key==12&&v<=5)v=v-1;if(v<0)v=5;if(key==13)break;if(key<10&&v==5)a0=key;if(key<10&&v==4)a1=key;if(key<10&&v==3)b0=key;if(key<10&&v==2)b1=key;if(key<10&&v==1)c0=key;if(key<10&&v==0)c1=key; }if(d==0){ TR0=0;timer=0;second=a0+a1*10;minute=b0+b1*10;hour=c0+c1*10;TR0=1;}if(d==1){ nsecond=a0+a1*10;nminute=b0+b1*10;nhour=c0+c1*10;}}6、主函数部分:8255的初始化,TO、TI赋初值,允许中断,用switch函数实现通过不同按键值进入不同功能模块,最后加显示计时部分实现在退出各附加功能模块后直接显示时间,并且在最后用if函数实现当满足闹钟变量等于时间变量且停止闹钟键没有按下时接闹钟端口赋值高电平。

void main(void){ COM8255=0x81;P1=0x00;TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-5000)/256;TL1=(65536-5000)%256;EA=1;ET0=1;TR0=1;ET1=0;TR1=1;while(1){ keyscan();switch(key){ case 10:tztime(0);break ;case 11:tztime(1);break ;case 12: mbtime();}dis_buf[0]=hour/10%10;dis_buf[1]=hour%10;dis_buf[2]=minute/10%10;dis_buf[3]=minute%10;dis_buf[4]=second/10%10;dis_buf[5]=second%10;display();if(minute==nminute&&hour==nhour&&key!=15)P1=0x80;else P1=0x00;}}六、总结与收获:我在这一次数字电子钟的设计过程中,很是受益匪浅。

通过对自己在大学所学的知识的回顾,并发挥对所学知识的理解和思考及书面表达能力,亲手设计,最终完成目标了。

这为自己今后进一步深化学习,积累了一定宝贵的经验。

把知识转化为能力的实际训练。

培养了我运用所学知识解决实际问题的能力。

同样在本次试验中,我们掌握了更多的专业知识,了解了众多的芯片接法,各芯片功能引脚。

进一步加深了查找资料的方法。

此次试验让我们更进一步了解到只有理论知识是远不够的,要理论联系实际,将书中的理论知识转化为实际动手,这样,在实践中检验真理。

相关主题