当前位置:首页 > 凌阳61单片机C语言秒表设计
辽宁工业大学汽车学院 微机原理结课论文
课程名称:微机原理 题目名称:单片机秒表设计 专业班级:2010级研究生 学生姓名:张洋
刘钊宾 朱孟恒
指导教师:石晶
一、系统功能方案
1.本设计功能概述
秒表系统设计——用凌阳SPCE061单片机设计一个3位LED数码显示“秒表”,显示时间为00.0~59.9秒,每毫秒自动加一,每十毫秒自动加一秒。同时增加按键功能:一个“复位00.0”按键KEY3(即清零),一个“暂停”按键KEY2(停止计数)和“开始”按键KEY1(开始计数)。
2.本设计难点
单片机电子秒表需要解决三个主要问题,一是有关单片机定时器;二是如何实现LED的动态扫描显示及掌握数码管的段选、位选;三是如何对键盘输入进行编程。
二、系统电路设计
1.硬件电路
图1 数码管显示原理
图2 1*8键盘电路图
图3 电源指示灯、睡眠指示灯
图4 电源电路原理图
2. 软件流程
开始 设置IOA0~IOA7为带同相的低电平输出 设置IOB0~IOB2为同相的低电平输出 设置IOA8~IOA10为带上拉的低电平输入 while 数码管显示选择
按键的扫描
三.系统软件设计
1.源程序及注释
#include
#define KEY_ALL 0xff00
static int Address[10] = {0x00bf, 0x0086, 0x00db, 0x00cf, 0x00e6, 0x00ed, 0x00fd, 0x0087, 0x00ff, 0x00ef};
static int b[10] = {0x003f, 0x0006, 0x005b, 0x004f, 0x0066, 0x006d, 0x007d, 0x0007, 0x007f, 0x006f};
int temp,bai,shi,ge,key;
unsigned int GetKey(void);
void display( int bai, int shi, int ge); void delay( int z); void keyscan(void); main() {
*P_IOA_Attrib = 0x00ff; //设置A口低8位为同向低输出,控制数码管的显示状态
*P_IOA_Dir = 0x00ff; //设置A口高8位为同向高输入,获取按键的状态值 *P_IOA_Data = 0xff00;
*P_IOB_Attrib = 0x00ff; //初始化IOB0~IOB2端口为同向低输出,控制数码管的位选
*P_IOB_Dir = 0x00ff; *P_IOB_Data = 0x0000;
*P_TimerA_Ctrl=C_SourceA_8192Hz+C_SourceB_1; //设置定时器TimerA:8192Hz *P_TimerA_Data=0xfccc; //定时时间为0.1s
*P_INT_Ctrl=C_IRQ1_TMA; temp=0; while(1) { if(GetKey()==0x0100) //获取键盘值
{
delay(10); if(GetKey()==0x0100)
__asm(\ //安装定时
}
else if(GetKey()==0x0200)
asm(\ //关闭定时器
else if(GetKey()==0x0400) temp=0;
bai=temp/100; //给三位数码管赋值 shi=temp0/10;
ge=temp;
if(temp==600) // 累加到600后清零
temp=0;
共分享92篇相关文档