1、单片机实训设计报告 《单片机实训》设计报告 题目:可调电子时钟的设计 学 院:交通信息学院 专 业:电气自动化技术 班 级:电气091 姓 名: 学 号:(长号) 指导老师: 一、实验内容 利用CPU的定时器和实验仪上提供的数码显示电路,设计一个可调电子时钟。显示格式如下:XX XX XX ,由左向右分别为:时、分、秒。同时还可以通过键盘(开关)对电子时钟的时间进行加减,达到可调。 二、实验内目的 1、 掌握定时器的使用和编程方法; 2、 掌握中断处理程序的编程方法; 3、 掌握数码显示电
2、路的驱动程序编程方法; 4、 掌握键盘电路的程序编程方法; 5、 掌握模块子程序的编程方法; 6、 掌握硬件的线路的设计及连线方法。 三、实验说明 设计定时器每50ms中断一次,在中断服务程序中,对中断次数进行计数,50ms计数20次,就是1秒,然后再对秒计数得到分的值,对分计数得到小时的值,分别将各值送到相应的段地址端口和位地址端口,通过数码管显示结果,达到电子时钟的效果。在电子时钟的基础上,程序增加了键盘程序,对电子时钟进行可调(对秒/分/时进行加/减,此功能的增加使电子时钟功能更强、更实用。 四、硬件电路设计原理图 图1 总电路图 图2 键盘控制电路
3、 五、软件设计 (一) 程序设计框图 开始 置定时器模式及常数 开始 设置初始常数 启动定时器 设置秒、分、时初值 键盘扫描 调用显示子程序 设置定时器初值 启动定时器 初始化显示参数 查表修正A值 段码输出 位选通 置定时器模式及常数 下一位选通 延迟10MS 关闭位选通 开始 关中断、保护现场 秒单元内容加1 到1分钟否? 秒单元内容清零 分单元内容加1 分单元内容清零 时单元内容加1 时单元内容清零 恢复现场 开中断 到1小时否? 到24小时否? 中断返回 开始 按键扫描 P1.0
4、
P1.1
P1.2
P1.3
P1.4
P1.5
秒加1
分加1
时加1
秒减1
分减1
时减1
显示
(二)实验程序设计
步骤 1、用定时器编写延迟子程序;
2、编写学号显示子程序;
3、编写从0~9秒用数码管显示子程序;
4、据时分秒的要求,编写定时器0中断服务子程序;
5、结合以上子程序,与主程序相组合成电子时钟程序;
6、编写键盘控制加子程序;
7、组合以上子程序,与主程序相组合成可调电子时钟程序;
#include
5、igned int number; void delay(unsigned char); void display(); void key(); void init(); uchar ledsbuf[8]; uchar ledsbuf1[8]; sbit p10=P1^0; sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit p14=P1^4; sbit p15=P1^5; uchar a[4]; uchar b[4]; void c
6、hbcd(); //计时器 void init(); //开始 unsigned int number; void time() interrupt 1 { if(--number==0) //number=0 1秒钟到 { number=4000; if((++a[3])==60) { a[3]=0; if((++a[2])==60) { a[2]
7、0; if((++a[1])==24) { a[1]=0; if((++b[3])==32) { b[3]=01; if((++b[2])==12) { b[2]=01;
8、 if(b[1]++==99) { b[1]=0;b[0]++; } } } } } } } } //控制显示数字 code unsigned char le
9、dtab[]={ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,0x40}; void main() { uchar i; a[0]=00,a[1]=23,a[2]=59,a[3]=50; b[0]=20,b[1]=11,b[2]=03,b[3]=30; number=4000 ;
10、 init(); chbcd(); while(1) { chbcd(); display(); key(); } } //控制显示位 void chbcd() { uchar i; for(i=0;i<4;i++) { ledsbuf[i*2]=ledtab[a[i]/10]; ledsbuf[i/2]=ledtab[a[0]=16]; ledsbuf[i*2+1]=ledtab
11、[a[i]%10];
ledsbuf1[i*2]=ledtab[b[i]/10];
ledsbuf1[i*2+1]=ledtab[b[i]%10];
}
}
void delay(char n)
{
uchar i;
for(i=0;i 12、 TR0=1;
}
void display ()
{
uchar i;
for(i=0;i<8;i++)
{
P2=~ledsbuf[i];
P0=~ledsbuf1[i];
P3=(0x01< 13、 display();
}
a[2]++;
for(;a[2]==60;a[2]=0)
{
if((++a[1])==24)
a[1]=0;
if((++b[3])==32)
{
b[3]=0;
}
}
}
//时
if(p11==0)
{
while(p11==0)
14、 {
display();
}
a[1]++;
for(;a[1]==24;a[1]=0)
{
if((++b[3])==32)
b[3]=0;
}
}
//天
if(p12==0)
{
while(p12==0)
{
display();
}
b[3]++;
for(;b[3]==32;b[3]=0)
{
if((++ 15、b[2])==13)
b[2]=0;
++b[1];
}
}
//月
if(p13==0)
{
while(p13==0)
{
display();
}
if( ++b[2]==13)
{
b[2]=01;
if(b[1]++==99)
{
b[1]=0;b[0]++;
}
}
}
//年
if(p14==0)
{
while(p14= 16、0)
{
display();
}
b[1]++;
for(;b[1]==99;b[1]=0)
{
b[1]=01;
b[0]++;
}
}
//复位
if(p15==0)
{
while(p15==0)
{
display();
}
a[0]=a[1]=a[2]=a[3]=0;
b[0]=20;b[1]=11;b[2]=03;b[3]=22;
}
}
四实验结果分析
调试过程的问题及解决方法
五、实验体会
1、编写程序时,知识结构混乱,无从下手。应该加深对书本基本知识的了解,即可解决。
2、脑海没有形成编写程序的思想,像显示子程序、延时程序等,都只是参考课本上的程序,没有个人创作。
3、指导老师够认真、负责,指导到位。
六、 建议
学校的硬件设备跟不上,实训过程中由于硬件设备不行而不得不停止实训,而且经常因为病毒破坏程序,导致多次失败告终,大量的浪费了我们的时间。
七参考文献:单片机C语言指导书
- 10 -
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818