第一篇:单片机课程设计-简易数字钟的设计
单片机课程设计报告
课程设计题目:简易数字时钟
学生姓名:** 学号:********** 学院:****** 专业班级:**********
指导老师:**
2014年5月13日
摘要:
本设计采用了STC公司生产的STC89C52RC型单片机(80C51内核)设计了一个单片机最小系统,加上maxim232和usb转RS232线组成的下载电路,以及共阴极4位一体数码管和按键等外围电路构成了一个简易的数字钟,具有显示年、月、日、时、分、秒的功能,且年、月、日、时、分、秒每一个参数都可以自行设置,以实现时间的校正,总体来说实现了一个数字时钟的应有功能。
关键词:80C51系列单片机、单片机最小系统、时钟定时、下载电路、4位一体数码管显示
一、设计任务 简易数字时钟:自制一个单片机最小系统,包括串口下载、复位电路,采用内部定时器计时,或者采用外部时钟芯片DS1302,设计一个具有秒、分、日、月、年的数字时钟,采用四位一体数码管显示相关信息,秒、分显示一页,日、月显示一页,年显示一页。
二、方案选择
2.1、采用uln2003驱动数码管
由于单片机的I/O口的拉电流只有大约1mA左右,不足以提供4-5mA的电流以驱动数码管上的led,故需要为数码管提供一个驱动电路,如果采用三极管的话由于数码管有7段(实际是8段,但本设计只需要使用7段),需要7个三极管来驱动,给焊接部分增加了工作量,故可考虑采用ULN2003以给数码管提供驱动电流。
Uln2003的内部原理图
ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。
该电路的特点如下:[3]
ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路
直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还
可以在高负载电流并行运行。
ULN2003 采用DIP—16 或SOP—16 塑料封装。
内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。
ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。
比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。
ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。
输入5VTTL电平,输出可达500mA/5V。
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
2.2、直接用单片机加上拉电阻的P0口驱动数码管
对于51单片机的4个IO口来说有一个IO口与其他三个有点不同,那就是P0口,由于P0口(在作为输出IO口时)是OC门在最小系统中需要加一个上拉电阻,由此,可以用P0口作为数码管的驱动(可以通过合理配置上拉电阻的大小以提供足够的驱动电流)
51单片机的P0口内部电路图
由于相对来说接一个排阻便宜可靠,且方便,且也足以提供驱动数码管的电流,故采用方案2:直接用单片机加上拉电阻的I/O口驱动数码管
三、电路原理图
简易数字钟原理图
3.1最小系统
本设计最小系统与一般的51最小系统设计保持一致性,晶振电路为12M的晶体振荡器搭配两个30pF的电容组成,复位电路由5v接一个开关与电容并联再与电阻串联后接地构成,下载电路采用的是串口下载,为电脑上连一根usb转串口线,然后串口练到电路上,再通过max232芯片进行电平转换将RS232串口的电平转换为单片机的5v以进行电平匹配。3.2共阴极4位一体数码管
四位一体数码管
数码管的显示由段选和位选控制,段选为图片中的每一位“8”型上的a、b、c、d、e、f、g、h共8段构成。位选有4个引脚,分别对应于数码管的4个位。
四、程序代码 如下:
#include
//延时10ms {
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);} void main(){ IE=0x8F;//开总中断,开定时T0,开定时T1,开外部中断0,开外部中断1 IP=0x00;//设置中断优先级均为低优先级,默认优先级为:调整时间》定时》设置显示页 IT0=1;IT1=1;TMOD=0x11;//定时器0工作于工作方式1,定时工作方式,由运行控制位TR1启动定时器;定时器1工作于工作方式1,定时工作方式,由运行控制位TR1启动定时器 P2=0Xfd;
TH0 = 0x3C;
TL0 = 0xB0;
{ switch(play){ case 1 :
{
if(anjian1==0)
{
{ delay();delay();if(anjian1==0)anjian11=anjian1;if(anjian1 &!anjian11)hour++;
} TH1=0xD8;TL1=0xF0;TR0=1;TR1=1;
//定时器T0用于20分之一秒的定时,定时器T1用于数码管的动态显示,外部中断0为调整时间,外部中断1为设置显示页
for(;;)else if(anjian2==0)
if(anjian2==0)
anjian22=anjian2;
if(anjian2 &!anjian22)
hour--;
else if(anjian3==0)
{
delay();
if(anjian3==0)
anjian33=anjian3;
if(anjian3 &!anjian33)
min++;
else if(anjian4==0)
{
delay();
if(anjian4==0)
anjian44=anjian4;
if(anjian4 &!anjian44)
min--;
}
break;case 2 : {
if(anjian1==0)
{
delay();
if(anjian1==0)
anjian11=anjian1;
if(anjian1 &!anjian11)
mon++;
else if(anjian2==0)
{
delay();
if(anjian2==0)
anjian22=anjian2;
if(anjian2 &!anjian22)
mon--;
else if(anjian3==0)
{
delay();if(anjian3==0)}
}
}
}
}
anjian33=anjian3;
if(anjian3 &!anjian33)
day++;
else if(anjian4==0)
{
delay();
if(anjian4==0)
anjian44=anjian4;
if(anjian4 &!anjian44)
day--;
}
break;case 3 : {
if(anjian1==0)
{
delay();
if(anjian1==0)
anjian11=anjian1;
if(anjian1 &!anjian11)
year++;
else if(anjian2==0)
{
delay();
if(anjian2==0)
anjian22=anjian2;
if(anjian2 &!anjian22)
year--;
else if(anjian3==0)
{
delay();
if(anjian3==0)
anjian33=anjian3;
if(anjian3 &!anjian33)
year++;
else if(anjian4==0)
{
delay();
if(anjian4==0)anjian44=anjian4;}
}
}
}
}
if(anjian4 &!anjian44)
year--;
}
break;case 0 : {
if(anjian1==0)
{
delay();
if(anjian1==0)
anjian11=anjian1;
if(anjian1 &!anjian11)
sec++;
else if(anjian2==0)
{
delay();
if(anjian2==0)
anjian22=anjian2;
if(anjian2 &!anjian22)
sec--;
else if(anjian3==0)
{
delay();
if(anjian3==0)
anjian33=anjian3;
if(anjian3 &!anjian33)
sec++;
else if(anjian4==0)
{
delay();
if(anjian4==0)
anjian44=anjian4;
if(anjian4 &!anjian44)
sec--;
} break;}
switch(play){
}
}
}
}
} case 1 : { led[0]=hour/10;
};}}
void service_int1()interrupt 2 using 1 { if(play==3)play=0;else play++;} void service_t0()interrupt 1 using 1
//实现1s的延时以及sec到min,min到hour,hour到day,day到month,month到year,year到next_year的转换 {
TH0 = 0x3C;if(j==20){
j=0;sec++;if(sec>=60)
TL0 = 0xB0;
led[1]=hour%10;led[2]=min/10;led[3]=min%10;
} break;
led[1]=mon%10;led[2]=day/10;led[3]=day%10;
} case 2 : { led[0]=mon/10;break;
led[0]=year/1000;led[1]=((year%1000)/100);led[2]=((year%100)/10);led[3]=(year%10);
} case 3 : {
break;
led[1]=16;led[2]=sec/10;led[3]=sec%10;
} case 0 : { led[0]=16;break;
}
else { { sec=0;min++;if(min>=60){ min=0;hour++;if(hour>=24){hour=0;day++;if(day>=31){ day=1;mon++;if(mon>=13){ mon=1;year++;} } } } } } j++;} void service_t1()interrupt 3 using 1 //定时器1实现了数码管的动态显示 {
TH1=0xFC;TL1=0x18;if(P2==0xfd){P2=0xfb;P0=table[led[2]];} else if(P2==0xfb){ P2=0xf7;P0=table[led[3]];} else if(P2==0xf7){P2=0xfe;P0=table[led[0]];
} else if(P2==0xfe){P2=0xfd;P0=table[led[1]];} }
五、制作实物图
六、心得收获
经过本次课程设计,我将课本上的知识转化为了实际的实物,更加深入的理解了单片机这,加强了自己的编程能力,与软硬件调试能力,总体来说,还是收获很大的。
第二篇:单片机数字钟的课程设计
设计任务书................I
第一章 绪论...............1
1.1课程设计的意义..........1
第二章 电路设计方案................2.1数字电子中4的基本原理..........2.2
第三章 电路的安装与调试............3.1电路的选用..............设计小节...........致谢.................参考文献............附录A............附录B.....第一章绪论
1.1课程设计的意义
在高新技术日新月异的今天,科学技术已经成为整个社会发展的源动力,电子领域的发展更是令人目不暇接,在其推动下,现代电子产品几乎渗透了社会的各个领域,遍迹了千家万户,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。使课程设计越来越受到人们的重视,通过课程设计。可以设计出更好更新的科技产品,这将给科技的发展带来很好的积极作用,也使科技的水平得到一定的提高。同时也可以提高同学们的逻辑思维能力和创新意识。
电子技术密切联系 实际,实用性很强,开展电子技术课程设计在电子电气类我认为非常重要,不近可以学好专业知识,还可以增强动手能力,有利于我们适应未来这个竞争激烈的社会,训练我们 综合运用知识能力资料素材的查阅及收集能力,电子元气件的采购,电子电路的组装和调试能力,特别是在电路;多样化的创新方面,从理性和感性上都得到了很大的提高,经过查阅资料,选择方案,设计电路,等过程。各方面都得到了训练。
现代社会,时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。注射后,一般等待5分钟,一旦超时,所作的皮试试验就会无效。手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。所以,要制作一个定时系统。随时提醒这些容易忘记时间的人。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。
一.设计题目
数字电子钟
二、设计指标:
1.最大显示23时59分59秒。
2.以24小时制为一个周期
3.具有校时功能,可以对小时和分单独校时,对分校时的时候,停止分向小时进位。校时时钟源可以手动输入或借用电路中的时钟。
4.为了保证计时准确、稳定,由晶体振荡器提供标准时间的基准信号。
三、设计要求:
1.画出总体设计框图,以说明数字钟由哪些相对独立的功能模块组成,标出各个模块之间互相联系,时钟信号传输路径、方向和频率变化。并以文字对原理作辅助说明。
2.设计各个功能模块的电路图,加上原理说明。
3.选择合适的元器件,在面包上接线验证、调试各个功能模块的电路,在接线验证时设计、选择合适的输入信号和输出方式,在充分电路正确性同时,输入信号和输出方式要便于电路的测试和故障排除。
4.在验证各个功能模块基础上,对整个电路的元器件和布线,进行合理布局,进行整个数字钟电路的接线调试。
四、制作要求:
自行装配、接线和调试,并能检查和发现问题,根据原理、现象和测量的数据分析问题所在,加以解决。学生要解决的问题包括元器件和面包板故障引起的问题。
四、设计报告内容要求:
1.目的。
2.设计指标。
3.画出设计的原理框图,并要求说明该框图的工作过程及每个模块的功能。
4.元器件清单。
5.设计制作的进程,考虑时钟及控制信号的关系、测试、验证的顺序,写出自己的工作进程。
6.画出各功能模块的电路图,加上原理说明(如2、5进制到10进制转换,10进制到6进制转换的原理,个位到十位的进位信号选择和变换等)。
7.画出总布局接线图(集成块按实际布局位置画,关键的连接单独应画出,计数器到译码器的数据线、译码器到数码管的数据线可以简化画法,但集成块的引脚须按实际位置画,并注明名称。)
8.描述设计制作的数字钟的运行结果和操作。
第二章 电路的设计方案
2.1数字钟的基本组成及工作原理
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路.由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定.通常使用石英晶体振荡器电路构成数字钟.图1.1所示为数字钟的一般构成框图.⑴晶体振荡器电路 晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路.⑵分频器电路 分频器电路将32768Hz的高频方波信号经32768()次分频后得到1Hz的方波信号供秒计数器进行计数.分频器实际上也就是计数器.⑶时间计数器电路 时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为12进制计数器.⑷译码驱动电路 译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流.⑸数码管 数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管.2.2数字钟的工作原理
1)晶体振荡器电路
晶体振荡器是构成数字式时钟的核心,它保证了时钟的走时准确及稳定.一般输出为方波的数字式晶体振荡器电路通常有两类,一类是用TTL门电路构成;另一类是通过CMOS非门构成的电路,如图1.2所示,从图上可以看出其结构非常简单.该电路广泛使用于各种需要频率稳定及准确的数字电路,如数字钟,电子计算机,数字通信电路等.CMOS非门U1与晶体,电容和电阻构成晶体振荡器电路,U2实现整形功能,将振荡器输出的近似于正弦波的波形转换为较理想的方波.输出反馈电阻为非门提供偏置,使电路工作于放大区域,即非门的功能近似于一个高增益的反相放大器.电容C1,C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了振荡器的功能.由于晶体
具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确.2)分频器电路
通常,数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频.通常实现分频器的电路是计数器电路,一般采用多级2进制计数器来实现.例如,将32768Hz的振荡信号分频为1HZ的分频倍数为32768(),即实现该分频功能的计数器相当于15级2进制计数器.常用的2进制计数器有74HC393等.3)时间计数单元
时间计数单元有时计数,分计数和秒计数等几个部分.时计数单元以24进制计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码.一般采用10进制计数器如74HC290,74HC390等来实现时间计数单元的计数功能.欲实现24进制和60进制计数还需进行计数模值转换.4)译码驱动及显示单元
计数器实现了对时间的累计以8421BCD码形式输出,为了将计数器输出的8421BCD码显示出来,需用显示译码电路将计数器的输出数码转换为数码显示器件所需要的输出逻辑和一定的电流,一般这种译码器通常称为7段译码显示驱动器.常用的7段译码显示驱动器有CD4511.5)校时电源电路
当重新接通电源或走时出现误差时都需要对时间进行校正.通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可.设计小节
时间过的真快,专眼间一周就过去了,这次课程设计也画上了一个圆满的句号。这次课程设计的主题是数字电子钟,在设计中需要用到振荡电路等通过 设计使我更进一步加深了对电的认识和理解。在设计中,首先是查找资料,我们主要是在图书馆和电脑上查找,先找出了一些芯片的关脚和功能,然后经过老师的检查,开始设计,但是由于时间的紧迫,这个设计没有进行仿真,比较遗憾,不过在设计的过程中还是是学到不少东西的,由于有些芯片我们在数字电子技术基础里没有学过的,我们在查找这些资料的过程中就学到很多东西,有些芯片本来我们不懂的,但是经过查资料使我对有些不是懂的芯片有了一定的了解。如果有时间,最好能够做出一个实物图就比较了解,但是时间实在太紧拉,虽然老师布置了很久,但是由于我们要考试复习就没有多少是时间去想,有点遗憾。
致谢
在本次电子技术课程设计过程中,得到了个老师和同学们的帮助,让我学到了很多东西,同时还感谢学校的图书馆给我们提供了很好的资料,让我们的设计更加能够轻松的完成,还有感谢各个网站提供的大量资料。
通过这次设计,在很高程度上弥补了我们的理论知识的不足,通过设计进一步巩固了我们的理论知识,让我们学的更扎实,对数电的认识更加形象。
总之,这次实习带给我很大的收获,再一次感谢学校给我们一个展现自己设计才能的机会,这对我们以后的工作和学习都有很好的作用。
第三篇:基于单片机的数字钟课程设计程序
#include
uchar num;
void delayms(uint z){ uint x,y;for(x=z;x>0;x--)
for(y=110;y>0;y--);}
void write_com(uchar com){ lcdrs=0;P0=com;delayms(5);lcden=0;}
void write_data(uchar date){ lcdrs=1;P0=date;delayms(5);lcden=1;delayms(5);lcden=0;}
void init(){ lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}
void main()
//定义使能端、命令选择端
//延时函数
//写入命令函数
//写入数据 //初始化LCD
{
} init();write_com(0x80);for(num=0;num<11;num++){ write_data(table[num]);delayms(5);} write_com(0x80+0x40);for(num=0;num<13;num++){ write_data(table[num]);delayms(5);} while(1);
第四篇:基于单片机的数字钟课程设计程序
#include
#define uchar unsigned char #define uint unsigned int
uchar code table[]=“I LOVE YOU!”;uchar code table1[]=“2014:06:14”;sbit lcden=P3^5;
sbit lcdrs=P3^4;uchar num;
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);}
void write_com(uchar com){
lcdrs=0;
P0=com;
delayms(5);
lcden=0;
}
void write_data(uchar date){
lcdrs=1;
P0=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()//定义使能端、命令选择端//延时函数//写入命令函数//写入数据 //初始化LCD
{}init();write_com(0x80);for(num=0;num<11;num++){write_data(table[num]);delayms(5);} write_com(0x80+0x40);for(num=0;num<13;num++){write_data(table[num]);delayms(5);} while(1);
第五篇:单片机课程设计_数字钟(C51版)
湖南工业大学
课程设计
资料袋
电气与信息工程学院学年第学期
课程名称单片机系统课程设计指导教师凌云职称教授学生姓名专业班级测控101学号题目数字钟(C51版)成绩起止日期 2012年12 月 10日~ 2012年 12 月 28 日
目录清单
湖南工业大学
课程设计任务书
2012 —2013 学年第1 学期
电气与信息工程学院测控技术与仪器专业101班 课程名称:单片机系统课程设计设计题目:数字钟(C51版)完成期限:自2012年12 月 17日至2012年12 月28日共2周单片机系统课程设计说明书 起止日期:
学
班
学
成数字钟(C51版)2012年 12 月 17 日 至2012 年 12 月 28 日 生姓名级号绩湖南工业大学电气与信息工程学院 2012年12 月10 日 3