实验四 单片机秒表设计.docx

上传人:b****6 文档编号:7592645 上传时间:2023-01-25 格式:DOCX 页数:10 大小:1.12MB
下载 相关 举报
实验四 单片机秒表设计.docx_第1页
第1页 / 共10页
实验四 单片机秒表设计.docx_第2页
第2页 / 共10页
实验四 单片机秒表设计.docx_第3页
第3页 / 共10页
实验四 单片机秒表设计.docx_第4页
第4页 / 共10页
实验四 单片机秒表设计.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验四 单片机秒表设计.docx

《实验四 单片机秒表设计.docx》由会员分享,可在线阅读,更多相关《实验四 单片机秒表设计.docx(10页珍藏版)》请在冰豆网上搜索。

实验四 单片机秒表设计.docx

实验四单片机秒表设计

 

微控制器实验报告四

 

班级:

15自动化学号:

姓名:

指导教师:

李素敏

 

实验四秒表设计

一.实验目的

(1)掌握利用单片机定时器实现定时。

(2)熟悉单片机与数码管的接口技术及数码管动态显示的控制过程。

(3)熟悉单片机与键盘的接口技术及按键识别过程。

(4)学会如何编制含数码管显示,定时器中断及按键控制等多种功能的综合程序,体会大型程序的编制和调试技巧。

二.实验内容

1、用6位数码管显示秒表时间,最左边2位显示分,中间2位显示秒,最右边2位显示秒的小数位(0.00~0.99秒),秒与小数位之间要显示小数点。

2、两个按键:

(1)计时/停止按键:

首次按下从0开始计时,再次按下暂停计时,之后每次按下按键实现‘继续计时、暂停计时,继续计时、暂停计时……’。

(继续计时即从上次暂停时的时间开始继续计时)

(2)复位按键:

按下后全部清0,等待下次按下‘计时/停止按键’时重新开始计时。

三.实验仪器

PC机、单片机

四.实验步骤

1.编写程序

2.生成hex文件

3.将程序烧录至单片机

4.调试程序,知道得出正确的实验结果

5.实验结果与分析

实验代码如下:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitdula=P2^6;

sbitwela=P2^7;

sbitkey=P3^4;

sbitreset=P3^5;

Unsignedchardisplay1,display2,display3,display4,display5,display6,min,sec,decimal;

unsignedcharflag=0;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示0~9不带小数

unsignedcharcodetable2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//数码管显示0~9带小数

//延时函数

voiddelay(unsignedinti)

{

unsignedintj,k;

for(j=i;j>0;j--)

for(k=125;k>0;k--);

}

 

//判断按键是否按下

voidKEY()

{

if(key==0)

{

delay(10);

if(key==0)//按键消抖

{

flag++;

if(flag==1)//按下一次,计数开始计数

{

TR0=1;//定时器TO开始工作

if(flag==2)//按下两次,计数暂停

{

TR0=0;//定时器T0停止

flag=0;//计数标志清零

}

}

}

if(reset==0)//复位键按下

{

delay(10);

if(reset==0)

{

TR0=0;//T0停止计时

flag=0;//所有数据清零

min=0;

sec=0;

decimal=0;

display1=0;

display2=0;

display3=0;

display4=0;

display5=0;

display6=0;

}

}

}

}

//显示函数

voidshow()

{

display1=min/10;//分十位

display2=min%10;//分个位

display3=sec/10;//秒十位

display4=sec%10;//秒个位

display5=decimal/10;//小数十位

display6=decimal%10;//小数个位

dula=0;

P0=table[display1];

dula=1;

dula=0;

wela=0;

P0=0xfe;

wela=1;

wela=0;

delay

(2);

P0=table[display2];

dula=1;

dula=0;

P0=0xfd;

wela=1;

wela=0;

delay

(2);

P0=table2[display3];

dula=1;

dula=0;

P0=0xfb;

wela=1;

wela=0;

delay

(2);

P0=table[display4];

dula=1;

dula=0;

P0=0xf7;

wela=1;

wela=0;

delay

(2);

P0=table[display5];

dula=1;

dula=0;

P0=0xef;

wela=1;

wela=0;

delay

(2);

P0=table[display6];

dula=1;

dula=0;

P0=0xdf;

wela=1;

wela=0;

delay

(2);

P0=0x80;

dula=1;

dula=0;

P0=0xf7;

wela=1;

wela=0;

delay

(2);

}

voidmain()

{

TMOD=0x01;

TH0=(65536-10000)/256;//向定时器写入初值的高8位

TL0=(65536-10000)%256;//向TL0写入初值的低八位

EA=1;//总中断允许

ET0=1;//允许定时器T0工作

TR0=0;

dula=0;

wela=0;

while

(1)

{

KEY();

show();

}}

voidT0_int(void)interrupt1

{

TH0=(65536-10000)/256;//向定时器写入初值的高8位

TL0=(65536-10000)%256;//向TL0写入初值的低八位

decimal++;

if(decimal==99)//小数部分进位

{

decimal=0;

sec++;

if(sec==60)//秒部分进位

{

sec=0;

min++;

if(min==60)

{

min=0;

sec=0;

decimal=0;

}

}

}

}

实验截图如下:

五、实验心得

这次的实验相当于一个大设计,几乎综合了这学期所学的所有知识,中断、计数器、按键、数码管。

程序编写时,应该弄清楚原理,如中断是如何工作的,弄清楚这些后,程序的编写就很容易了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1