傻大方


首页 > 学习 >

89|89C51单片机课程设计之秒表设计实验报告( 二 )



按关键词阅读: 设计 报告 实验 C51 89 课程设计 单片机 秒表


配置键盘和显示器一般都 没有统一的规定 , 有的系统功能复杂 , 需输入的信息和显示的信息量大 , 配置的键盘和显示器 功能相对强大 , 而有些系统输入/输出的信息少 , 这时可能用几个按键和几个 LED 指示灯就可 以进行处理了 。
在单片机应用系统在中配置的键盘可以是独立键盘 , 也可能是矩阵键盘 。
图 2 系统硬件结构框 2 个独立 式的按键 电源指示 灯 电源开关 4 个数码 管显示 STC89C52 RC 此次选用 C51 来编程 , 首先要有初始化程序 , 通过初始化程序 , 将对主程序所用到的变量、 常量以及各个参数和所调用的子函数定义 。
其次还有显示程序、按键 。

8、扫描及处理程序、时钟程序 和倒计时程序 , 系统软件流程图图如图 3 所示: 3 3 程序编写的流程程序编写的流程及课程设计效果及课程设计效果 3.13.1 源程序及注释源程序及注释 /*- 名称:数码管显示 , 按键控制秒表 编写:shifang 修改:无 开始 系统初始化 While (1) 数码管显示选择 按键的扫描及处理 图 3 内容:中断按键控制 , 数码管显示,中断 0 控制计时和停止 , 中断 1 清零 -*/ #include /包含头文件 , 一般情况不需要改动 , 头文件包含特殊功能寄 存器的定义 unsigned int msecond,second;
/定义全局变量 bit GoFlag;
/定义 。

9、停止 , 计时标志 #define DataPort P0 /定义数据端口 程序中遇到 DataPort 则用 P0 替换 sbit LATCH1=P22;
/定义锁存使能端口 段锁存 sbit LATCH2=P23;
/ 位锁存 sbit KEY=P32;
unsigned char code dofly_DuanMa10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;
/ 显示段码值 09 unsigned char code dofly_WeiMa=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0。

【89|89C51单片机课程设计之秒表设计实验报告】10、xbf,0 x7f;
/分别对应相应的 数码管点亮,即位码 unsigned char TempData8;
/存储显示值的全局变量 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 开 IT 。

11、0=1;
/IT1=0 表示边沿触发 EX1=1;
/外部中断 1 开 IT1=1;
/IT1=1 表示边沿触发 Init_Timer0();
while (1) /主循环 TempData0=dofly_DuanMasecond/10;
/分解显示信息 , 如要显示 68 , 则 68/10=6 68%10=8 TempData1=dofly_DuanMasecond%10;
TempData2=0 x40;
/ - TempData3=dofly_DuanMamsecond/10;
/分解显示信息 , 如要显示 68 ,则 68/10=6 68%10=8 TempData4=dofly_DuanMamsec 。

12、ond%10;
/主循环中添加其他需要一直工作的程序 /*- 显示函数 , 用于动态扫描数码管 输入参数 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_WeiMai 。

13、+FirstBit;
/取位码 LATCH2=1;
/位锁存 LATCH2=0;
DataPort=TempDatai;
/取显示数据 , 段码 LATCH1=1;
/段锁存 LATCH1=0;
i+;
if(i=Num) i=0;
/*- 定时器初始化子程序 -*/ void Init_Timer0(void) TMOD |= 0 x01;
/使用模式 1 , 16 位定时器 , 使用|符号可以在使用多个定 时器时不受影响 /TH0=0 x00;
/给定初值 /TL0=0 x00;
EA=1;
/总中断打开 (总中断控制开关) ET0=1;
/定时器中断打开 (允许中断 0 的发生) TR0=1;
/定 。

14、时器开关打开 (定时器 T0 开始工作) /*- 定时器中断子程序 -*/ void Timer0_isr(void) interrupt 1 static unsigned char num;
TH0=(65536-2000)/256;
/重新赋值 2ms TL0=(65536-2000)%256;
Display(0,8);
if(GoFlag) num+;
if(num=5) num=0;
msecond+;
if (msecond=100)/100 进 1 msecond=0;
second+;
/秒加 1 if(second=100) second=0;
/*- 外部中断 0 程序 - 。

15、*/ void ISR_INT0(void) interrupt 0 if(!KEY) /如果检测到低电平 , 说明按键按下 DelayMs(20);
/延时去抖 , 一般 10-20ms if(!KEY) /再次确认按键是否按下 , 没有按下则退出 GoFlag=!GoFlag;
/利用外部中断打开和关闭定时标志 用于开始和停止 计时 /主循环中添加其他需要一直工作的程序 /*- 外部中断 1 程序 -*/ void ISR_INT1(void) interrupt 2 if(GoFlag=0)/停止时才可以清零 CLR();
/*- 数值清零 -*/ void CLR(void) second=0;


16、/利用外部中断清零 msecond=0;


稿源:(未知)

【傻大方】网址:/a/2021/0813/0023653608.html

标题:89|89C51单片机课程设计之秒表设计实验报告( 二 )


上一篇:房地产|房地产在建工程抵押贷款合同文书-范例

下一篇:参观|参观湿地博物馆