教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

89C51单片机课程设计之秒表设计实验报告 - 图文(2)

来源:网络收集 时间:2026-09-02
导读: 2.2软件方案设计 此次选用C51来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软

2.2软件方案设计

此次选用C51来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软件流程图图如图 3所示:

图3

按键的扫描及处理 数码管显示选择 While 开始 系统初始化 3 程序编写的流程及课程设计效果 3.1 源程序及注释

/*----------------------------------------------- 名称:数码管显示,按键控制秒表 论坛:www.doflye.net 编写:shifang 日期:2009.5 修改:无

内容:中断按键控制,数码管显示,中断0控制计时和停止,中断1清零 ------------------------------------------------*/

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

unsigned int msecond,second;//定义全局变量 bit GoFlag;//定义停止,计时标志

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 sbit KEY=P3^2; 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 DelayUs2x(unsigned char t);//函数声明 void DelayMs(unsigned char t);

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

/*------------------------------------------------ 主函数

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

void main (void) {

unsigned char num=0;

EX0=1; //外部中断0开 IT0=1; //IT1=0表示边沿触发 EX1=1; //外部中断1开 IT1=1; //IT1=1表示边沿触发 Init_Timer0();

while (1) //主循环 {

TempData[0]=dofly_DuanMa[second/10];//分解显示信息,如要显示68,则

68/10=6 68=8

TempData[1]=dofly_DuanMa[second];

TempData[2]=0x40;// \

TempData[3]=dofly_DuanMa[msecond/10];//分解显示信息,如要显示68,则

68/10=6 68=8

TempData[4]=dofly_DuanMa[msecond];

//主循环中添加其他需要一直工作的程序

} }

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

输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显

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

Num表示需要显示的位数,如需要显示99两位数值则该值输入2 ------------------------------------------------*/ void Display(unsigned char FirstBit,unsigned char Num) {

static unsigned char i=0;

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

LATCH1=1; //段锁存 LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0;

i++;

if(i==Num) }

/*------------------------------------------------ 定时器初始化子程序

i=0;

------------------------------------------------*/ void Init_Timer0(void) {

TMOD |= 0x01; 器时不受影响

//使用模式1,16位定时器,使用\符号可以在使用多个定时

//TH0=0x00; //给定初值 //TL0=0x00;

EA=1; //总中断打开 (总中断控制开关) ET0=1; //定时器中断打开 (允许中断0的发生) TR0=1; //定时器开关打开 (定时器T0开始工作) }

/*------------------------------------------------ 定时器中断子程序

------------------------------------------------*/ void Timer0_isr(void) interrupt 1 {

static unsigned char num; TH0=(65536-2000)/256; TL0=(65536-2000)%6;

Display(0,8); if(GoFlag) { num++; if(num==5) {

num=0;

//重新赋值 2ms

msecond++;

if (msecond==100)//100进1

…… 此处隐藏:744字,全部文档内容请下载后查看。喜欢就下载吧 ……
89C51单片机课程设计之秒表设计实验报告 - 图文(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/444668.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)