单片机课设201006020123-电信101-宋栋栋

更新时间:2024-03-29 07:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机原理及应用 设计说明书

题目: 电子跑表

学生姓名: 宋栋栋 学 号: 201006020123 院 (系): 电气与信息工程学院 专 业: 电子信息科学与技术 指导教师: 张玉杰

2013年 3月12

1

目录

1基本设计任务 ........................................................................................................................................................ 1

1.1 任务简介 .................................................................................................................................................... 1 1.2 设计基本要求 ............................................................................................................................................ 1 1.3 附加功能 .................................................................................................................................................... 1 2 方案论证 ............................................................................................................................................................... 1 3 硬件设计 ............................................................................................................................................................... 2

3.1 总电路图 .................................................................................................................................................... 2 3.2 单片机电路 ................................................................................................................................................ 2 3.3 数码管显示电路 ........................................................................................................................................ 3 3.4 按键电路 .................................................................................................................................................... 3 3.5 电源电路 .................................................................................................................................................... 3 3.6 蜂鸣器电路 ................................................................................................................................................ 4 4 软件设计 ............................................................................................................................................................... 4

4.1 状态分析 .................................................................................................................................................... 4 4.2 系统事件分析 ............................................................................................................................................ 4 4.3 数据存储及缓冲区分配 ............................................................................................................................ 5 4.4 各个模块流程图 ........................................................................................................................................ 7

4.4.1 数码管显示流程图 ......................................................................................................................... 7 4.4.2 按键驱动流程图 ............................................................................................................................. 8 4.4.3 应用层流程图 ................................................................................................................................. 9 4.4.4 主程序流程图 ............................................................................................................................... 10 5 小结 ......................................................................................................................................................................11 6 体会 ......................................................................................................................................................................11 7 改进意见 ..............................................................................................................................................................11 8 程序清单 ............................................................................................................................................................. 12

8.1 数码管驱动程序 ...................................................................................................................................... 12 8.2按键驱动程序 ........................................................................................................................................... 14 8.3 定时器程序 .............................................................................................................................................. 17 8.4 应用层程序 .............................................................................................................................................. 20 8.5 主函数 ...................................................................................................................................................... 24 参考文献 ................................................................................................................................................................. 26

1基本设计任务

1.1 任务简介

为指针式和数字式两种类型。指针式计时器是传统的显示方式,指示的时间精确度较低;而数字式计时器则直接用数字显示时间,读数直观,一般可精确到秒,并且具有较多的实用功能。设计要求利用单片机完成较为精确的计时操作,并能根据情况对其功能进行扩展。 1.2 设计基本要求

⑴ 系统硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,组成功能完整的系统;

⑵ 系统软件设计:根据数字电子计时器功能,完成控制软件的编写与调试; ⑶基本功能:

① 上电时显示时、分、秒为全0;

② 设置一个控制按键,按下按键,则时钟以秒为单位开始计时; ③ 运行状态下可通过控制按键使时钟暂停,同时显示已计时数值;

④ 停止状态下(已上电),按下复位按钮,时钟复位(清零),并进入下一次计时状态。 1.3 附加功能

根据实际情况自由添加附加功能,如电子时钟、万年历及语音报时等功能。

2 方案论证

如果只是显示跑表的话四位数码管满足需求,但是要显示时钟的话有时、分秒三个数据1、用滚动字幕来实现,每个一分钟切换一次显示。 2、用按键来切换显示,按键后可切换至显示时或分秒。 3、用四位数码管显示时和分,用LED灯来显示秒的显示。

考虑到使用LED灯闪烁来显示秒的走时,比较直观,且可以一次性实现时分秒的显示,所以选用第三种方案。

需要显示,而实验板上只有四位数码管。现在可以选择的方案有三种方案选择。

1

3 硬件设计

3.1 总电路图

3.2 单片机电路

2

3.3 数码管显示电路

3.4 按键电路3.5 电源电路

3

3.6 蜂鸣器电路

4 软件设计

4.1 状态分析 4.1.1 主界面状态 状态名称 主界面状态 状态名称 主菜单状态 编号 0 状态介绍 四位数码管显示时分,LED灯闪烁 转换条件 按下菜单选择键 2、主菜单状态 编号 1 状态介绍 屏幕显示系统主菜单,可以通过按键调整选中菜单项目 状态介绍 屏幕显示跑表数据 转换条件 按上下选择键;按确认/退出键; 3、跑表功能 状态名称 跑表功能状态 状态名称 系统时间设置状态 编号 2 转换条件 按下确认/退出键 4、系统时间设置 编号 3 状态介绍 屏幕显示时钟,时钟停表,按菜单选择键切换调整时或分,改位闪烁 转换条件 按下确认/退出键 4.2 系统事件分析

编号 1 2 3 4 名称 说明 按键1按下 按键2按下 按键3按下 按键4按下 设置键按下事件 上翻键按下 下翻键按下 确定/退出键短按下 4

4.3 数据存储及缓冲区分配

名称 Sys_State ClockHour ClockMinute Event_FIFO[8] Event_WrIp Keyin_Buf Keychk_Buf Keycvt_Buf Keyoldcvt_Buf Keyvlu_Buf Key_DeFlag Keychk_Time ButtonDown ScanTime_Flag WrKey_Flag 数据类型 uchar uchar uchar uchar uchar uchar uchar uchar uchar uchar uchar uchar uchar bit bit 存放位置 data data data data data data data data data data data data data bdata bdata bdata 字节数 1 1 1 8 1 1 1 1 1 1 1 1 1 1 1 0.1 功能 系统状态寄存器 时钟’时’数据寄存器 时钟’分’数据寄存器 系统事件缓冲区 写事件指针 键读入的缓冲区 键检测寄存器 键转换寄存器 旧键转换寄存器 键值寄存器 按键延时时间到标志 键时间寄存器 有键按下标志 跑表暂停开始标志 数码管刷新延时标志 写键时间标志 StWatchStartFlag bit 5

6

4.4 各个模块流程图 4.4.1 数码管显示流程图

ScanTimeFlag=1? Y 给LedDisBuff[]赋值 N ScanBit=N 给数码管位选和段选赋值 Y ScanBit=返回 7

4.4.2 按键驱动流程图

KeyInBuff N In=Chk? Y InFlag=1? Y N KeyFlag=1Y InFlag=0 Cvt=Chk N Chk=In Key_DeFlag=1 InFlag=1 Y 返回 Cvt=Old? N Old=Cvt Switch(Cvt) 写键值

8

4.4.3 应用层流程图

Switch(Current_Event) 子程序1 子程序2 子程序3 状态1 Switch(Current_Event) 子程序4 Switch(SysTate) 读取键值break 状态2 子程序5 返回 子程序6 状态3 Switch(Current_Event) 子程序7 子程序8 子程序9

9

4.4.4 主程序流程图

系统初始化 LED显示程序 按键程序 应用层程序 蜂鸣器程序

10

5 小结

本次设计主要是实现时钟以及跑表的相关功能,并且添加了时钟调整,跑表停止和复位,以及菜单选择等功能。相对原理比较简单,但是在实现时也存在着很多难点,利用标志位将每一个独立的功能相连接,最终实现一系列完整的功能。

6 体会

都说大学的学习注重的是自己自主学习能力和动手能力,相比之前做过的课程设计这一次的单片机课程设计很是不同,之前数模电课程设计是自己动手按照自己画的原理图做电路板,在这个过程中考验的是动手能力,以及专业知识的运用,而这次的课设主要任务式在电脑上编写程序,实现一定的功能,相对于数模电课设来说这次的任务在体力上轻松一些,但是不要以为它很简单,真正动手后才发现有很多困难的地方。

在老师所给的题目中我选择做的电子时钟。老师很早就把任务布置下来了,本来是要去年做的,但是由于课程一直很紧直到前几周我们才开始动手,由于以前很少自己独立动手写程序,第一次上手很难,总是不知道该怎么弄,后来请教了一些学得好的同学,他告诉我一个方法就是,先把你要做的东西的功能用笔写下来,然后把它们之间的关系搞清楚,画出流程图,然后在开始写程序,果然按照他这个方法我感觉明朗多了。虽然最终的程序有很多都是借鉴别人的,但是我在这个过程中把他们都弄懂搞明白了,在这次做课设的过程中我不仅把之前的单片机知识进行了巩固,同时也学到了很多编程的技巧,对我的编程能力有了很大的提升,还有就是同学之间的相互帮助也是十分重要的,相信这次课程设计对我以后的学习工作都会有很大的帮助!

7 改进意见

本来在做的时候还想再加上温度显示的功能,但是一加上之后就会影响到数码管的显示,数码管会出现闪烁的现象,所以就又去掉了。还有一点就是在调整时间时候对应调整的时或分位上没有闪烁,不能很好的指示是调整的是哪一位,以后需要再改进。

11

8 程序清单

8.1 数码管驱动程序

文件名:LedDisp.c

/************************************************* //函 数 名: MnLed()

//功能描述: LED数码管动态扫描扫描函数

************************************************/ #include

#define uchar unsigned char #define uint unsigned int

//========================================================== //宏定义

//========================================================== #define LedNum 4 //数码管个数 #define DataPort P1 //段口 #define ComPort P0 //位口(4 bit)

//========================================================== //定义变量

//========================================================== bit bdata ScanTime_Flag = 1; //扫描时间,根据实际情况调整 uchar data ScanBitCnt; //扫描位数 uchar data LedDispBuff[LedNum]; //4个数码管 uchar data LedDisp_menu = 0; extern uchar data StWatch_MSec; extern uchar data StWatch_Sec;

extern uchar data StWatch_MSecCnt;

//=========================================================== uchar data ClockSecond; //分计时单元 uchar data ClockMinute; //秒计时单元 uchar data ClockHour; uchar data menu = 1;

//================共阳数码管表==================//段选 uchar data CODE[]={ 0xc0,0xf9,0xa4,0xb0, // 0-0 1-1 2-2 3-3 0x99,0x92,0x82,0xf8, // 4-4 5-5 6-6 7-7 0x80,0x90,0x88,0x83, // 8-8 9-9 10-A 11-b 0xc6,0xa1,0x86,0x8e, // 12-C 13-D 14-E 15-F 0x8c,0xc1,0x89,0xc7, // 16-P 17-U 18-H 19-L 0xbf,0x91,0x92,0xf7, // 20-- 21-y 22-S 23-_ 0x8b,0xc2,0xa3,0xff // 24-h 25-G 26-o 27-空 };

//===================位选表==================================

12

uchar data ComPort_CODE[]={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f }; //数码管位显示选择

//============================================================ //子函数声明

//============================================================ void Led_DispBuff();//获得显示内容

void Led_Display();//将显示内容送去显示

//============================================================ //接口主函数

//============================================================ void Mn_LED_Driver() { if(ScanTime_Flag == 1) //事件标志位有效(扫描时间到) { ScanTime_Flag = 0; //清除标志位,然后再具体操作 Led_DispBuff(); //获得数据 Led_Display(); //把数据送去显示 } }

//============================================================ //显示缓冲区

//============================================================ void Clock(uchar a,uchar b) //时间相关显示驱动 { LedDispBuff[0]= a/10; //将分的高位存入显示缓冲区 LedDispBuff[1]= a; //将分的低位存入显示缓冲区 LedDispBuff[2]= b/10; //将秒的高位存入显示缓冲区 LedDispBuff[3]= b; }

void MenuDisp(uchar a,uchar b,uchar c,uchar d) //菜单相关显示驱动 { LedDispBuff[0]= a; //显示第一个数码管 LedDispBuff[1]= b; //显示第二个 LedDispBuff[2]= c; //显示第三个 LedDispBuff[3]= d; //显示第四个 }

void Led_DispBuff()//显示接口 { switch(LedDisp_menu) { case 0: {Clock(ClockHour,ClockMinute);break;}//时钟显示 case 1:

13

{Clock(StWatch_Sec,StWatch_MSec);break;}//跑表显示 case 2: {MenuDisp(16,20,menu,27);break;} //菜单选择显示 } }

//============================================================ //显示函数

//============================================================ void Led_Display()// { ScanBitCnt++; if(ScanBitCnt == 4)//四个led都显示了一遍 { ScanBitCnt = 0; //返回第一个led } DataPort = CODE[LedDispBuff[ScanBitCnt]]; //段选 ComPort = ComPort_CODE[ScanBitCnt];//位选 }

8.2按键驱动程序

文件名:Key.c

//============================================================ //文件名称: 按键扫描子程序 //功能说明: 直入式4键键盘

//============================================================ #include

#define uchar unsigned char #define uint unsigned int

//============常量=================== #define KeyPort P2 //按键端口 #define KeyNomber 8 //按键数目 #define KeyTime 5 //防抖定时时间 //============变量=================== uchar data KeyInBuff; uchar data KeyChkBuff; uchar data KeyTimeBuff; uchar data KeyCvtBuff; uchar data KeyOldBuff; uchar data KeyBuff[4];

uchar data ButtonDown; //按键按下标志 uchar data Key_Value;

14

bit bdata KeyInFlag; bit bdata Key_DeFlag; bit bdata Key_Flag;

extern uchar data Event_FIFO[8]; //事件缓冲区八个单元 extern uchar data *Event_WrIp; //写事件指针,指向存放空间 //===================函数声明============ void KeyIn(void); void KeyChk(void); void KeyCvt(void); void DeKeyTime(void);

//====================================== //函 数 名: MnKey() //功能描述: 按键

//============================================================ void Mn_Key() { KeyIn(); KeyChk(); KeyCvt(); }

//============================================================ //函 数 名: KeyIn()

//功能描述: 读入按键,并取反 //输入参数: Keyport //输出参数: KeyInBuff

//============================================================ void KeyIn(void) { KeyInBuff = KeyPort; KeyInBuff ^=0xff; //异或 }

//============================================================ //函 数 名: KeyChk() //功能描述: 按键防抖 //输入参数: KeyInBuff //输出参数: KeyCvtBuff

//============================================================ void KeyChk(void) { if(KeyInBuff==KeyChkBuff) //未定义的变量初值为0,有键按下就不相等 { if(KeyInFlag==0) return;

15

else { if(Key_Flag == 1) //消抖时间到在into中Key_Flag == 1 { Key_Flag = 0;//清除标志位 Key_DeFlag = 0; KeyInFlag = 0; KeyCvtBuff = KeyChkBuff;//将chk的值赋给cvt } } } else { KeyChkBuff = KeyInBuff;//将in的值赋给chk KeyInFlag = 1;

Key_DeFlag = 1; //有键按下则置位延时标志位 } }

//============================================================ //函 数 名: KeyCvt() //功能描述: 键值转换 //输入参数: KeyCvtBuff //输出参数: EventFIFO

//============================================================ void KeyCvt(void) { if(KeyCvtBuff==KeyOldBuff) return; //返回到chk函数中继续循环 else { KeyOldBuff = KeyCvtBuff; switch(KeyCvtBuff) //三次循环后cvt=0 { case 0x00: {return;} case 0x01: { ButtonDown = 1; //有键按下 *Event_WrIp=1; break; } case 0x02: { ButtonDown = 1;

16

} }

*Event_WrIp= 2; break; }

case 0x04: { ButtonDown = 1; *Event_WrIp=3; break; }

case 0x08: { ButtonDown = 1; *Event_WrIp = 4; break; } }

if(Event_WrIp==(Event_FIFO+7))//修改写事件指针 Event_WrIp=Event_FIFO; else Event_WrIp++;

8.3 定时器程序

文件名:INIT.c

/****************************************************** 文件名称:Int_Deal

功能描述:处理系统的中断事件

*******************************************************/ #include

#define uchar unsigned char #define uint unsigned int

//===========变量定义=================== extern uchar data ClockSecond ; //分计时单元 extern uchar data ClockMinute ; //秒计时单元 uint data ClockSecondCnt; //1S时间计数单元 extern uchar data ClockHour;

uchar data StWatch_MSecCnt; //秒表中的变量 uchar data StWatch_MSec; uchar data StWatch_Sec; uchar data LED_Flag = 0;

extern bit bdata ScanTime_Flag; extern bit bdata StWatchStartFlag;

17

extern bit bdata ClockStartFlag; extern bit bdata Key_DeFlag; extern bit bdata Key_Flag;

extern uchar data ButtonDown; extern uchar data BuzzerFlag; uint data buzz_1ms;

uchar data KeyScanCnt;

uchar data ClockSecLedCnt; //LED秒灯的闪烁变量 sbit ClockSecLed=P3^3; //对位的定义不用 extern

//=========================================================== //函 数 名: ISR_T0() //功能描述: T0中断函数

//=========================================================== void ISR_T0(void) interrupt 1 //时基处理函数 { TH0=0xfc; TL0=0x18; //重装1MS中断 //秒表的定时设置

//==================================== //1ms标志位

//==================================== LED_Flag++;

//==================================== //各个时间标志位

//==================================== //=======Led显示扫描标志====== if(LED_Flag == 5) //人眼识别最高频率为40HZ,所以单片机动态扫描数码

//管的频率最低为40HZ ,所有数码管扫描一遍不能超过//25ms,即扫描一个数码管时间不能超过6秒,否则闪烁

{ LED_Flag = 0; //清除标志位 ScanTime_Flag = 1; //设置标志位,扫描时间到 } if(Key_DeFlag == 1) //利用定时器给按键消抖 如果有键按下 { KeyScanCnt ++; //按键消抖时间计数 if(KeyScanCnt == 5) //给的消抖时间为5ms {KeyScanCnt = 0;Key_Flag = 1;} //清零,然后Key_Flag = 1联系到key函数中的动作 } if(ButtonDown) //有键按下则置标志位,蜂鸣器响 { ButtonDown = 0; //清除标志位 BuzzerFlag = 1; //置位新的标志位 }

18

if(BuzzerFlag) //从蜂鸣器响开始计时时间到停止响 { buzz_1ms ++; if(buzz_1ms == 100) //修改蜂鸣器响的时间 { buzz_1ms = 0; BuzzerFlag = 0; } } //========下面都是对时间的操作================= if(StWatchStartFlag==1) //秒表的相关显示 { StWatch_MSecCnt++; if(StWatch_MSecCnt==100) { //100ms时间到 StWatch_MSecCnt=0; //清除标志位 StWatch_MSec++; if(StWatch_MSec==100) //10s时间到 { StWatch_MSec=0; StWatch_Sec++; if(StWatch_Sec==100) //100s时间到 {StWatch_Sec=0;} } } } //============时钟的定时设置 ===================== if(ClockStartFlag==1) { if(ClockSecondCnt--!=0) return; //500ms时间到检测 ,在main中初始值为500ms else { ClockSecLed=~ClockSecLed; //500ms闪烁一下 ClockSecLedCnt--; //用来计数走了几个500ms,确定1s时间到 ClockSecondCnt=500; //重装500ms初值 if(ClockSecLedCnt!=0)return; //当ClockSecLedCnt=0时,说明1s时间到 else { ClockSecLedCnt=2; //重赋值,然后再有动作 ClockSecond++; //秒计数单元加1s if(ClockSecond!=59)return; //不是60秒退出 else { //++和--都是用来计时,检测是否时间到 ClockSecond=0; //是60S则秒计时单元清零

19

}

}

}

}

}

ClockMinute++; //加1分 if(ClockMinute<=59)return; else {

ClockMinute=0; ClockHour++;

if(ClockHour!=24)return; else { ClockHour=0; } }

8.4 应用层程序

文件名:App.c #include

#define uchar unsigned char #define uint unsigned int

uchar data Sys_State = 0; bit bdata ClockStartFlag = 1; sbit ClockSecLed=P3^3; uchar data KeyCtrl;

extern uchar data ClockMinute; extern uchar data ClockHour; extern uchar data Key_Value; extern uchar data LedDisp_menu; extern uchar data menu;

extern uchar data StWatch_Sec; extern uchar data StWatch_MSec; extern uchar data DotPortFlag; bit bdata StWatchStartFlag = 0; uchar data Event_FIFO[8]; uchar data *Event_WrIp=Event_FIFO; uchar data *Event_RdIp=Event_FIFO; //子程序1 应用子程序 void AppSub_1(void)

//秒表暂停信标 //系统事件缓冲区 //写事件指针 //读事件指针

20

{ LedDisp_menu = 2; Sys_State = 1; }

//子程序2 菜单选择向上(加)子程序 void AppSub_2(void) { if(menu != 2) menu++; else {menu = 1;LedDisp_menu = 0;Sys_State = 0;} }

//子程序3 确认子程序 void AppSub_3(void) { if(menu == 1) //菜单1 显示秒表 {LedDisp_menu = 1;Sys_State = 2;} if(menu == 2) //菜单2 调整时钟 { LedDisp_menu = 0;Sys_State = 3; //切换显示和状态 ClockStartFlag=0;ClockSecLed=0; //停表 } if(menu == 3) //菜单3 显示温度 {DotPortFlag = 1;LedDisp_menu = 3;Sys_State = 4;} }

//子程序4 调时子程序 计数+ void AppSub_4(void) { if(KeyCtrl == 0)//初值在main中为0 { if(ClockMinute!=59)ClockMinute++; //分钟加 else ClockMinute=0; } else if(KeyCtrl == 1) { if(ClockHour!=23)ClockHour++; //小时加 else ClockHour=0; } }

//子程序5 计数- void AppSub_5(void) { if(KeyCtrl == 0) {

21

if(ClockMinute!=0)ClockMinute--; //分钟减 else ClockMinute=59; } else if(KeyCtrl == 1) //小时减 { if(ClockHour!=0)ClockHour--; else ClockHour=23; } }

//子程序6 退出子程序 void AppSub_6(void) { if(menu == 1) {menu = 1;LedDisp_menu = 0;Sys_State = 0;} if(menu == 2) {ClockStartFlag=1;menu = 1;ClockSecLed=1;Sys_State = 0;} }

//应用层

void led_app(void) { uchar Current_Event=0;

if(Event_RdIp!=Event_WrIp) //读事件 { Current_Event=*Event_RdIp; //第几个键按下 if(Event_RdIp==(Event_FIFO+7)) Event_RdIp=Event_FIFO;//循环 else Event_RdIp++; } switch(Sys_State) //刚开始sys为0 { case 0: //初始状态 { switch(Current_Event) { case 1: {AppSub_1();break;} case 2: {break;} case 3: {break;} } break; } case 1: //菜单选择状态

22

}

}

{

switch(Current_Event) { case 1: {break;} case 2: {AppSub_2();break;} case 4: {AppSub_3();break;} }

break; }

case 2: //秒表功能状态 {

switch(Current_Event) { case 1: {break;} case 2: {StWatchStartFlag=~StWatchStartFlag;break;} case 3: {StWatch_Sec=0;StWatch_MSec=0;break;} case 4: {AppSub_6();break;} }break; }

case 3: //调整时钟状态 {

switch(Current_Event) { case 1: {if(KeyCtrl !=1)KeyCtrl++;else KeyCtrl =0;break;} case 2: {AppSub_4();break;} case 3: {AppSub_5();break;} case 4: {AppSub_6();break;} }

break; }

23

8.5 主函数

文件名:Main.c

//================================================================== //文件名称: timer

//功能说明: 利用定时器T0实现时钟功能

//================================================================== #include

#define uchar unsigned char //宏定义 #define uint unsigned int

//=========================变量========================== extern uchar data ClockSecond; //分计时单元 extern uchar data ClockMinute; //秒计时单元 extern uchar data ClockHour;

extern uint data ClockSecondCnt; //1S时间计数单元 extern uchar data ClockSecLedCnt; extern uchar data KeyCtrl; //秒表的变量

extern uchar data StWatch_MSecCnt; //秒表中的变量 extern uchar data StWatch_MSec; extern uchar data StWatch_Sec; extern uchar data LedDisp_menu;

//========================调用函数===================== void SysInit();//系统初始化 void led_app();//led应用层 void Mn_LED_Driver(); void Mn_Key(); void Mn_Buzzer();

//==================================================== //函 数 名: main()

//功能描述: 利用定时器T0实现时钟功能

//================================================================== void main(void) { SysInit(); //系统初始化 while(1) //进入主循环 { Mn_LED_Driver(); //各个子任务 数码管的驱动程序 Mn_Key(); //按键的检测驱动 led_app(); //应用层(处理任务比如 按键事件的处理,还有显示事件处理) Mn_Buzzer(); //驱动蜂鸣器 } }

24

//================================================================== //函 数 名: SysInit()

//功能描述: 初始化子程序

//================================================================== void SysInit() { //Clock中变量初始化 ClockSecLedCnt=2; //记两次数 ClockSecondCnt=500; ClockSecond=0x00; ClockMinute=14; ClockHour=13; KeyCtrl=0; //秒表中变量初始化 StWatch_MSecCnt=0; StWatch_MSec=0; StWatch_Sec=0; TMOD=0x01; TH0=0xFC; TL0=0x18; ET0=1; EA=1; TR0=1; }

//最小计数单元 //秒的初始值 //显示13:14 //秒表中的变量开始为0 //T0定时器工作方式1 //1MS中断 //开定时器T0中断 //开总中断 //启动定时器T0 25

参考文献

【1】 张玉杰.单片机原理及应用技术[M]. 北京 :北京航空航天大学出版社,2007. 【2】 张毅刚.单片机原理及应用[M]. 北京 :高等教育出版社,2010.

26

本文来源:https://www.bwwdw.com/article/uinr.html

Top