单片机实验报告数字时钟设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验报告
题目:数字时钟的设计指导老师:
班级:
姓名:
学号:
一、实验目的
通过实践设计出能准确显示时、分、秒的时钟,并可以调时、定时,包括蜂鸣器的整点报时与闹钟功能。
二、实验要求
基本功能:准确计时,以数字形式显示时间,24时制;具备时、分调整和整点报时功能。
扩展功能:定时与闹钟功能
三、设计方案及论证
Ⅰ、硬件部分:
1、时钟显示
用七段LED数码管来实现,采用共阳管和
PNP驱动方式。PNP工作于开关状态,基极通过
1K的电阻连到单片机的P2口。为节省P口,
将六位数码管的8段段选端分别并接并加上
470Ω的限流电阻,由P0口控制,给低电平的
段会被点亮。因为六位管的段被并接只能通过
动态扫描的方式来显示,即利用管子的余晖和
人眼的视觉残留实现六位管子在“同一时间”
显示不同的值,而扫描这是靠位选的轮流有效
实现。如左图。
2、整点报时和闹钟铃
此部分用一个5V有源蜂鸣器来做,同样
用PNP作为开关来控制,此外为防止其可能的
方向电压尖峰在蜂鸣器两端反接一个IN4148
二极管来保护。如右图。
3、校时、定时
此部分由4个按键控制,如下图,key1和key3用来选定要调校的时、分的位,被选中的为将闪烁;key2用来是选中的为按相应的进制增1变化;key4是进入定时模式,定时的时数改变与调时方法相同。
4、单片机最小系统
本实验采用STC89C52RC单片机,指令系统完全与51兼容。其最小系统包含电源电路、晶振电路、复位电路。
本实验才用STC单片机的典型系统,各模块参数配置如图:
其中晶振频率为12MHz,震荡部分电容为30pF的瓷片电容。
复位电路采用图示的兼有上电复位和按键复位功能的方式,其中的电容为10uF电解电容。
5、硬件系统全电路图
Ⅱ、软件部分
软件部分主要有两大块:
一是上电后程序靠定时器T1产生的中断而实现的常规时钟显示,这里面就是要处理时、分、秒的六位数字的循环和进位问题。按照24时制的规则,其进位逻辑为:秒的个位为十进制(0~9)满10向秒的十位进1,而秒的十位为六进制(0~5)满6向分的个位进1,分与秒相似,时的个位在时的十位为0、1的时候也是10进制,而在时的十位为2的时候则只是0到4就进位了。但时的十位是3进制的(0~2)。
m0++;
if(m0==10)
{ m0=0;
m1++;
if(m1==6)
{
m1=0;
f0++;
if(f0==10)
{
f0=0;
f1++;
if(f1==6)
{
f1=0;
h0++;
if(h0==10)
{
h0=0;
h1++;
}
}
}
}
}
二是程序监控4个按键的状态并进行相应处理。本实验中我们并未利用外中断来监控键盘,只是在主函数中用一个函数key_scan()来不停地扫4个键的状态并进行相应处理,这一部分的程序中主要的问题是按键抖动的去除,试验中,我们用的是软件延时的办法。
四、心得体会
通过本次课程设计,我学习到了很多,也收获了很多。总结如下:
一、我对单片机的理论知识有了进一步的掌握,对单片机的原理和实际应用有了更多地理解和掌握。
二、我对单片机的C语言编程有了更深刻的认识和更扎实的掌握,我们不断修改,不断尝试,对源代码各个模块的函数都有了一个非常深入的掌握。
三、理论与实践相结合才能更好的理解和掌握所学的知识。
五、附件(程序源代码)
#include
sbit k1=P1^4;
sbit k2=P1^5;
sbit k3=P1^6;
sbit k4=P1^7;
sbit voice=P3^6;//蜂鸣器使能端
unsigned char code
duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段的共阳编码:0、1、2、3、4、5、6、7、8、9、灭灯
unsigned char code wei[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//共阳位选编码:第0位、第1位、第2位、第3位、第4位、第5位、第6位、第7位unsigned char m0=0,m1=0,f0=0,f1=0,h0=0,h1=0,num=0,con=0;//正常时钟模式
unsigned char d_f0=0,d_f1=0,d_h0=0,d_h1=0,d_con=0;//定时模式相关变量
unsigned shan=0;//闪烁函数中量、灭的次数的控制变量
unsigned sound=0;//蜂鸣器叫与不叫的次数的控制变量
bit xiang=0;//蜂鸣器使能变量
bit dingshi=0;//定时模式的使能变量
bit naozhong=0,only=0;//闹钟的止叫控制变量
void init();//初始化定时器1
void display();//正常时钟显示
void d_display();//定时模式的显示
void delay_ms(unsigned);//非准确延时
void key_scan();//按键扫描、处理函数
void shanshuo(unsigned char);//数码管闪烁显示
void fengming(unsigned);//蜂鸣器叫
//**********************************************************************main( )
void main()
{ init();
while(1)
{ key_scan();
//整点报时