第一篇:单片机课程设计 -可调数字钟 (来自河北大学)
单片机课程设计 201244xxxx xx 12xx
一、绪论
单片机正朝着高性能和多品种的方向发展,下一步的趋势将是继续向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。单片机应用的重要意义还在于,它从根本上改变了传统控制系统的设计思想和设计方法。以前必须由模拟电路或数字电路实现的大部分功能,现在已经能用单片机通过软件方法来实现了。
用单片机设计制作数字钟是单片机的一个典型应用。通过设计制作一个数字钟,我们可以充分了解单片机的工作原理,学会如何用单片机实现数据的处理以及设备的控制等。设计制作一个数字钟虽然简单,但涉及到的内容却十分广博。
本课程设计是基于单片机时钟的LED显示,通过单片机产生计数功能,经由LED数码管显示,显示时间时、分、秒,并用按键进行时间调整,同时带有整点报时功能。
本课程设计只是设计制作一个功能简单的数字钟,旨在通过对简单的硬件和软件的操作和应用以实现用数码管显示的数字钟,尝试基本的电路设计和单片机的C语言编程以及锻炼实践动手能力。
二、整体设计
本设计采用51单片机内部定时器产生时钟来进行准确计时,时分秒由3个变量来记录,定义按键功能,来实现时钟的调节,最终是由LED数码管来动态显示时间。
三、硬件电路设计
3.1 总体电路设计
单片机课程设计 201244xxxx xx 12xx
3.2信号处理电路
3.3单片机最小系统电路
单片机课程设计 201244xxxx xx 12xx
单片机外围电路有时钟电路和复位电路等,时钟电路采用的是内部时钟方式,在单片机内部有一振荡电路,在外部的XTAL1和XTAL2引脚外接石英石英晶体(晶振)就构成了自激振荡器课在单片机内部产生时钟脉冲信号,两电容作用是稳定频率和快速起振,晶振的振荡频率我们采用的是经典值12MHz。
复位电路采用的是上电复位和按键复位均有效的方式,单片机执行复位操作后进入初始化状态。
主要功能引脚能能如下:
P0的8位引脚产生8位段选信号,用于数码管显示;
P1.0口控制着电路板上的绿色指示灯的亮灭,其中1为灭,0为亮; P2口各引脚功能:
P2.0~ P2.2分别连接3-8译码器的A、B、C输入端,编程时需要写P2.0~ P2.2口来实现控制六个数码管的逐个显示;
P2.3连接3-8译码器的使能端,编程时需要对P2.3写入0;
P2.7~ P2.4分别连接K1~K4按键,编程时,需要通过读取P2.7~ P2.4的值获取按键状态;
3.4 显示电路设计
单片机课程设计 201244xxxx xx 12xx
3.5 串口通信电路设计
3.6 电源电路设计
单片机课程设计 201244xxxx xx 12xx
3.7 按键控制电路设计
本次设计采用了4个独立的按键K1,K2,K3,K4用于后期时间的调整,其分别与单片机的P2.7~ P2.4引脚连接,编程时,需要通过读取P2.7~ P2.4的值获取按键状态。各按键经由上拉电阻与VCC相连,当按键按下时,与按键相连接的引脚为低电平,按键弹起时是高电平,即一次按键按下,为一个下降沿和一个上升沿。
单片机课程设计 201244xxxx xx 12xx
四、软件设计
4.1 程序设计总体思路
本次设计要实现数字钟的可调功能,我把程序分化为五个模块分别进行编写,分别为时间处理子程序、显示子程序、按键扫描子程序、整点报时子程序以及中断子程序。
4.2 各模块程序设计
4.2.1 时间处理子程序
在此模块中把秒sec设置为六十进制,分钟min设置为六十进制,小时hour设置为二十四进制,即当时间增加1s时,将显示部分的“秒”位加一,加到60以后进位为“分”,“秒”位清零;当“分”累加到60后进位为 “时”,“分” 位清零;当“时”位为24以后,所有位清零后重新开始记时。时间处理子程序如下:
void proc()
//时间处理子程序 { if(sec==60)
//秒变量满60进一 {sec=0;min++;if(min==60)//分变量满60进一 {min=0;hour++;if(hour==24)//时变量满24进一
{hour=0;} } } }
4.2.2 时钟显示子程序
此段子程序用于实现数码管的动态显示,分为段选和片选。当系统处于正常计时状态时,数码管正常显示时钟,时与分之间和分与秒之间的小数点以1Hz的频率闪烁;当调节按键按下时,adjust_flag==1,小数点停止闪烁,当调节哪一位时(时、分、秒),哪一位的个位的小数点常亮,便于显示哪一位正在处于调节
单片机课程设计 201244xxxx xx 12xx 状态。
时钟显示子程序如下:
void display()
//时钟显示子程序 { a=0;b=0;c=0;//位选,刷新小时的十位
P0=zixing[hour/10];//段选,将小时的十位数的字形赋给P0输出显示 delay(3);//延时3ms
a=1;b=0;c=0;
//位选,刷新小时的个位
if(adjust_flag==0&TR0==1)//正常计时时,时的个位的小数点闪烁 {if(dot==1)P0=(zixing[(hour%10)]);else P0=(zixing[(hour%10)])|0X80;} //字形码的
单片机课程设计 201244xxxx xx 12xx P0=(zixing[(sec%10)])|0X80;//秒的个位小数点常亮 else P0=(zixing[(sec%10)]);//正常计数和调节其他位时,小数点都不亮 delay(3);}
4.2.3 检测按键子程序
按键扫描子程序即扫描读取K1、K2、K3、K4,如果有按键按下,则做相应的处理。规定按键的功能如下:
K4(P2.4):调节按键,当按一下K4时,由时间状态进入调节状态,调节标志变量adjust_flag=1,此时若adjust_selc==1,调秒;再按一下,adjust_selc==2,则调分;再按一下,adjust_selc==3,则调时;再按一下,adjust_selc==4,adjust_selc=0,按一下K3或K2,由调节状态便成为时钟显示状态。
K3(P2.5):加1按键,在调节状态下即adjust_flag=1,按一下K3按键则相应的调节位加1;
K2(P2.6):减1按键,在调节状态下即adjust_flag=1,按一下K2按键则相应的调节位减1。
检测按键子程序如下:
void testkey()
//检测按键子程序 {
if(P2_4==0)
//K4键按下时 {display();display();display();display();display();
//用延时进行消抖处理 if(P2_4==0){TR0=0;
//调时按键按下时,关闭定时器,停止计时 adjust_flag=1;
//调节标志置1,进入调时状态 if(adjust_selc<4)adjust_selc++;//更改调节位置 else adjust_selc=1;}
} if(P2_5==0&&adjust_flag==1)//K3加1键功能定义 {display();display();
单片机课程设计 201244xxxx xx 12xx display();display();display();
//用延时进行防抖处理 if(P2_5==0){switch(adjust_selc)//定义各调节模式下的按键功能 {
case 1:
//调秒 if(sec<59)sec++;else sec=0;break;case 2:
//调分 if(min<59)min++;else min=0;break;case 3:
//调时 if(hour<23)hour++;else hour=0;break;case 4:adjust_flag=0;//确认状态时,按一下K3则进入时钟计时模式 TH0=0x3c;
//定时器重新赋初值,开始计时 TL0=0xb0;TR0=1;display();break;default:break;}}} if(P2_6==0&&adjust_flag==1)
//K2减1键功能定义 {display();display();display();display();display();
//用延时进行按键防抖 if(P2_6==0){switch(adjust_selc)//定义各调节模式下的按键功能 {
case 1:
//调秒 if(sec>0)sec--;else sec=59;break;
单片机课程设计 201244xxxx xx 12xx case 2:
//调分 if(min>0)min--;else min=59;break;case 3:
//调时 if(hour>0)hour--;else hour=23;break;case 4:adjust_flag=0;
//确认状态时,按一下K2则进入时钟计时模式 TH0=0x3c;
//定时器重新赋初值,开始计时 TL0=0xb0;TR0=1;display();break;default:break;}}} }
4.2.4整点时绿灯点亮子程序
绿灯与P1.0相连,通过P2.7口控制P1.0的电平,用标志变量clock_flag记录按键K1的状态,K1按一次整点绿灯点亮功能开启,在分和秒都为0时,即整点时,绿灯亮一下;K1再按一次,定时功能关闭,整点时绿灯不再点亮。
整点时绿灯点亮子程序:
void clock()
//整点绿灯亮子程序,此功能开启后,遇整点时绿灯亮一下 { if(P2_7==0){display();display();display();display();display();//延时使按键去抖动
if(P2_7==0)//P2_7对应K1按键,按一次开启整点报时功能,再按一下关闭 clock_flag=~clock_flag;}
if(clock_flag==1&&sec==0&&min==0)green=0;
//整点到来时,绿灯亮一下
单片机课程设计 201244xxxx xx 12xx else green=1;//否则,绿灯常灭 }
4.2.5 中断子程序
利用定时器0方式1,50ms中断一次。计数初值为65536-50000=15536=3cb0,则TH0=0x3c,TL0=0xb0,工作方式设置:TMOD=0x01,即定时器0,方式1,计时方式。在中断程序中,定义两个记录中断次数的变量count1和count2,其中count1满10清零,用来产生小数点的闪烁频率,dot为1Hz,count2满20清零,即50ms溢出一次,20次共是1s,此时秒变量sec自加1.中断服务子程序:
void int_T0()interrupt 1 //定义中断子程序,采用T0方式1,50ms中断一次 { TH0=0x3c;//设置定时初值 TL0=0xb0;TMOD=0x01;//设置工作模式 if(count1<9)count1++;
//定义频率为1Hz的小数点闪烁变量 else {count1=0;dot=~dot;}
if(count2<19)//中断计时 count2++;else {count2=0;sec++;}
//中断次数满20时,即满一秒,秒位自加1,count2清零重新计数
}
4.2.6 主程序
主程序中设置定时初值以及定时器的工作方式,开中断,然后利用while(1)语句,反复执行各个子程序。
主程序如下:
void main()
//主函数 { P2=0xff;
//初始化P2口,全设为1 TMOD = 0x01;//time0为定时器,方式1
单片机课程设计 201244xxxx xx 12xx TH0=0x3c;
//赋计时初值 TL0=0xb0;EA=1;//开总中断
ET0=1;
//T0中断允许 TR0=1;//T0开中断
en=0;
//3-8译码器处于工作状态 while(1)//时时检测 { testkey();
//检测按键 proc();//时间处理程序调用 display();
//显示时间
clock();
//整点报时
} }
五、收获与总结
通过本次的单片机课程设计,我本人收获很大。
首先,以前在学习单片机原理及应用时,老师所讲授的是汇编语言,而此次课程设计需要使用C语言,因此通过自己课下学习相关单片机教学视频以及教学资料了解了基于51单片机的C语言程序的编写以及相关软件使用。
其次,通过此次单片机课程设计,更加深入掌握了51单片机的结构与原理,包括51单片机内部定时系统的开启与设置、中断调用和如何使用单片机内部时钟实现精确计时以及如何对单片机的双向口进行读写操作等。除此之外,也更加深入理解了数码管动态扫描显示原理。
最后,通过连续几天以来不断地编程、下载和调试,自己形成了一定的编程逻辑思维。
附:单片机设计完整程序
#include
uchar code zixing[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//定义共阴数码管的数字字形数组 uchar sec;//定义秒变量 uchar min;
//定义分变量 uchar hour;//定义时变量
uchar count1;//记录中断次数,满10归零,产生1Hz频率,用于小数点闪烁 uchar count2;
//记录中断次数,满20归零,用于秒自加1 uchar adjust_selc=4;
//记录调节按键按下次数的变量,用于选择调节位置
单片机课程设计 201244xxxx xx 12xx bit adjust_flag;
//定义按键调节标志
bit clock_flag;
//定义整点时绿灯闪烁标志
bit dot;
//定义小数点闪烁频率变量,以1Hz的频率亮暗变化 sbit a=P2^0;sbit b=P2^1;
//定义3-8译码器输入端口a,b,c sbit c=P2^2;sbit en=P2^3;
//使能端
sbit P2_4=P2^4;
// 调时按键K4,根据按键的次数来确定调节模式 sbit P2_5=P2^5;
//加按键K3 sbit P2_6=P2^6;
//减按键K2 sbit P2_7=P2^7;
//整点时绿灯闪烁功能按键K1 sbit green=P1^0;
//整点时绿灯亮一下
void proc()
//时间处理子程序 { if(sec==60)
//秒设为60进制 {sec=0;min++;if(min==60)//分设为60进制 {min=0;hour++;if(hour==24)//时设为24进制 {hour=0;} } } }
void delay(uchar xms)
// 延时子程序 { uint i,j;for(i=0;i //x毫秒延时 for(j=0;j<125;j++);} void display() //时钟显示子程序 { a=0;b=0;c=0;//位选,刷新小时的十位 P0=zixing[hour/10];//段选,将小时的十位数的字形赋给P0输出显示 delay(3);//延时3ms a=1;b=0;c=0; //位选,刷新小时的个位 if(adjust_flag==0&TR0==1)//正常计时时,时的个位的小数点闪烁 {if(dot==1)P0=(zixing[(hour%10)]);else P0=(zixing[(hour%10)])|0X80;} //字形码的 单片机课程设计 201244xxxx xx 12xx else if(adjust_selc==3)//如果处于调节状态下的调时模式 P0=(zixing[(hour%10)])|0X80;//时的个位,小数点常亮 else P0=(zixing[(hour%10)]);//调节其他位时,小数点则不亮 delay(3); a=0;b=1;c=0; //位选,刷新分的十位 P0=zixing[min/10];delay(3); a=1;b=1;c=0;//位选,刷新分的个位 if(adjust_flag==0&TR0==1)//正常计时时,分的个位的小数点闪烁 {if(dot==1)P0=(zixing[(min%10)]);else P0=(zixing[(min%10)])|0X80;} else if(adjust_selc==2) //如果处于调节状态下的调分模式 P0=(zixing[(min%10)])|0X80; //分的小数点常亮 else P0=(zixing[(min%10)]);//调节其他位时小数点则不亮 delay(3); a=0;b=0;c=1;//位选,刷新秒的十位 P0=zixing[sec/10];delay(3); a=1;b=0;c=1;//位选,刷新秒的个位 if(adjust_selc==1) //如果处于调节状态下的调秒模式 P0=(zixing[(sec%10)])|0X80;//秒的个位小数点常亮 else P0=(zixing[(sec%10)]);//正常计数和调节其他位时,小数点都不亮 delay(3);} void testkey() //检测按键子程序 { if(P2_4==0) //K4键按下时 {display();display();display();display();display(); //用延时进行消抖处理 if(P2_4==0) 单片机课程设计 201244xxxx xx 12xx {TR0=0; //调时按键按下时,关闭定时器,停止计时 adjust_flag=1; //调节标志置1,进入调时状态 if(adjust_selc<4)adjust_selc++; //更改调节位置 else adjust_selc=1;} } if(P2_5==0&&adjust_flag==1)//K3加1键功能定义 {display();display();display();display();display();//用延时进行防抖处理 if(P2_5==0){switch(adjust_selc)//定义各调节模式下的按键功能 { case 1: //调秒 if(sec<59)sec++;else sec=0;break;case 2: //调分 if(min<59)min++;else min=0;break;case 3: //调时 if(hour<23)hour++;else hour=0;break;case 4:adjust_flag=0; //确认状态时,按一下K3则进入时钟计时模式 TH0=0x3c; //定时器重新赋初值,开始计时 TL0=0xb0;TR0=1;display();break;default:break;}}} if(P2_6==0&&adjust_flag==1) //K2减1键功能定义 {display();display();display();display(); 单片机课程设计 201244xxxx xx 12xx display(); //用延时进行按键防抖 if(P2_6==0){switch(adjust_selc)//定义各调节模式下的按键功能 { case 1: //调秒 if(sec>0)sec--;else sec=59;break;case 2: //调分 if(min>0)min--;else min=59;break;case 3: //调时 if(hour>0)hour--;else hour=23;break;case 4:adjust_flag=0;//确认状态时,按一下K2则进入时钟计时模式 TH0=0x3c; //定时器重新赋初值,开始计时 TL0=0xb0;TR0=1;display();break;default:break;}}} } void clock() //整点绿灯亮子程序,此功能开启后,遇整点时绿灯亮一下 { if(P2_7==0){display();display();display();display();display();//延时使按键去抖动 if(P2_7==0)//P2_7对应K1按键,按一次开启整点报时功能,再按一下关闭 clock_flag=~clock_flag;} if(clock_flag==1&&sec==0&&min==0)green=0; //整点到来时,绿灯亮一下 单片机课程设计 201244xxxx xx 12xx else green=1;//否则,绿灯常灭 } void int_T0()interrupt 1 //定义中断子程序,采用定时器0方式1,50ms中断一次 { TH0=0x3c;//设置定时初值 TL0=0xb0;TMOD=0x01;//设置工作模式 if(count1<9)count1++; //定义频率为1Hz的小数点闪烁变量 else {count1=0;dot=~dot;} if(count2<19)//中断计时 count2++;else {count2=0;sec++;} //中断次数满20时,即满一秒,秒位自加1,count2清零重新计数 } void main() //主函数 { P2=0xff; //初始化P2口,全设为1 TMOD = 0x01;//time0为定时器,方式1 TH0=0x3c; //赋计时初值 TL0=0xb0;EA=1;//开总中断 ET0=1; //T0中断允许 TR0=1;//T0开中断 en=0; //3-8译码器处于工作状态 while(1)//时时检测 { testkey(); //检测按键 proc();//时间处理程序调用 display(); //显示时间 clock(); //整点报时 } } 设计任务书................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); 湖南工业大学 课程设计 资料袋 电气与信息工程学院学年第学期 课程名称单片机系统课程设计指导教师凌云职称教授学生姓名专业班级测控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第二篇:单片机数字钟的课程设计
第三篇:基于单片机的数字钟课程设计程序
第四篇:基于单片机的数字钟课程设计程序
第五篇:单片机课程设计_数字钟(C51版)