如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
一、课程设计的目的:1.增进对单片机的感性认识,加深对单片机理论方面的理解。2.掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、串行口通讯等。3.了解和掌握单片机应用系统的软/硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。二、课程设计题目:电子秒表设计一个电子秒表,该秒表在一个按键K控制下工作,当该按键K第一次按下时,秒表开始计数;第二次按下时,秒表停止计数;第三次按下时,秒表清零。课程设计实验板流程图开始按键K第一次按下按键K第二次按下按键K第三次按下秒表计数秒表停止计数秒表清零主程序结束程序程序中:nn是主函数中的延时循环变量,同时也是中断服务程序中的局部静态变量;kk是按键值;state是状态变量;t0是随时定时器中断次数递增的变量。P3.0引脚接按键K(n0);P2.0~P2.2引脚连接的LED灯显示状态。#include"AT89X51.h"Unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsignedcharn0;unsignedcharkk=8,t0=0,state=0;voidmain(){unsignedintnn;TMOD=0x01;//定时器T0,工作方式1TH0=0x3c;//设置初值0x3cb0=65535-50000,50ms中断一次TL0=0xb0;TR0=1;//启动定时器T0ET0=1;//允许定时器T0中断EA=1;//开总中断while(1){P3=0xff;if(P3_0==0)//如果P3.0引脚连接的按键K按下{for(nn=0;nn<1000;nn++)//循环语句延时,消除抖动if(P3_0==0){n0=1;kk=0;}//如果按键还在按下状态,则n0=1,kk=0;else{n0=0;}//否则n0=0,kk=8while(!P3_0);//等待按键抬起}P1=table[t0/10];//P1口连接的数码管显示t0的高位P0=table[t0%10];//P0口连接的数码管显示t0的低位switch(state){case0://状态0(清零)P2_0=0;P2_1=1;P2_2=1;//P2.0连接的LED灯亮if(n0==1)state=1;//如果按键K按下,进入状态1break;case1://状态1(计数)P2_0=1;P2_1=0;P2_2=1;//P2.1=0相连的LED灯亮if(n0==1)state=2;//如果按键K按下,进入状态2break;case2://状态2(保持)P2_0=1;P2_1=1;P2_2=0;//P2.2=0相连的LED灯亮if(n0==1)state=0;//如果按键K按下,进入状态0break;}n0=0;//键值变量清零}}voidtimer0()interrupt1//定时器T0中断服务程序{staticunsignedcharnn;//设置局部静态变量TH0=0x3c;//重置初值TL0=0xb0;nn++;if(nn==20)//中断20次,为1S{nn=0;if(state==0)//状态0,清零,使t0=0t0=0;if(state==1)//状态1,计数,使t0加1t0=t0+1;if(state==2)//状态2,保持,使t0等于t0t0=t0;if(t0>100)t0=0;}}