LCD1602液晶秒表C51程序

LCD1602液晶秒表C51程序
LCD1602液晶秒表C51程序

LCD1602液晶秒表C51程序

此程序是基于51hei单片机开发板上面写的,如需要移植到自己的电路上,修改相应的端口即可,开发板完整的电路图下载: 点这里(注意:只需要看1602部分即可,其他部分可以忽略)

/**

************************************************* **********************

* @file main.c

* @author xr

* @date 2014年5月8日22:11:33 -- 2014年5月9日12:03:49

* @version V1.2.3

* @brief LCD1602液晶跑表单片机STC89C52RC MCU 晶振 11.0592MHZ

************************************************* **********************

*/

#include ;

/* 系统时钟 */

#define SYS_XTAL (11059200UL/12)

/* 定时器T0重载值 */

unsigned char thr0, tlr0;

unsigned char thr1, tlr1;

/* 跑表计数 */

unsigned char timer[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; //分别表示跑表的各个位上的数字

bit flag10ms = 0;

extern bit stopflag;//跑表走停标志位

extern void InitalLCD1602();

extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char * str);

extern void KeyDriver();

extern void KeyScan();

void DisplayTimer();

void ConfigTimer0(unsigned int xms);

void ConfigTimer1(unsigned int xms);

/* 主函数main() */

void main(void)

{

ConfigTimer0(10); //定时10ms

ConfigTimer1(1);

InitalLCD1602();

LcdShowStr(0, 0, "stopwatch");

LcdShowStr(2, 1, "0000000.00s"); //液晶初始化显示

LcdShowStr(10, 0, "stop!");

while (1)

{

KeyDriver();

DisplayTimer();

if ((flag10ms == 1) && (stopflag == 1))

{

flag10ms = 0;

timer[0]++;

if (timer[0] >; 9)

{

timer[0] = 0;

timer[1]++;

if (timer[1] >; 9)

{

timer[1] = 0;

timer[2]++;

if (timer[2] >; 9) {

timer[2] = 0;

timer[3]++;

if (timer[3] >; 9) {

timer[3] = 0;

timer[4]++;

if (timer[4] >; 9) {

timer[4] = 0;

timer[5]++;

if (timer[5] >; 9) {

timer[5] = 0;

timer[6]++;

if (timer[6] >; 9) {

timer[6] = 0;

timer[7]++;

if (timer[7] >; 9)

{

timer[7] = 0;

timer[8]++;

if (timer[8] >; 9)

{

timer[8] = 0;

}

}

}

}

}

}

}

}

}

}

}

}

/* 将跑表时间显示到液晶上 */ void DisplayTimer()

{

unsigned char str[20];

/* 分解timer */

str[0] = timer[8] + '0';

str[1] = timer[7] + '0';

str[2] = timer[6] + '0';

str[3] = timer[5] + '0';

str[4] = timer[4] + '0';

str[5] = timer[3] + '0';

str[6] = timer[2] + '0';

str[7] = '.';

str[8] = timer[1] + '0';

str[9] = timer[0] + '0';

str[10] = '\0';

LcdShowStr(2, 1, str);

}

/* 定时器T0配置 */

void ConfigTimer0(unsigned int xms) {

unsigned long tmp;

tmp = (SYS_XTAL * xms) / 1000;

tmp = 65536-tmp + 18;

thr0 = (unsigned char)(tmp >;>; 8) ; tlr0 = (unsigned char)tmp;

TMOD &= 0xF0; //清零T0控制位

TMOD |= 0x01; //定时器方式1

TH0 = thr0;

TL0 = tlr0;

TR0 = 1; //开启timer0

ET0 = 1; //开启T0中断

EA = 1; //开启总中断

}

/* 配置定时器T1 */

void ConfigTimer1(unsigned int xms) {

unsigned long tmp;

tmp = (SYS_XTAL * xms) / 1000;

tmp = 65536 - tmp + 18;

thr1 = (unsigned char)(tmp >;>; 8); tlr1 = (unsigned char)tmp;

TMOD &= 0x0F;

TMOD |= 0x10;

TH1 = thr1;

TL1 = tlr1;

TR1 = 1;

ET1 = 1;

EA = 1;

}

/* 定时器T0中断服务 */

void Timer0_ISP() interrupt 1

{

TH0 = thr0;

TL0 = tlr0;

flag10ms = 1; //定时10ms

}

/* 定时器T1中断服务 */

void Timer1_ISP() interrupt 3

{

TH1 = thr1;

TL1 = tlr1; //定时1ms

KeyScan();

}

/**

************************************************* **********************

* @file Lcd1602.c

* @author xr

* @date 2014年5月7日13:33:17

* @version V1.2.3

* @brief LCD1602液晶底层驱动

************************************************* **********************

*/

#include ;

//LCD1602_IO

sbit LCD1602_RS = P1^0;

sbit LCD1602_RW = P1^1;

sbit LCD1602_EN = P1^5;

#define LCD1602_DB P0

/* 液晶忙碌等待 */

void LCD1602Wait()

{

unsigned char sta;

LCD1602_DB = 0xFF;//总线拉高,检测液晶状态字

LCD1602_RS = 0;

LCD1602_RW = 1;

do

{

LCD1602_EN = 1;

sta = LCD1602_DB;

LCD1602_EN = 0;//避免液晶输出数据

} while (sta & 0x80);//状态字最高位STA7 == 0空闲,1忙碌

}

/* 液晶写命令 */

void LCD1602WriteCmd(unsigned char cmd)

{

LCD1602Wait();

LCD1602_RS = 0;

LCD1602_RW = 0;

LCD1602_EN = 0;

LCD1602_DB = cmd;

LCD1602_EN = 1;

LCD1602_EN = 0;

}

/* 液晶写数据 */

void LCD1602WriteData(unsigned char dat)

{

LCD1602Wait();

LCD1602_RS = 1;

LCD1602_RW = 0;

LCD1602_EN = 0;

LCD1602_DB = dat;

LCD1602_EN = 1;

LCD1602_EN = 0;

}

/* 液晶初始化 */

void InitalLCD1602()

{

LCD1602WriteCmd(0x38);

LCD1602WriteCmd(0x0C);

LCD1602WriteCmd(0x06);

LCD1602WriteCmd(0x01);//清屏

}

/* 写数据到液晶上,字符串str,坐标(x, y),地址addr */

void LcdShowStr(unsigned char x, unsigned char y, unsigned char * str)

{

unsigned char addr;

if (y == 0)

{

addr = 0x00 + x;

}

else

{

addr = 0x40 + x;

}

LCD1602WriteCmd(addr | 0x80);

while (*str != '\0')

{

LCD1602WriteData(*str++);

}

}

/**

************************************************* **********************

* @file keyboard.c

* @author xr

* @date 2014年5月8日22:11:33 -- 2014年5月9日12:03:49

* @version V1.2.3

* @brief 按键驱动单片机STC89C52RC MCU 晶振11.0592MHZ

************************************************* **********************

*/

#include ;

/* 按键输出输入端口定义 */

sbit KEY_IN1 = P2^4;

sbit KEY_IN2 = P2^5;

sbit KEY_IN3 = P2^6;

sbit KEY_IN4 = P2^7;

sbit KEY_OUT1 = P2^3;

sbit KEY_OUT2 = P2^2;

sbit KEY_OUT3 = P2^1;

sbit KEY_OUT4 = P2^0;

extern unsigned char timer[9]; //分别表示跑表的各个位上的数字

/* 按键当前状态 */

unsigned char volatile keySta[4][4] = {{1, 1, 1, 1},

{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}};

/* 按键对应标准PC键盘编码 */

const unsigned char code keyCodeMap[4][4] = {

{'1', '2', '3', 0x26}, /* 数字键 1, 2, 3 和向上键 */

{'4', '5', '6', 0x25}, /* 数字键 4, 5, 6 和向左键 */

{'7', '8', '9', 0x28}, /* 数字键 7, 8, 9 和向下键 */

{'0', 0x1B, 0x0D, 0x27} /* 数字键 0 和向右键*/

};

bit stopflag = 0;//跑表走停标志位 0 停止,1运行void KeyAction(unsigned char keycode);

void LcdShowStr(unsigned char x, unsigned char y, unsigned char * str);

/* 按键驱动函数 */

void KeyDriver()

{

/* 上一次按键的备份值 */

static unsigned char keybackup[4][4] = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}};

for (i = 0; i < 4; i++)

{

for (j = 0; j < 4; j++)

{

if (keySta[i][j] != keybackup[i][j]) //当前按键状态和上一次的按键状态不同

{ //按键有动作

if (keybackup[i][j] != 0) //上一次按键是弹起 {

KeyAction(keyCodeMap[i][j]); //当前按键是想、按下

}

keybackup[i][j] = keySta[i][j]; //备份当前按键值

}

}

}

}

/* 按键扫描函数 */

void KeyScan()

{

static unsigned char keyout = 0;//按键行索引

static unsigned char keybuf[4][4] = {{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF},

{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}

};

/* 按键消抖 */

keybuf[keyout][0] = (keybuf[keyout][0] << 1) | KEY_IN1;

keybuf[keyout][1] = (keybuf[keyout][1] << 1) | KEY_IN2;

keybuf[keyout][2] = (keybuf[keyout][2] << 1) | KEY_IN3;

keybuf[keyout][3] = (keybuf[keyout][3] << 1) | KEY_IN4;

/* 更新按键的值 */

for (i = 0; i < 4; i++)

{

if ((keybuf[keyout][i] & 0x1F) == 0x1F)

{

//五次检测按键的值都是1

keySta[keyout][i] = 1;

}

else if ((keybuf[keyout][i] & 0x1F) == 0x00) {

//五次检测的按键值都是0

keySta[keyout][i] = 0;

}

}

/* 按键行索引++ */

keyout++;

keyout &= 0x03;//到4归零

/* 根据按键索引选择行按键进行扫描 */

switch (keyout)

{

case 0: KEY_OUT1 = 0; KEY_OUT4 = 1;//选择第一行按键

case 1: KEY_OUT2 = 0; KEY_OUT1 = 1;

case 2: KEY_OUT3 = 0; KEY_OUT2 = 1;

case 3: KEY_OUT4 = 0; KEY_OUT3 = 1;

default: break;

}

}

/* 按键动作函数 */

void KeyAction(unsigned char keycode)

{

unsigned char i = 0;

if (keycode == 0x1B) //ESC

{

/* 跑表复位 */

stopflag = 0;

for (i = 0; i < 9; i++)

{

timer[i] = 0;

}

LcdShowStr(2, 1, "0000000.00s"); LcdShowStr(10, 0, "reset!");

}

else if (keycode == 0x0D) //回车键跑表走停

{

if (stopflag == 0)

{

stopflag = 1;

LcdShowStr(10, 0, "start!");

}

else

{

stopflag = 0;

LcdShowStr(10, 0, "stop! "); //多写入一个空格

}

}

}

LCD1602汇编显示程序

;1602显示ABC LCD_RS EQU P2.5 LCD_RW EQU P2.6 LCD_EN EQU P2.7 LCD_DATA EQU P3 ;----------------- ORG0000H JMP START ORG0030H ;----------------- LCD: CALL LCD_INIT MOV A, #80H CALL LCD_WCMD MOV A, #'A' CALL LCD_WDATA MOV A, #'B' CALL LCD_WDATA MOV A, #'C' CALL LCD_WDATA AJMP$ ;---------------- DELAY5MS: MOV R6, #10 DL1:DJNZ R7, $ DJNZ R6, DL1 RET ;---------------- LCD_INIT: CALL DELAY5MS MOV A, #38H CALL LCD_WCMD CALL DELAY5MS

CALL DELAY5MS MOV A, #06H CALL LCD_WCMD MOV A, #01H CALL LCD_WCMD MOV A, #0CH CALL LCD_WCMD RET ;===================================== LCD_WCMD: CALL CHECKBUSY CLR LCD_RS JMP W_LCD ;---------------- LCD_WDATA: CALL CHECKBUSY SETB LCD_RS W_LCD: CLR LCD_RW MOV LCD_DATA, A SETB LCD_EN NOP CLR LCD_EN RET ;---------------- CHECKBUSY: PUSH ACC MOV LCD_DATA, #255 CLR LCD_RS SETB LCD_RW BUSYLOOP: SETB LCD_EN NOP MOV A, LCD_DATA CLR LCD_EN JB ACC.7, BUSYLOOP POP ACC RET

基于51单片机的跑表,秒表程序c语言程序

基于51单片机的跑表,秒表程序c语言程序#include #define uchar unsigned char #define uint unsigned int uchar table[]=" 00:00:00:00 "; bit flag=0; sbit en=P2^0; sbit rs=P2^1; sbit s1=P1^0; sbit s2=P1^1; sbit bb=P1^2; uchar shi,fen,miao,biao,tt,num1,aa; void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void write_com(uchar com) { rs=0; P0=com;

delay(10); en=1; delay(10); en=0; } void write_date(uchar date) { rs=1; P0=date; delay(10); en=1; delay(10); en=0; } void display(uchar com1,uchar date1) { uchar aa,bb; aa=date1/10; bb=date1%10; write_com(0x80+com1); write_date(0x30+aa);

write_date(0x30+bb); } void init() { TMOD=0x01; ET0=1; TR0=0; EA=1; TH0=(65536-10000)/256; TL0=(65536-10000)%256; en=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80+0x40); for(num1=0;num1<17;num1++) { write_date(table[num1]); delay(5); }

数字秒表的设计与实现实验报告

电子科技大学《数字秒表课程设计》 姓名: xxx 学号: 学院: 指导老师:xx

摘要 EDA技术作为电子工程领域的一门新技术,极大的提高了电子系统设计的效率和可靠性。文中介绍了一种基于FPGA在ISE10.1软件下利用VHDL语言结合硬件电路来实现数字秒表的功能的设计方法。采用VHDL硬件描述语言,运用ModelSim等EDA仿真工具。该设计具有外围电路少、集成度高、可靠性强等优点。通过数码管驱动电路动态显示计时结果。给出部分模块的VHDL源程序和仿真结果,仿真结果表明该设计方案的正确,展示了VHDL语言的强大功能和优秀特性。 关键词:FPGA, VHDL, EDA, 数字秒表

目录 第一章引言 (4) 第二章设计背景 (5) 2.1 方案设计 (5) 2.2 系统总体框图 (5) 2.3 -FPGA实验板 (5) 2.4 系统功能要求 (6) 2.5 开发软件 (6) 2.5.1 ISE10.1简介 (6) 2.5.2 ModelSim简介 (6) 2.6 VHDL语言简介 (7) 第三章模块设计 (8) 3.1 分频器 (8) 3.2 计数器 (8) 3.3 数据锁存器 (9) 3.4 控制器 (9) 3.5 扫描控制电路 (10) 3.6 按键消抖电路 (11) 第四章总体设计 (12) 第五章结论 (13) 附录 (14)

第一章引言 数字集成电路作为当今信息时代的基石,不仅在信息处理、工业控制等生产领域得到普及应用,并且在人们的日常生活中也是随处可见,极大的改变了人们的生活方式。面对如此巨大的市场,要求数字集成电路的设计周期尽可能短、实验成本尽可能低,最好能在实验室直接验证设计的准确性和可行性,因而出现了现场可编程逻辑门阵列FPGA。对于芯片设计而言,FPGA的易用性不仅使得设计更加简单、快捷,并且节省了反复流片验证的巨额成本。对于某些小批量应用的场合,甚至可以直接利用FPGA实现,无需再去订制专门的数字芯片。文中着重介绍了一种基于FPGA利用VHDL硬件描述语言的数字秒表设计方法,在设计过程中使用基于VHDL的EDA工具ModelSim对各个模块仿真验证,并给出了完整的源程序和仿真结果。

“秒表测时”实验报告Word版

“秒表测时”实验报告 一、实验任务 利用秒表对电脑主机主要元件装配作业进行测时,计算标准时间 二、实验目的 1、掌握秒表测时技术; 2、掌握标准时间的制定原理、方法、程序和步骤; 3、学会正确划分各测时单元及其计时点,并学会确定正确的宽放率; 4、掌握必要的软件工具。 三、实验原理 1、秒表测时的定义 2、秒表测时的用途 3、测时单元的划分 四、实验设备、仪器、工具及资料 1、电脑主机 2、计算机 3、装拆工具、笔、纸、记录表格 4、秒表、计算器 五、实验过程 1、实验分组,每四人一组,两人负责装配产品,两人负责观测记录 2、收集资料,实验准备,布置工作地 3、划分操作单元,确定计时点 4、测时 采用连续法记录时间研究,在现场记录时用铅笔填写秒表读数“W.R”,见附件:时间研究表(一)。计算基本时间“B.T”。 4、填写时间研究表(二),剔除异常值,用三倍标准法决定正常值范围(正常值范围在x±3σ内)。 5、决定宽放时间 取宽放率为:15%。宽放时间=正常时间×宽放率

6、计算标准时间:标准时间=平均操作时间×评比系数+宽放时间 六、整理时间研究表(一)和时间研究表(二) 时间研究表(一)(现场记录)

时间研究表(二)(统计表)

七、绘制管制界限图 对每一个操作单元进行异常值剔除,选取其中一个操作单元绘制其管制界限图 1、剔除异常值 (1)、操作单元1: n X X n i i ∑== 1 11(其中n=8) 计算得69.71=X n X X n i i ∑=-= 1 2 111)(σ 计算得=1σ 1.48 正常值为σ3±X 之内,即在(3.25,12.13)之间,所以操作单元1无异常值 (2)、操作单元2: n X X n i i ∑== 1 22(其中n=8) 计算得=2X 6.79 n X X n i i ∑=-= 1 2 222)(σ 计算得=2σ0.28 正常值为σ3±X 之内,即在(5.95,7.63)之间,所以操作单元2无异常值 (3)、操作单元3: n X X n i i ∑== 1 33(其中n=8) 计算得=3X 6.42 n X X n i i ∑=-= 1 2 333)(σ 计算得=3σ0.32 正常值为σ3±X 之内,即在(5.46,7.38)之间,所以操作单元3无异常值 (4)、操作单元4: n X X n i i ∑== 1 44(其中n=8) 计算得=4X 6.55 n X X n i i ∑=-= 1 2 444)(σ 计算得=4σ0.90

51单片机定时器秒表设计程序

51单片机定时器秒表设计程序 #include typedef unsigned char UINT8; typedef unsigned int UINT16; code UINT8 SEGMENT[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; code UINT8 SHU[10] ={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; code UINT8 SELECT[8] ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; #define S1 0x0e #define S2 0x0d #define S3 0x0b #define S4 0x07 sbit SPEAK=P3^5; sbit P3_3=P3^3; UINT8 mSecond,Second; void Delay(UINT16 t) { UINT16 i,j; for(i=0;i

简易秒表设计实验报告

实 验 报 告 系别 信工系 专业 班级 姓名 学号 简易秒表设计 实验目的: 1、 熟悉Keil C51软件的使用方法及proteus 仿真软件的使用; 2、 综合运用所学的理论知识(数码管、按键),通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。 3、 通过本次试验,增强自己的动手能力。认识单片机在日常生活中的应用的广泛性,实用性。 设计要求: 制作简易秒表,用三个按键分别实现秒表的启动、停止与复位,利用两位共阴级的数码管显示时间。 设计思路: 硬件设计:数码管部分采用2位共阴极的数码管,在P0口接上拉电阻,公共端低电平扫描。按键电路部分,将按键一侧与单片机任一I/O 口相连。 软件设计:模块化思想,使用定时器T0的工作方式1,编写显示子程序,延时子程序,初始化程序,主程序设计时注意按键消抖。 原理图: XTAL218XTAL119ALE 30EA 31PSEN 29RST 9P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 33P0.7/AD7 32P1.01P1.12P1.23P1.34P1.45P1.56P1.6 7P1.7 8P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15P2.7/A15 28P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27U1AT89C51C1 1nF C21nF R110k C31uF 234567891 RP1 RESPACK-8 源代码: #include<>

秒表实验报告

实验三:秒表实验报告 一、实验目的 1、了解74ls273的工作原理; 2、看懂8086工作的时序图,并且掌握8086总线的技术; 3. 通过此实验,熟悉protues7.9的基本操作和工作环境以及MASM32文件的建立与运行; 二、实验原理 用74ls273扩展IO口,通过片选信号和写信号奖数据总线上的值锁存在273中,同时在273的输出端口输出,当数据总线上的值撤销以后,由于74ls273能够锁存信号,所以273的输出端保持不变,直到下次有新的数据被锁存,通过按键可以控制数据的变化,cpu根据按键变化控制输出,通过总线就可以控制数码管的变化,显示出秒表的效果。 3、实验步骤 1、根据实验目的及内容在proteus画出电路图,如下图所示 2、画好电路图后用汇编软件,按要求写出实验代码,代码如下: .MODEL SMALL .8086 .stack .code

.startup MOV DX,0200H LOOP0: MOV BL,SEC AND BX,000FH MOV SI,BX MOV AL,SITUATION[SI] MOV BL,SEC AND BX,00F0H MOV CL,4 SHR BX,CL MOV SI,BX MOV AH,SITUATION[SI] OUT DX,AX CALL DELAY MOV AL,SEC ADD AL,1 DAA MOV SEC,AL CMP SEC,60H JB LOOP0 MOV SEC,0 JMP LOOP0 DELAY PROC NEAR PUSH BX PUSH CX MOV BX,50 DEL1: MOV CX,5882 DEL2: LOOP DEL2 DEC BX JNZ DEL1 POP CX POP BX RET DELAY ENDP .data SEC DB 00H

lcd1602按键显示程序

#include<> #include<> //包含_nop_()函数定义的头文件 typedef unsigned int uint ; typedef unsigned char uchar ; sbit RS=P2^0; //寄存器选择位,将RS位定义为引脚 sbit RW=P2^1; //读写选择位,将RW位定义为引脚 sbit E=P2^2; //使能信号位,将E位定义为引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为引脚 " uchar keyscan(); void delay1ms(); void delay(unsigned char n); unsigned char BusyTest(void); void WriteInstruction (unsigned char dictate); void WriteAddress(unsigned char x); … void WriteData(unsigned char y); void LcdInitiate(void); void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++); } ! void delay(unsigned char n) { unsigned char i; for(i=0;i

单片机电子秒表程序设计

沈阳工程学院课程设计设计题目:电子秒表程序设计

电子秒表程序设计 1.设计主要内容及要求: 要求:1)具有秒表基本功能。 2)显示最小数为0.1秒。 3)能够进行多路计数并分别显示。 2.对设计论文撰写内容、格式、字数的要求: (1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。 (2).学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。课程设计论文的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。 (3).论文要求打印,打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。 (4). 课程设计论文装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。 3.时间进度安排; 顺序阶段日期计划完成内容备注 1 1月2日教师讲解题目,学生查阅相关资料 2 1月3日查阅相关资料、进行方案论证 3 1月4日确定多路计数和显示方法 4 1月5、6、9 编写程序 日 5 1月10、11日调试程序 6 1月12日撰写论文 7 1月13日论文答辩

沈阳工程学院 单片机课程设计成绩评定表指导教师评审意见 评价内容具体要求权重评分 加权 分 调研论证能独立查阅文献,收集资料;能制定课程设计方案 和日程安排。 0.1 5 4 3 2 工作能力态度工作态度认真,遵守纪律,出勤情况是否良好,能 够独立完成设计工作, 0.2 5 4 3 2 工作量按期圆满完成规定的设计任务,工作量饱满,难度 适宜。 0.2 5 4 3 2 说明书的质量 说明书立论正确,论述充分,结论严谨合理,文字 通顺,技术用语准确,符号统一,编号齐全,图表 完备,书写工整规范。 0.5 5 4 3 2 指导教师评审成绩 (加权分合计乘以12) 分加权分合计 指导教师签名:年月日 评阅教师评审意见 评价内容具体要求权重评分 加权 分 查阅 文献 查阅文献有一定广泛性;有综合归纳资料的能力0.2 5 4 3 2 工作 量 工作量饱满,难度适中。0.5 5 4 3 2 说明书的质量说明书立论正确,论述充分,结论严谨合理,文字 通顺,技术用语准确,符号统一,编号齐全,图表 完备,书写工整规范。 0.3 5 4 3 2 评阅教师评审成绩 (加权分合计乘以8) 分加权分合计 评阅教师签名:年月日课程设计总评成绩分

电子秒表电路实验报告1

电子技术课程设计 报告 设计题目:电子秒表 院(部):物理与电子信息学院 专业班级:电子信息工程 学生姓名: 学号: 指导教师: 摘要

秒表应用于我们生活、工作、运动等需要精确计时的方面。它由刚开始的机械式秒表发展到今天所常用的数字式秒表。秒表的计时精度越来越高,功能越来越多,构造也日益复杂。 本次数字电路课程设计的数字式秒表的要求为:显示分辨率为1s/100,外接系统时钟频率为100KHz;计时最长时间为60min,五位显示器,显示时间最长为59m59.99s;系统设置启/停键和复位键。复位键用来消零,做好计时准备、启/停键是控制秒表起停的功能键。 针对上述设计要求,先前往校图书馆借阅了大量的数字电路设计方面的书籍,以及一本电子元件方面的工具书,以待查阅各种设计中所需要的元件。其次安装并学习了数字电路设计中所常用的Multisim仿真软件,在课程设计过程的电路图设计与电路的仿真方面帮助我们发现了设计电路方面的不足与错误之处。 关键字:555定时器十进制计数器六进制计数器多谐振荡器

目录 1.选题与需求分析 (1) 1.1设计任务 (1) 1.2 设计任务 (1) 1.3设计构思 (1) 1.4设计软件 (2) 2.电子秒表电路分析 (3) 2.1总体分析 (3) 2.2电路工作总体框图 (3) 3.各部分电路设计 (4) 3.1启动与停止电路 (4) 3.2时钟脉冲发生和控制信号 (4) 3.3 设计十进制加法计数器 (6) 3.4 设计六进制加法计数器 (7) 3.5 清零电路设计 (8) 3.7 总体电路图: (10) 4 结束语与心得体会 (12)

51单片机汇编秒表程序

ORG 0000H LJMP MAIN ORG 0003H LJMP INT_0 ORG 000BH LJMP T0_INT ORG 0013H LJMP INT_1 ORG 001BH LJMP T1_INT MAIN: MOV TMOD,#11H MOV TH1,#0D8H MOV TL1,#0F0H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET1 SETB ET0 SETB EX0 SETB EX1 SETB IT0 SETB IT1 SETB TR1 MOV 32H,#00H MOV R1,#80H MOV 30H,#00H LOOP: MOV A,R4 CJNE A,33,Y MOV A,R5 CJNE A,32H,Y INC 30H Y: MOV A,P3 CJNE A,#0CFH,Y1 LJMP Y2 Y1: MOV A,30H CJNE A,#01H,LOOP CLR P1^0 LCALL DELAY2 SETB P1^0 LCALL DELAY2

LJMP LOOP Y2: JNB P3^5,Y2 JNB P3^4,Y2 MOV R3,#0AH LJMP Y3 Y3: MOV R4,33H MOV R5,32H MOV A,P3 CJNE A,#0DFH,Y5 Y4:JNB P3^4,OUT JNB P3^5,Y4 INC 32H MOV A,32H CJNE A,#10,Y3 INC 33H MOV 32H,#00H LJMP Y3 Y5: MOV A,P3 CJNE A,#0EFH,Y3 Y6: JNB P3^5,OUT JNB P3^4,Y6 MOV A,32H CJNE A,#00,JJ DEC 33H MOV 32H,#09H LJMP Y3 OUT:JNB P3^5,OUT JNB P3^4,OUT MOV R5,#00H MOV R3,#00H LJMP LOOP JJ: DEC 32H LJMP Y3 INT_0: CPL TR0 RETI INT_1: MOV R6,#00H MOV R5,#00H

实验九电子秒表

实验九电子秒表 一、实验目的 1、学习数字电路中基本RS触发器、单稳态触发器、时钟发生器及计数、译码显示 等单元电路的综合应用。 2、学习电子秒表的调试方法。 二、实验原理 图形17-1为电子秒表的电原理图。按功能分成四个单元电路进行分析。 1、基本RS触发器 图形17-1中单元I为用集成与非门构成的基本RS触发器。属低电平直接触发的触发器,有直接置位、复位的功能。 它的一路输出Q作为单稳太触发器的输入,另一跟路输出Q作为与非门5的输入控制信 号。按动按钮开关K2(接地),则门1输出=1;门2输出Q=0,K2复位后Q、状态保持不变。再按动按钮开关K1;则Q由0变为1,门5开启,为计数器启动作为准备。 由1变0,启动单稳态触发器工作。 基本RS触发器在电子秒表中的职能是启动和停止秒表的工作。 2、单稳态触发器 图17-1中单元II为用集成与非门构成的微分型单稳态触发器,图17-2为各点波形图。 单稳态触发器的输入触发脉冲信号V1由基本RS触发器端提供,输出负脉冲V0通过非门加到计数器的清除端R。 静态时,门4应处于截止状态,故电阻R必须小于门的关门电阻R OFF。定时元件RC取值不同,输出脉冲宽度也不同。当触发脉冲宽度小于输出脉冲宽度时,可以省去输入微分电路的RP和C P。 单稳态触发器在电子秒表中的职能是为计数器提供清零信号。 图17-1 电子秒表原理图 3时钟发生器

图17-1中单元III为用555定时器构成的多谐振荡器,是一种性能较好的时钟源。 调节电位器RW,使在输出端3获得频率为50HZ的矩形波信号,当基本RS触发器Q=1时,门5开启,此时50HZ脉冲信号通过门5作为计数脉冲加于计数器①的计数输入端CP2。 3、计数及译码显示 二—五—十进制加法计数器74LS90构成电子秒表的计数单元,如图17—1中单元IV所示。其中计数器①接成五进制形式,对频率为50HZ的时钟脉冲进行五分频,在输出端QD 取得周期为0.1S的矩形波脉冲,作为计数器②的时钟输入。计数器②及计数器③接成8421码十进制形式,其输出端与实验装置上译码显示单元的相应输入端连接,可显示0.1~0.9秒;1~9.9秒计时。 注:集成异步计数器74LS90 74LS90是异步二—五—十进制加法计数器,它既可以作二进制加法计数器,又可以作五进制和十进制加法计数器。 图17—3为74LS90引脚排列,表17—1为功能表。 通过不同的连接方式,74LS90可以实现四种不同的逻辑功能;而且还右借助R0(1)、R0(2)对计数器清零,借助S9(1)、S9(2)将计数器置9。其具体功详述如下: (1)计数脉冲从CP1输入,Q A作为输出端,为二进制计数器。 (2)计数脉冲从CP2输入,Q D Q L Q H作为输出端,为异步五进制加法计数器。 (3)若将CP2和QA相连,计数脉冲由CP1输入,Q D、Q C、Q B、Q A作为输出端,则构成异步8421码十进制加法计数器。 (4)若将CP1与QD相连,计数脉冲由CP2输入,Q A、Q D、QC、QB作为输出端,则构成异步5421码十进制加法计数器。 (5)清零、置9功能。 a)异步清零 当R0(1)、R0(2)均为“1”;S9(1)、S9(2)中有“0”时,实现异步清零功能,即Q D QC QBQA=0000。 b)置9功能 当S9(1)、S9(2)均为“1”;R0(1)、R0(2)中有“0”时,实现置9功能,即Q D Q C QB QA =1001. 表17-1

单片机秒表实验报告

安徽科技学院机电与车辆工程学院 《电子电路课程综合实训》 验收材料 题目: 电子秒表 姓名(学号) 胡斌1609110208 李绪1609110214 王增龙1609110227 段鑫鹏 专业: 电气工程及其自动化 班级: 112班 指导教师:叶爱芹 2013 年 12 月 29日

目录 第一章单片机课程设计任务书 (1) 一、目的意义 (1) 二、设计时间、地点和班级 (1) 三、设计内容 (1) 四、参考电路图形 (2) 五、单片机的相关知识 (3) 第二章硬件设计 (5) 一、单片机简介 (5) 二、电源电路 (5) 三、晶振振荡电路 (5) 四、复位电路 (5) 五、显示电路 (6) 六、键盘电路 (6) 七、硬件主电路图设计 (7) 八、元件清单 (7) 第三章软件设计 (8) 一、软件设计概述 (8) 二、主程序流程图 (8) 三、程序中各函数设计 (8) 四、C语言主程序设计 (10) 第四章课程设计体会 (13) ..

五、单片机相关知识 本课题在选取单片机时,充分借鉴了许多成形产品使用单片机的经验,并根据自己的实际情况,选择了AT89C51。 AT89C51单片机采用40引脚的双列直插封装方式。图1.2为引脚排列图,40条引脚说明如下: 主电源引脚Vss和Vcc ①Vss接地 ②Vcc正常操作时为+5伏电源 外接晶振引脚XTAL1和XTAL2 ①XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。 ②XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。 图1.2 AT89C51单片机引脚图 控制或与其它电源复用引脚RST/VPD,ALE/PROG,PSEN和EA/Vpp ①RST/VPD 当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位在Vcc掉电期间,此引脚可接上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。 ②ALE/PROG正常操作时为ALE功能(允许地址锁存)提供把地址的低 字节锁存到外部锁存器,ALE 引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE 端可以驱动(吸收或输出电流)八个LSTTL电路。对于EPROM型单片机,在EPROM编程期间, 此引脚接收编程脉冲(PROG功能)

单片机秒表课程设计报告

一:课程设计题目 秒表/时钟计时器 二:课程设计任务与要求: 利用89C51单片机设计秒表/时钟计时器,通过LED显示器显示秒十位和个位,在设计过程中用一个存储单元作为秒计数单元,当一秒钟到来时,就让秒计数单元加1,当秒计数达到60时,就自动返回到0,重新开始秒计数。 三:设计过程: 1.设计原理:此次课程设计题目是秒表/时钟计时器,由课程设计的要求和任务,我采用的C语言编程,设计秒表要求一秒定时,采用了定时器和FOR循环来定时,其中一个软件一个硬件,会在方案论证中分析在1秒时采用的是硬件定时,即用单片机内部的定时器T0。先将时钟初始化,赋入初值50ms定时,循环20次来进行1秒定时。然后由定义的变量second来进行加一运算,然后将其值通过P1,P2口在数码管上进行显示。其中数码管的显示时,我在程序中首先定义了一个关于数码管显示的字形码定义,以便在显示时调用即可。 (1)方案论证: 方案1:在方案1中,我们所选用的是软件定时,即用for循环来定时1秒进行显示的变化。 方案2:在方案2中,采用的是硬件定时,即用单片机内部的定时器T0。先将时钟初始化,赋入初值50ms定时,循环20次来进行1秒定时。 方案比较:我们从两方面进行两种方案的比较,第一,由于此次课程设计要求是秒表,则在定时时要求比较精确,所以采用硬件的定时器定时时比较准确的。第二,由于秒表的定时程序是很小的,在利用软件定时占用的CPU并不是很多,不能显现出来,但真正大程序时会很占用资源的,所以在用定时中断过程中是非常节省资源的。综合上述两种比较,我们选用了第二种方案。 (2)创新点: a.在课程要求的基础上,我们做成的电路板上,用复位键来控制秒表计时的重新开始,即清零。 b.在以上设计的基础上,我们又重新设计了一个程序,基本原理没有变,只是将

电子秒表设计实验报告

淮阴工学院 《数字电子技术》课程实验期末考核 2014-2015学年第2学期实验名称:电子秒表电路的设计 班级: 学号: 姓名: 学院:电子与电气工程学院 专业:自动化 系别:自动化 指导教师:《数字电子技术》实验指导教师组成绩: 2015年07月

电子秒表电路的设计 一、实验目的 1 .学习数字电路中基本RS 触发器、单稳态触发器、时钟发生器及计数、译码显示等单元电路的综合应用。 2 .学习电子秒表的调试方法。 二、实验原理 图11 -1 为电子秒表的电原理图。按功能分成四个单元电路进行分析。

1.基本RS 触发器 图11 -1 中单元I 为用集成与非门构成的基本RS 触发器。属低电平直接触发的触发器,有直接置位、复位的功能。 它的一路输出作为单稳态触发器的输入,另一路输出Q 作为与非门5 的输入控制信号。 按动按钮开关K 2(接地),则门1 输出=1 ;门2 输出Q =0 ,K 2 复位 后Q 、状态保持不变。再按动按钮开关K 1 , 则Q 由0 变为1 ,门5 开启, 为计数器启动作好准备。由1 变0 ,送出负脉冲,启动单稳态触发器工作。 基本RS 触发器在电子秒表中的职能是启动和停止秒表的工作。 2. 时钟发生器 图11 -1 中单元Ⅲ为用555 定时器构成的多谐振荡器,是一种性能较好的 时钟源。 调节电位器 R W ,使在输出端3 获得频率为50HZ 的矩形波信号,当基本RS 触发器Q =1 时,门5 开启,此时50HZ 脉冲信号通过门5 作为计数脉冲加于 计数器①的计数输入端CP 2 。

图11-2 单稳态触发器波形图图11-3 74LS90引脚排列 3.计数及译码显示 二—五—十进制加法计数器74LS90 构成电子秒表的计数单元,如图11 -1 中单元Ⅳ所示。其中计数器①接成五进制形式,对频率为50HZ 的时钟 取得周期为0.1S 的矩形脉冲,作为计数器②的脉冲进行五分频,在输出端Q D 时钟输入。计数器②及计数器③接成8421 码十进制形式,其输出端与实验装置上译码显示单元的相应输入端连接,可显示0.1 ~0.9 秒;1 ~9 秒计时。 注:集成异步计数器74LS90 74LS90 是异步二—五—十进制加法计数器,它既可以作二进制加法计数器,又可以作五进制和十进制加法计数器。

基于51单片机秒表的程序设计[1]

基于51单片机秒表的程序设计 1.设计目的: (1)利用单片机定时器中断和定时器计数方式实现秒、分定时。 (2)通过LED显示程序的调整,熟悉8155与8051,8155与LED的接口技术,熟悉LED动态显示的控制过程。 (3)通过键盘程序的调整,熟悉8155与矩阵式键盘的接口技术,熟悉键盘扫描原理。 (4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。 2.设计步骤与要求 (1)要求:以8位LED右边2位显示秒,左边6位显示0,实现秒表计时显示。以4×4矩阵键盘的KE0、KE1、KE2等3键分别实现启动、停止、清零等功能。 (2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器1方式3计数,实现60秒计数。用动态显示方式实现秒表计时显示,用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能。 (3)软件设计:软件整体设计思路是以键盘扫描和键盘处理作为主程序,LED动态显示作为子程序。二者间的联系是:主程序查询有无按键,无按键时,调用二次LED动态显示子程序(约延时8ms)后再回到按键查询状态,不断循环;有按键时,LED动态显示子程序作为按键防抖延时被连续调用二次(约延时16ms),待按键处理程序执行完后,再回到按键查询状态,同时兼顾了按键扫描取值的准确性和LED动态显示的稳定性。秒定时采用定时器T0中断方式进行,60秒计数由定时器1采用方式3完成,中断及计数的开启与关闭受控于按键处理程序。由上述设计思路可设计出软件流程图如图1.1所示。 (5)程序编制:编程时置KE0键为“启动”,置KE1键为“停止”,置KE2键为“清零”,因按键较少,在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”,每条指令后紧跟着一条无条件跳转指令“AJMP”,转至相应的按键处理程序,如不是上述3个按键值则

电子电工综合实验报告

电工电子综合试验——数字计时器实验报告 学号: 姓名: 学院: 专业:通信工程

目录 一,实验目的及要求 二,设计容简介 四,电路工作原理简述 三,设计电路总体原理框图五,各单元电路原理及逻辑设计 1. 脉冲发生电路 2. 计时电路和显示电路 3. 报时电路 4. 较分电路 六引脚图及真值表

七收获体会及建议 八设计参考资料 一,实验目的及要求 1,掌握常见集成电路实现单元电路的设计过程。 2,了解各单元再次组合新单元的方法。 3,应用所学知识设计可以实现00’00”—59’59”的可整点报时的数字计时器 二,设计容简介: 1,设计实现信号源的单元电路。( KHz F Hz F Hz F Hz F1 4 , 500 3 , 2 2 , 1 1≈ ≈ ≈ ≈ ) 2,设计实现00’00”—59’59”计时器单元电路。 3,设计实现快速校分单元电路。含防抖动电路(开关k1,频率F2,校分时秒计时器停止)。4,加入任意时刻复位单元电路(开关K2)。 5,设计实现整点报时单元电路(产生59’53”,59’55”,59’57”,三低音频率F3,59’59”一高音频率F4)。 三,设计电路总体原理框图 设计框图: 四,电路工作原理简述 电路由振荡器电路、分频器、计数器、译码器、显示器、校时电路和报时电路组成。振荡器产生的脉冲信号经过十二级分频器作为秒脉冲,秒脉冲送入计数器,计数器通过“时”、“分”、“秒”译码器显示时间,将分秒计时器分开,加入快速校分电路与防抖动电路,并控制秒计

时器停止工作。较分电路实现对“分”上数值的控制,而不受秒十位是否进位的影响,在60进制控制上加入任意时刻复位电路。报时电路通过1kHz或2kHz的信号和要报时的时间信号进行“与”的运算来实现的顶点报时的,通过两个不同频率的脉冲信号使得在不同的时间发出不同的声响。 五,各单元电路原理及逻辑设计 (1)脉冲发生电路 脉冲信号发生电路是危机时期提供技术脉冲,此次实验要求产生1HZ的脉冲信号。用NE555集成电路和CD4040构成。555定时器用来构成多谐振荡器,CD4040产生几种频率为后面电路使用。 实验电路如下(自激多谐振荡电路,周期矩形波发生电路) 震荡周期T=0.695(R1+2*R2)C,其中R1=1KΩ,R2=3KΩ,C=0.047uf,计算T=228.67*10-6 s ,f=4373.4Hz产生的脉冲频率为4KHz,脉冲信号发生电路 和CD4040连接成如图所示的电路,则从Q12输出端可以得到212分频信号F1,即1Hz的信号,Q11可以得到F2即2Hz的信号提供给D触发器CP和校分信号,Q3输出分频信号500Hz,Q2输出1KHz提供给报时电路 二,秒计时电路 应用CD4518及74LS00可以设计该电路,CD4518是异步清零,所以在进行分和秒十位计数的时候,需要进行清零,而在个位计数的时候不需要清零。所以Cr2=2QcQb,Cr4=4Qc4QB。当秒个位为1001时,秒十位要实现进位,此时需要EN2=1Qd,同理分的个位时钟EN3=2Qc,分十位时钟端EN4=3Qd。因此,六十进制计数器逻辑电路如下图所示

FPGA设计的秒表设计实验报告

《FPGA原理及应用》 实验报告书 (7) 题目秒表设计 学院专业 姓名学号 指导教师 2015年10-12月 一、实验目的 掌握小型电路系统的 FPGA 设计法。 二、实验内容

用文本法结合原理图的方法设计一个秒表,并在实验箱上进行验证。秒表基本功能要求如下: (1)要求设置复位开关。当按下复位开关时,秒表清零并做好计时准备。在任何情况下只要按下复位开关,秒表都要无条件地进行复位操作,即使是在计时过程中也要无条件地进行清零操作。 (2)要求设置启/停开关。当按下启/停开关后,将启动秒表并开始计时,当再按一下启/停开关时,将终止秒表的计时操作。 (3)要求计时精确度大于秒。要求设计的计时器能够显示分(2 位)、秒(2 位)、秒(1 位)的时间。 (4)要求秒表的最长计时时间为 1 小时。 要求外部时钟频率尽量高,分频后再给秒表电路使用。 三、实验条件 1、开发软件:QuartusⅡ 2、实验设备:KX_DN8EDS实验开发系统 3、拟用芯片:EP3C55F484C8 四、实验设计 1、六进制计数器 仿真波形

2、十进制计数器 3、分频计 4、七段数码管译码器

5、100进制原理图 6、60进制原理图 7、秒表原理图

8、管脚锁定 新建好工程文件,芯片选择Cyclone Ⅲ下面的EP3C55F484C8系列。然后锁定引脚:选择Assignments → Assignments Editor命令。

9、编译文件下载 将编译产生的SOF格式配置文件下载进FPGA中。 10、FPGA实验箱接线 在KX-EDA40A++实验箱上进行连线,分配J4,J5的引脚,输入CLK(PIN_接到时钟信号,输入的EN,RST 接到电平开关L1,L2。 五、实验总结 经过本次实验,我对QuartusⅡ的使用认识更加深刻,对FPGA技术有了更深层次的认识,有助于我对以后的电子电路设计有极大帮助。

lcd1602液晶封装函数

//端口定义 #define DBPort P0 //LCD数据端口 sbit LcdRs = P2^0; sbit LcdRw = P2^1; sbit LcdEn = P2^2; sbit Lcdbf = P0^7; //LCD忙标志Busy Flag void delay(unsigned int t) //延时 { while(t--); } void LCD_Wait(void) //读忙状态 { LcdRs=0; LcdRw=1; LcdEn=1;delay(10);LcdEn=0; //下降沿 while(Lcdbf) { LcdEn=0;LcdEn=1; //仿真才需要此语句,实际硬件中不需要} } void LCD_Write(bit style, unsigned char input) //写数据1/命令0 { LcdRs=style; LcdRw=0; DBPort=input; LcdEn=1;delay(10);LcdEn=0; LCD_Wait(); } void LCD_Initial(void) //初始化LCD { LCD_Write(0,0x38); //8位数据端口,2行显示,5*7点阵 delay(300); LCD_Write(0,0x0c); //显示模式 LCD_Write(0,0x01); //清屏 LCD_Write(0,0x06); //输入模式 } void GotoXY(unsigned char x, unsigned char y) //移动光标到指定位置{ if(y==0) LCD_Write(0,0x80|x);

基于89C51单片机的秒表设计说明

《单片机原理与应用》课程设计报告基于89C51单片机的秒表设计 专业: 学号: : 2015-12-25

一、课题名称 基于89C51单片机的秒表设计 二、任务要求 1、计时围:0~59分59.59秒,整数四位数和小数两位数显示; 2、计时精度10毫秒; 3、复位按钮,计时器清零,并做好下次计时准备; 4、可以对两个对象(A、B)计时,具有启/停控制; 3、设开始、停止A、停止B、显示A、显示B、复位按钮。 三、任务分析 1、设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器,计时与显示电路和回零、启动和停表电路等。主控制器采用单片机89C52显示电路采用共阳极LED数码管显示计时时间。 2、利用89C52单片机的定时器/计数器定时和记数的原理,使其能精确计时。 3、P0口输出段码数据,P2.0-P2.4口作列扫描输出,P1.1、P3.2、P3.3、P2.5口接四个按钮开关,分别实现开始、暂停、清零和查看上次计时时间功能。 4、利用中断系统使其能实现开始暂停的功能。 四、设计方案 1、硬件方案 工作原理:计时采用定时器T0中断完成,定时溢出中断周期为1ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对毫秒计数单元进行加一,达到10次就对十毫秒位进行加一,依次类推,直到99.99秒重新复位。 再看按键的处理。这四个键可以采用中断的方法,也可以采用扫描的方法来识别。复位键和查看主要功能在于数值复位和查询上次计时时间,对于时间的要求不是很严格。而开始和停止键则是用于对时间的锁定,需要比较准确的控制。因此可以对复位和查看按键采取扫描的方式。而对开始和停止键采用外部中断的方式。

相关文档
最新文档