单片机实训报告模板文档格式.docx
《单片机实训报告模板文档格式.docx》由会员分享,可在线阅读,更多相关《单片机实训报告模板文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
XXXXXX,由左向右分别为:
时、分、秒。
同时还可以通过键盘(开关)对电子时钟的时间进行加减,达到可调。
二、实验内目的
1、掌握定时器的使用和编程方法;
2、掌握中断处理程序的编程方法;
3、掌握数码显示电路的驱动程序编程方法;
4、掌握键盘电路的程序编程方法;
5、掌握模块子程序的编程方法;
6、掌握硬件的线路的设计及连线方法。
三、实验说明
设计定时器每50ms中断一次,在中断服务程序中,对中断次数进行计数,50ms计数20次,就是1秒,然后再对秒计数得到分的值,对分计数得到小时的值,分别将各值送到相应的段地址端口和位地址端口,通过数码管显示结果,达到电子时钟的效果。
在电子时钟的基础上,程序增加了键盘程序,对电子时钟进行可调(对秒/分/时进行加/减,此功能的增加使电子时钟功能更强、更实用。
四、硬件电路设计原理图
图1总电路图
图2键盘控制电路
五、软件设计
(一)程序设计框图
(二)实验程序设计
步骤1、用定时器编写延迟子程序;
2、编写学号显示子程序;
3、编写从0~9秒用数码管显示子程序;
4、据时分秒的要求,编写定时器0中断服务子程序;
5、结合以上子程序,与主程序相组合成电子时钟程序;
6、编写键盘控制加子程序;
7、组合以上子程序,与主程序相组合成可调电子时钟程序;
#include<
reg51.h>
//程序定义
typedefunsignedcharuchar;
unsignedintnumber;
voiddelay(unsignedchar);
voiddisplay();
voidkey();
voidinit();
ucharledsbuf[8];
ucharledsbuf1[8];
sbitp10=P1^0;
sbitp11=P1^1;
sbitp12=P1^2;
sbitp13=P1^3;
sbitp14=P1^4;
sbitp15=P1^5;
uchara[4];
ucharb[4];
voidchbcd();
//计时器
//开始
voidtime()interrupt1
{
if(--number==0)//number=01秒钟到
{
number=4000;
if((++a[3])==60)
a[3]=0;
if((++a[2])==60)
a[2]=0;
if((++a[1])==24)
a[1]=0;
if((++b[3])==32)
b[3]=01;
if((++b[2])==12)
b[2]=01;
if(b[1]++==99)
b[1]=0;
b[0]++;
}
}
//控制显示数字
codeunsignedcharledtab[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
voidmain()
uchari;
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;
init();
chbcd();
while
(1)
display();
key();
//控制显示位
voidchbcd()
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[a[i]%10];
ledsbuf1[i*2]=ledtab[b[i]/10];
ledsbuf1[i*2+1]=ledtab[b[i]%10];
voiddelay(charn)
n;
i++);
}
voidinit()
TMOD=0x02;
TH0=0x08;
TL0=0x08;
EA=1;
ET0=1;
TR0=1;
voiddisplay()
8;
P2=~ledsbuf[i];
P0=~ledsbuf1[i];
P3=(0x01<
<
i);
delay(10);
P3=0x00;
//调整
voidkey()
//分
if(p10==0)
while(p10==0)
a[2]++;
for(;
a[2]==60;
a[2]=0)
b[3]=0;
//时
if(p11==0)
while(p11==0)
a[1]++;
a[1]==24;
a[1]=0)
//天
if(p12==0)
while(p12==0)
b[3]++;
b[3]==32;
b[3]=0)
if((++b[2])==13)
b[2]=0;
++b[1];
//月
if(p13==0)
while(p13==0)
if(++b[2]==13)
//年
if(p14==0)
while(p14==0)
b[1]++;
b[1]==99;
b[1]=0)
b[1]=01;
b[0]++;
//复位
if(p15==0)
while(p15==0)
a[0]=a[1]=a[2]=a[3]=0;
b[0]=20;
b[1]=11;
b[2]=03;
b[3]=22;
四实验结果分析
调试过程的问题及解决方法
五、实验体会
1、编写程序时,知识结构混乱,无从下手。
应该加深对书本基本知识的了解,即可解决。
2、脑海没有形成编写程序的思想,像显示子程序、延时程序等,都只是参考课本上的程序,没有个人创作。
3、指导老师够认真、负责,指导到位。
6、建议
学校的硬件设备跟不上,实训过程中由于硬件设备不行而不得不停止实训,而且经常因为病毒破坏程序,导致多次失败告终,大量的浪费了我们的时间。
七参考文献:
单片机C语言指导书