电子秒表显示器实验报告

  • 格式:doc
  • 大小:48.00 KB
  • 文档页数:6

电子秒表显示器实验报告

洛阳理工学院实验报告 系别 计算机系 班级 B140502 学号 B14050226 姓名

韩亚辉 课程名称 单片机原理及应用 实验日期 2016-5-6 实验名称 电子秒表显示器 成绩 实验目的:掌握中断和定时/计数器的工作原理,熟悉C51编程与调试方法

实验条件:计算机一台、ISIS、Proteus软件

实验内容:

(1)提前阅读与实验5相关的阅读材料;

(2)参照实验原理图,在ISIS中完成电路原理图的绘制; (3)参照软件流程图,在uVision3中编写和编译C51程序,生成可执行文件; (4)在uVision3中启动ISIS的仿真运行,并进行联机调试 实验步骤:

(1)理解定时器的工作原理,完成定时中断程序的编写与调试; (2)练习uVision3与ISIS的联机仿真方法

一、 实验原件清单

元件类别 电路符号 元件名称

Microprocessor ICs U1 80C51

Miscellaneous X1/12MHz CRYSTAL

Capacitors C1~C2/1nF CAP

Capacitors C3/22uF CAP-ELEC

Resistors Packs R2~R8/1k RES

Resistors R1/100Ω RES

Optoelectronics LED1~LED2 7SEG-COM-CAT-GRN

二、 根据原理图画出的实验图

实验电路在软件配合下,要求实现如下功能:数码管的初始显示值为“00”;当1s产生时,秒计数器加1;秒计数到60时清0,并从“00”重新开始,如此周而复始进行。

三、 实验程序如下:

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换

sbit LATCH1=P2^2;//定义锁存使能端口 段锁存

sbit LATCH2=P2^3;// 位锁存

sbit P3_7=P3^7;//定义按键位

unsigned char code

dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9

unsigned char code

dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码

unsigned char TempData[8]; //存储显示值的全局变量 void Delay(unsigned int t); //函数声明

void Display(unsigned char FirstBit,unsigned char Num);

bit ldelay=0;

unsigned char t=0;

main()

{

unsigned char num=0;

TMOD=0x01;

TH0=0X3C;

TL0=0XB0;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(ldelay)

{

ldelay=0;

TempData[0]=dofly_DuanMa[num/10];

TempData[1]=dofly_DuanMa[num%10];

num++;

if(num==60)

num=0;

} Display(6,2);

}

}

timer0() interrupt 1

{

t++;

if(t==20){t==0;ldelay=1;}

TH0=0x3C;

TL0=0Xb0;

}

void Delay(unsigned int t) {

while(--t);

}

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数 FirstBit 表示需要显示的第一位,如赋值2表示

从第三个数码管开始显示

如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

void Display(unsigned char FirstBit,unsigned char Num)

{

unsigned char i;

for(i=0;i

DataPort=0; //清空数据,防止有交替重影

LATCH1=1; //段锁存

LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位码

LATCH2=1; //位锁存

LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码

LATCH1=1; //段锁存

LATCH1=0;

Delay(200); // 扫描间隙延时,时间太长会闪烁,

//太短会造成重影

}

}

四、 将生成的.hex文件放入到仿真软件中得出实验结果如下图所示:

实验总结:

经过这次的上机实验,我掌握了中断定时/计数器的工作原理,熟悉C51单片机的编程与调试方法,掌握Proteus ISIS模块的原理图绘图方法及及单片机系统仿真运行方法。同时在实现电子秒表显示器的功能时提高了程序的编写及调试能力,学会了用中断函数的程序进行仿真运行来实现电子秒表显示器的功能,感觉收获很大。