单片机秒表系统设计课程设计 - 图文(2)

2019-04-10 10:16

共12页 第6页

图3 系统设计电路图

四、软件设计分析

程序流程图:

共12页 第7页

手动开关 程序开始 对定时器/计数器初始化始化 开中断并 启动定时器 定时器溢出中断 对定时器重新赋值 进行加一操作后重新计算时间 往P0口和P2口送显示时间 数码管显示 判断P3^4口是否有低电平信号 否 否 判断P3^7口是否有低电平信号 是 开始、暂停或者继续 是 计数置零 中断返回主函数

共12页 第8页

实验程序:

#include {sbit sta_end=P3^4; sbit reset=P3^7;

unsigned char code table0[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char code table1[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90};

/*声明second10用于计数十分之一秒变化,second1用于记录秒的个*/ /*位,second2用于记录秒的十位*/

unsigned int second10,second1,second2; bit bdata flag;

/*以下是设置延时功能的函数*/

void delay() { unsigned char i,j; for(i=90;i>0;i--) for(j=200;j>0;j--); } }

/*以下是设置时间的函数*/ void setTime() { second10++;

if(second10==10) /*当十分之一秒计数到十后从零重新计时*/ {

second10=0; /*同时秒计时个位加一*/ second1++;

if(second1==10) /*当秒计数个位到十后从零重新计时*/ {

second1=0;

second2++; /*同时秒计时十位加一*/ if(second2==6) second2=0; } } }

/*以下是向LED管输数据并使之显示的函数*/

void dispact() {

共12页 第9页

P3=0xfe; P0=table1[second1]; delay(); P3=0xfd;

P0=table1[second2]; delay();

P2=table0[second10]; }

/*以下是设置时间函数和输数据函数被此函数调用实现,利用定时器中断*/ /*十分之一秒刷新一次,实现十分之一秒进一*/ Timer0 () interrupt 1 using 1 {

TH0 = (65535 - 50000)/256; TL0 = (65535 - 50000)%6; if(flag) setTime(); dispact(); }

void main(void) {

TMOD = 0x01;

TH0 = (65535 - 50000)/256; /*定时器赋初值*/ TL0 = (65535 - 50000)%6; flag = 0;

EA = 1; /*cpu开中断*/ TR0 = 1; /*利用定时器0*/ ET0 = 1; /*外部中断允许*/ do {

if(!sta_end) {

if(flag == 0) flag = 1;

else flag = 0; }

if(!reset) /*复位设置,全部清零*/ {

flag = 0;

second10 = 0; second1 = 0; second2 = 0;

共12页 第10页


单片机秒表系统设计课程设计 - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《液压传动》习题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: