99秒倒计时汇编程序
(601)单片机99倒计时
《单片机》课程设计说明书专业班级:自动化(四)姓名:陶青涂卫根何磊王林坤学号:080310252 080310251 080310216 080310201指导教师:郭玉设计时间: 2012/12/17物理与电气工程学2012 年12 月17日摘要随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
目的:(1)初步掌握单片机控制功能的基本使用方法及基本硬件电路的工作原理,包括设计任务,设计题目的方案论证。
通过查阅资料,器件选择,确定方案,写出总结报告。
(2)培养一定的自学能力和独立分析问题、解决问题的能力。
包括学会自己分析解决问题的方法,对设计中遇到的问题,能通过独立思考、查阅工具书、参考文献,寻找答案。
(3)通过严格的科学训练和工程设计实践,逐步树立严肃认真、一丝不苟、实事求是的科学作风,并培养自己在实际工作中应具有的生产观点,经济观点和全局观点。
方法:利用开发板和keil软件经过烧写程序在数码管上实现倒计时显示结果:将程序烧写进开发板,99秒倒计时,按下s3键实现暂停与启动结论:在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
关键词ATM89C52;共阴数码管;keil软件;晶体振荡器;目录1 主要元器件介绍 (1)1.1 AT89C52芯片概述 (2)1.2 LED数码管显示器概述 (3)1.3 其他元器件介绍及参数 (4)2 单片机的最小系统与复位电路 (5)2.1 最小系统 (6)2.2 复位电路设计 (7)2.3 显示电路设计 (8)2.4 总体硬件电路设计 (9)3 keil软件 (10)4程序框图 (11)5 软件程序 (12)6教材及参考书 (13)7 感悟 (14)1 主要元器件介绍1.1 ATM89C52芯片概述ATM89C52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。
plc 99秒 倒计时
《可编程序控制器原理及应用》“倒计时软件设计”说明书一、设计目的:(1)使学生运用《可编程序控制器原理及应用》课程中的基本理论,正确设计一个典型案例的控制系统;针对控制目标,编写下位机PLC程序,设计上位机触摸屏控制界面,解决好通信问题,实现上下位机联合控制。
(2)培养学生自学软件的能力,逻辑思维的能力。
(3)综合训练学生应用多款软件设计用户程序,仿真验证案例准确性的能力。
二、设计要求:(1)按任务时序设计下位机PLC程序(2)设计上位机触摸屏控制界面(3)上下位机联合仿真三、梯形图:下面是已经编好的经过转换梯形图四、触摸屏软件GT-designer2的使用:利用此软件制作触摸屏,如下图五、利用GTsimulator2进行仿真:先在GX-developer中启动梯形图逻辑测试,然后用GTsimulator打开用GTdesigner制作的触摸屏,保证三个软件前后设置一致。
如下图:六、总结通过这次的设计使我认识到本人对PLC方面的知识知道的还是很浅薄的,对于书本上的很多知识还不能灵活运用。
通过本次的课题设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。
同时也锻炼了自己独立思考问题的能力和通过查看相关资料来解决问题的习惯。
虽然这只是一次简单的课程设计,但通过这次课程设计我们了解了课程设计的一般步骤,和设计中应注意的问题。
在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的PLC数字时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。
在这次设计过程中,我也对word、画图等软件有了更进一步的了解,这使我在以后的工作中更加得心应手。
单片机课程设计(99s计时)
#include<reg52.h>unsigned char time;unsigned char code ss[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(unsigned int t);void display(unsigned char num);void timer_init(void);void INT_init(void);sbit weixuan_1=P2^0;sbit weixuan_2=P2^1;void main(){time=0;weixuan_1=1;weixuan_2=1;INT_init( );timer_init( );while(1){display(time);}}void display(unsigned char num){unsigned char i,j;if(num<10){weixuan_1=0;weixuan_2=1;P0=ss[num];}else{for(i=0;i<20;i++){weixuan_1=0;weixuan_2=1;P0=ss[num%10];}delay(20);P0=0XFF;for(j=0;j<50;j++){weixuan_1=1;weixuan_2=0;P0=ss[num/10];}}}void delay(unsigned int t){unsigned int i;for(i=t;i>0;i--){;}}void INT_init(void){EX0 = 1;IT0 = 1;EX1 = 1;IT1 = 1;EA = 1;}void interrupt0_handler(void)interrupt 0 {TR0=~TR0;}void interrupt1_handler(void)interrupt 2 {time=0;INT_init( );timer_init( );}void timer_init(void){TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;TR0=1;ET0=1;}void timer0(void)interrupt 1{unsigned char n;TH0=(65536-50000)/256;TL0=(65536-50000)%256;n++;if(n==20){time++;n=0;if(time==100){time=0;}}}//从TLC1543读取采样值,形参port是采样的通道号unsigned int read1543(unsigned char port) {unsigned int ad=0;unsigned int i;unsigned int al=0,ah=0;_CS=0;CLOCK=0;port<<=4;for (i=0;i<4;i++) //把通道号打入1543{D_IN=(bit)(port&0x80);CLOCK=1;CLOCK=0;port<<=1;}for (i=0;i<6;i++) //填充6个CLOCK{CLOCK=1;CLOCK=0;}_CS=1;delay(100);_CS=0; //等待AD转换CLOCK=0; for (i=0;i<2;i++) //取D9,D8{CLOCK=1;ah<<=1;if (D_OUT){ah +=0x01;}CLOCK=0;}for (i=0;i<8;i++) //取D7--D0{CLOCK=1;al <<= 1;if (D_OUT){al +=0x01;}CLOCK=0;}ah=ah*256;ad=ah+al;_CS=0;_CS=1;return(ad);}unsigned char read_keyboard(){hangxian=0x00;key_value=(liexian&0x0f);if(key_value!=0x0f){delay(10000);if(key_value!=0x0f){hangxian=0x0e;delay(2);if((liexian&0x0f)==0x0f){hangxian=0x0d;delay(2);if((liexian&0x0f)==0x0f){hangxian=0x0b;delay(2);if((liexian&0x0f)==0x0f) {hangxian=0x07;delay(2);}}}}key_value=liexian&0x0f;while((liexian&0x0f)!=0x0f);delay(10000);key_value=key_value<<4; switch(key_value|(hangxian&0x0f)){case 0xee:key_return =0;break;case 0xde:key_return =1;break;case 0xbe:key_return =2;break;case 0x7e:key_return =3;break;case 0xed:key_return =4;break;case 0xdd:key_return =5;break;case 0xbd:key_return =6;break;case 0x7d:key_return =7;break;case 0xeb:key_return =8;break;case 0xdb:key_return =9;break;case 0xbb:key_return =10;break;case 0x7b:key_return =11;break;case 0xe7:key_return =12;break;case 0xd7:key_return =13;break;case 0xb7:key_return =14;break;case 0x77:key_return =15;break;}}return key_return;}矩阵键盘核心程序#include<at89x52.h>#include<absacc.h>#include<intrins.h>#include<lcd.h>#include<AD.h>unsigned char aaa[]={"ADzhuanhuantest"};unsigned char ad_result[10]={0};unsigned char temp[4]={0};float jizhun_AD=2.51;unsigned int ad_data=0;unsigned int ad_v=0;unsigned int ad_bak=6000;unsigned int count;void shuzhichuli(void);void main(void){PORT=0x03;lcd_init( );lcd_clear( );while(1){count++;ad_data=read1543(0);ad_v=(unsigned long int)ad_data*2510/1024;if((ad_v!=ad_bak)&&(count>300)){count=0;shuzhichuli();lcd_string(aaa,1);lcd_string(ad_result,2);ad_bak=ad_v;}}}void shuzhichuli(void){unsigned int temp0,temp1;unsigned int i;unsigned int w;temp1=ad_v;for(i=0;i<4;i++){temp0=temp1%10;temp1=temp1/10;temp[i]=temp0;}for(w=0;w<5;w++){if(w==0){ad_result[w]=temp[3]+48;}else if(w==1){ad_result[w]='.';}else{ad_result[w]=temp[4-w]+48;}}}。
99秒计时器课程设计
99秒计时器课程设计一、课程目标知识目标:1. 学生理解99秒计时器的原理和工作方式,掌握时间计算的基本方法。
2. 学生掌握计时器的编程思想,学会运用所学知识解决实际问题。
3. 学生了解计时器在日常生活和科技领域的应用,拓展知识视野。
技能目标:1. 学生能够运用所学知识,独立设计并编写一个99秒计时器程序。
2. 学生通过实际操作,提高动手实践能力和问题解决能力。
3. 学生学会与他人合作,培养团队协作能力和沟通表达能力。
情感态度价值观目标:1. 学生培养对编程的兴趣和热情,激发创新思维。
2. 学生在课程学习中,树立自信心,勇于面对挑战。
3. 学生认识到科技发展对生活的影响,增强社会责任感和使命感。
本课程针对小学高年级学生,结合课程性质、学生特点和教学要求,将目标分解为具体的学习成果。
课程旨在帮助学生掌握计时器相关知识,培养编程思维和动手实践能力,同时激发学生对科技的兴趣,培养良好的情感态度价值观。
为实现课程目标,后续教学设计和评估将围绕知识掌握、技能提升和情感培养三个方面展开。
二、教学内容本章节教学内容以《信息技术》教材中“计算机编程”章节为基础,结合课程目标,组织以下内容:1. 计时器原理:讲解计时器的工作原理,引导学生理解时间计算的基本方法。
- 教材章节:第二章第三节“时间与计时器”2. 编程思想:介绍编程中的顺序结构、循环结构和条件结构,为学生编写计时器程序打下基础。
- 教材章节:第三章“编程基础”3. 99秒计时器编程实践:指导学生运用所学编程知识,设计并编写一个99秒计时器程序。
- 教材章节:第四章“实践项目”4. 计时器应用:分析计时器在日常生活和科技领域的应用,拓展学生知识视野。
- 教材章节:第五章“计算机应用实例”教学内容安排和进度如下:第一课时:计时器原理及编程思想学习。
第二课时:编写99秒计时器程序,进行实践操作。
第三课时:分析计时器应用,总结课程知识。
教学内容确保科学性和系统性,以培养学生编程思维和实践能力为核心,注重知识的应用和拓展。
单片机99S倒计时课程设计
if(temp!=0x0f) //判断是否有键按下
{
delayms(10); //延时,消除抖动
if(temp!=0xf0)//判断是否有键按下
{
temp=P1; //重新读取P1口
switch(temp)//判断哪个键按下
{
case 0xeb:
(4)中断子函数:
void T0_time() interrupt 1//定时器0中断函数
{
TH0=(65536-50000)/256;//重装初值
TL0=(65536-50000)%256;
numt0++;//50ms中断一次
}
(5)初始函数:
void init() //初始化函数
{
TMOD=0x01;//设置定时器0为工作方式1(0000 0001)
#define uint unsigned int
sbit sw=P0^6;//十位位选
sbit gw=P0^7;//个位位选
sbit led=P3^7;//LED灯
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//编码定义
二、设计的实现过程······································3
1、矩阵电路····················································4
2、数码显示和驱动电路·······································4
99秒表程序
99秒表程序99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。
计时误差小于0.5秒,显示稳定。
/******99 秒表*******/、/**---------------------------------最新文件信息--------------------------------------------------- 功能:99 秒表作者:单位:时间:描述:晶振11.0952MHz;数码管采用共阴;**-------------------------------------------------------------------------------------------------******************************************************************* ***********/#includereg52.h#define uint unsigned int#define uchar unsigned charuchar code table_duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f};//数码管显示0~9;/******单片机接口***********/99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。
计时误差小于0.5秒,显示稳定。
sbit key=P3^5;//按键#define duanma P0//段码#define weima P2//位码/******全局变量************/uchar miao=0;//秒uchar flag=0;//秒中间变量uchar keynum=0;//按键次数bit key_flag=0;//按键标志/*****中断初始化**********/void InitTimer0(){TMOD = 0x01;//工作方式TH0 = 0x4C;//高8 位TL0 = 0x00;//低8 位EA = 1;//总中断ET0 = 1;//允许定时器0 中断TR0 = 0;//启动定时器0}/**********延时函数**********功能:延时若干ms入口参数:t出口参数:无99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。
99秒倒计时+按键控制详解
江苏建筑职业技术学院课程设计报告课程名称:单片机设计与实训设计题目:秒计时系别:信息电子工程学院班级:电子10-1学号:1050213127姓名:周中楠指导教师: 刘天飞、刘燎原摘要:本系统讨论了简单的倒计时器的设计与制作,最大倒计时时间是99秒,最小单位精确到秒。
是利用定时器和计数器的原理将倒计时过程显示在LED数码管上。
此系统是基于AT89S52单片机控制,外加数码管显示倒计时时间,并且利用按键来进行倒计时时间的设定。
当倒计时时间倒计时为0时,蜂鸣器就会发出报警声。
首先我们先做的是99秒倒计时至0时,在设计的Proteus中进行仿真,数码管显示倒计时,蜂鸣器就会发出声音。
其中包括有数码管延时程序,中断定时程序。
其次我们设置键盘扫描程序,设置键盘的按键有13,14,15键分别为暂停/开始、设置、重新开始。
根据题目要求编写程序,一步步的编写程序。
定义13按键用count1来控制是暂停还是开始;14按键在暂停的情况下按下(即falg_zt=1时)才可以设置时间;15按键按下开始重新开始。
然后分别在采用软件程序进行译码,在Proteus中仿真实现功能要求。
关键词:单片机(AT89S52);LED数码管显示器;keil C;proteus仿真软件;晶体振荡器目录第1节前言 .................................................. 错误!未定义书签。
第2节方案选择 ................................................................................ 第3节硬件电路 . (12)第4节系统的软件设计 (8)第5节软硬件联调.................................................. (10)第6节总结………………………………………………………第7节致谢………………………………………………………参考文献附录第1节前言在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。
嵌入式实训程序99秒倒计时
嵌入式实训程序99秒倒计时;*********说明**************;*输入PE6为暂停/继续键 *;*输入PE7为时间设置键 *;*输出PA0为数据线 *;*输出PA1为时钟线 *;*输出PA2为蜂鸣器 *;***************************PCONA EQU 0X01D20000PDATA EQU 0X01D20004PCONE EQU 0X01D20028PDATE EQU 0X01D2002CPUPE EQU 0X01D20030AREA MININS,CODE,READONLYENTRYCODE32MAIN BL INITBL WORDCOPYLOOP3LDR R0,=CURRENTVALUEBL DISPLAYBL DELAYBL KEYLDR R0,=VALUE ;获得value的地址LDR R0,[R0] ;获得value的数据;************ 调秒************************************************TST R0,#0X80BLEQ SET_TIME;*********** 暂停/继续**************************************************TST R0,#0X40 ;测试PE6暂停键是否为0BLNE SUBMIN ;如果PE6是为1(没有按键)z=0则执行SUBMIN函数调用;********** ***********************************************LDR R2,=CURRENTVALUELDR R3,[R2]CMP R3,#0X0 ;判断是否为零BNE LOOP3 ;不为零时跳转至LOOP3LDR R0,=CURRENTVALUEBL DISPLAY ;显示零DISPLDR R1,=PDATALDR R2,[R1]ORR R2,R2,#0X4;蜂鸣器响STR R2,[R1]LDR R0,=PCONELDR R1,=0X5555STR R1,[R0] ;配置PE口为输出口LDR R3,=0X5LDR R0,=PDATELOOP4 LDR R1,=0XF0STR R1,[R0] ;让PE6.PE7 为高电平灯灭;BL DELAYLDR R1,=0X0FSTR R1,[R0] ;让灯亮;BL DELAYSUBS R3,R3,#0X1BNE LOOP4 ;闪烁5次B MAIN;********************* 延时函数delay ********************************DELAYSTMFD SP!,{R0,LR}LDR R0,=0X1LOOP SUBS R0,R0,#1BNE LOOPLDMFD SP!,{R0,PC};********************* SUBMIN函数*********************************SUBMINSTMFD SP!,{R0,R1,LR}LDR R0,=CURRENTVALUELDR R1,[R0] ;R0=CURRENTVALUESUBS R1,R1,#1 ;AND R2,R1,#0XF ;CMP R2,#0XF ;SUBEQ R1,R1,#0X6 ;bcd码调整STR R1,[R0] ;LDMFD SP!,{R0,R1,PC};*********************** 初始化函数init****************************INITSTMFD SP!,{R1,R2,LR}LDR R1,=PCONALDR R2,=0X0STR R2,[R1] ;配置PA为输出口LDR R1,=PDATALDR R2,=0X0STR R2,[R1] ;PA的数据口为零LDR R1,=PCONELDR R2,=0X0STR R2,[R1] ;配置PE口为输入口LDR R1,=PUPELDR R2,=0X0STR R2,[R1] ;配置PE口的上拉电阻LDMFD SP!,{R1,R2,PC};************************* 显示函数display ************************DISPLAYSTMFD SP!,{R1,R2,R3,R6,LR}MOV R6,#0X10 ; 移位的计数器的初值LDR R1,[R0] ;R1获得CURRENTVALUE的值AND R0,R1,#0XF ;获得R1的个位数AND R2,R1,#0XF0 ;获得R!的十位数MOV R2,R2,LSR #4LDR R1,=CODINGMOV R0,R0,LSL#2LDR R0,[R1,R0] ;R0=R1+R0个位数的codingMOV R2,R2,LSL#2LDR R2,[R1,R2] ;R2=R1+R2十位数的codingMOV R1,R2,LSL#8 ;把十位数的coding放入R1的15~8位ORR R1,R1,R0 ;把个位数的coding放入R1的7~0位LDR R2,=PDATALOOP1 MOV R3,#0 ;STR R3,[R2] ;将 PA1引脚clk拉为低电平MOV R5,R1BIC R5,R5,#0X6 ;将PA1。
(完整word版)00-99秒倒计时器程序及仿真
题目一:秒计时器功能要求:1.系统上电,数码管显示“99”.2.每隔1秒,数码管显示减1,减小到“00”后,数码管显示“00”,同时继电器开启。
3.按键的定义如下:“暂停/开始”按键S13:当S13按下时,秒表计时停止,数码管显示当前数值,再次按下时恢复计时。
“设置”按键S14:当停止计时时,按下S14键,可以设置秒数。
按键S1-S10分别对应数字0-9,先输入数字为十位数,后输入数字为个位数,若输入数字大于99,数码管显示“99”。
设置结束后,按下S13键启动计时。
“重新开始”按键S15:当S15按下时,数码管显示为“99”,秒表从新开始计时。
#include<reg51.h>#include<intrins.h>unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned char code jp[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};unsigned char a[2]={0,0};unsigned char int_time;unsigned char second=99;unsigned char c;bit zt;bit sz;unsigned char count;unsigned char y;unsigned char x;unsigned char count2;//函数功能:数码管动态扫描延时void delay(unsigned char s){unsigned char i,j;for(i=0;i<s;i++)for(j=0;j<125;j++);}//数码管显示子程序void DisplaySecond(unsigned char k){P2=0xfe;P0=Tab[k/10];delay(1);P2=0xfd;P0=Tab[k%10];delay(1);}//扫描键盘的值void sm(void){ unsigned char k,j,n,a,m;m=0xfe;P1=0xf0;k=P1;k=k&0xf0;if(k!=0xf0){ delay(5);if(k!=0xf0){for(j=0;j<4;j++){ P1=m;n=P1;for(a=0;a<16;a++){if(jp[a]==n)c=a; //键值保存在C中while(P1==jp[a]);}m=_crol_(m,1);}}}}//按键void aj(void){if(P1!=0xf0){if(c==12) //按下暂停/开始键{count++;if(count==1){TR0=0;zt=1;}if(count==2){TR0=1;count=0;}}if(c==13){if(zt==1){second=00;sz=1;count2=0;}}if(c<10){if(sz==1){count2++;if(count2==1){a[0]=c;second=a[0]*10+a[1];}if(count2==2){a[1]=c;second=a[0]*10+a[1];}}}if(c==14){second=99;}}P1=0xf0;}//主函数void main(void){TMOD=0x01;TH0=(65536-46083)/256; TL0=(65536-46083)%256; EA=1;ET0=1;while(1){DisplaySecond(second);sm();aj();}}//函数功能:定时器0的中断服务子程序void interserve(void)interrupt 1 using 1 {int_time ++;if(int_time==20){int_time=0;second--;if(second==-1){second=00;P2=0x7f;delay(5);}}TH0=(65536-46083)/256;TL0=(65536-46083)%256;}。
99倒计时课程设计
实用文档目录1引言 (1)2 整体设计方案 (2)3各单元的介绍 (3)3.1 最小应用系统 (3)3.1.1 AT89C51的介绍 (3)3.1.2时钟电路的介绍 (5)3.1.3复位电路 (7)3.2 锁存器74LS273的介绍 (8)3.3 数码管显示介绍 (9)4 99倒计时主电路图 (10)5 程序流程图 (12)6 99倒计时软件程序设计 (13)7 总结 (15)8 谢辞 (16)9 参考文献 (17)1引言目前单片机的应用越来越广泛,实际上,单片机得几乎在人类生活的各个领域都表现出强大的什么生命力,使计算机的应用范围达到了前所未有的广度和深度。
单片机的出现尤其对电路工作者产生了观念上的冲击。
在过去经常采用模拟电路、数字电路诗实现的电路系统,现在相当大一部分可以用单片机予以实现,传统的电路设计方法已演变成软件和硬件相结合的设计方,而且许多电路设计问题将转化为纯粹的程序设计问题。
INTEL公司从其生产单片机开始发展到现在,大体上可分为3大系列:MCS-48系列、MCS-51系列和MCS-96系列。
MCS-51系列是8为高档单片机系列,也是我国目前应用最为广泛的一种单片机系列。
单片机是把CPU、内存储器和某些I/O接口电路集成在一块大规模芯片上的微型计算机。
单片机的优点很多,具有体积小,成本低,抗干扰能力强,面向控制,可以实现分机各分布控制等。
在进行99倒计时的课程设计中就是利用单片机的上述优点,采用的是AT89C51型号的单片机。
99秒倒计时器主要是用在精确时间上。
它是通过一个按键来控制它的开和停,在控制过程中有一个暂停开关和一个复位按钮,它能及时有效的记录瞬间时间,它在我们的生活中的应用很广泛。
2 整体设计方案根据课程设计内容,基于MCS-51单片机,设计两位八段LED做99秒钟的倒计时。
秒表倒计时能够上电复位,复位后系统初始化,八段LED显示为00。
因此,硬件连接设计主要包括时钟电路,复位电路,89C51基本工作电路,接口电路,八段LED共阴极电路等等。
99倒计时
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换sbit LA TCH1=P2^2;//定义锁存使能端口段锁存sbit LA TCH2=P2^3;// 位锁存sbit BEEP = P1^1;//定义喇叭端口bit BeepFlag;sbit KEY_ADD=P3^0; //定义按键输入端口sbit KEY_DEC=P3^1;unsigned char hour,minute,second;//定义时分秒bit UpdateTimeFlag;//定义读时间标志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);//us级延时函数声明void DelayMs(unsigned char t); //ms级延时void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数void Init_Timer0(void);//定时器初始化void Beep_OFF(void);void Beep_ON(void);void Display_Data_Operation(void);/*------------------------------------------------显示数据处理函数------------------------------------------------*/void Display_Data_Operation(void){TempData[2]=dofly_DuanMa[minute/10];//分解显示信息,如要显示68,则68/10=6 68%10=8 TempData[3]=dofly_DuanMa[minute%10];//分解显示信息,如要显示68,则68/10=6 68%10=8TempData[4]=0x40;TempData[5]=dofly_DuanMa[second/10];//分解显示信息,如要显示68,则68/10=6 68%10=8 TempData[6]=dofly_DuanMa[second%10];//分解显示信息,如要显示68,则68/10=6 68%10=8}/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char key_press_num;Init_Timer0();while (1) //主循环{if(!KEY_ADD) //如果检测到低电平,说明按键按下{DelayMs(10); //延时去抖,一般10-20msif(!KEY_ADD) //再次确认按键是否按下,没有按下则退出{while(!KEY_ADD){key_press_num++;DelayMs(10); //10x200=2000ms=2sif(key_press_num==200) //大约2s{key_press_num=0; //如果达到长按键标准则进入长按键动作while(!KEY_ADD) //这里用于识别是否按键还在按下,如果按下执行相关动作,否则退出{if(minute<99) //加操作minute++;//即时把显示数据处理,如果去掉下面2句处理信息,实际上看不到渐变效果,而是看到跳变效果//用户可以自行屏蔽测试Display_Data_Operation();DelayMs(50);//用于调节长按循环操作的速度}}}key_press_num=0;//防止累加造成错误识别if(minute<99) //加操作minute++;}}if(!KEY_DEC) //如果检测到低电平,说明按键按下{DelayMs(10); //延时去抖,一般10-20msif(!KEY_DEC) //再次确认按键是否按下,没有按下则退出{while(!KEY_DEC){key_press_num++;DelayMs(10);if(key_press_num==200) //大约2s{key_press_num=0;while(!KEY_DEC){if(minute>0) //减操作minute--;Display_Data_Operation();DelayMs(50);//用于调节长按循环操作的速度}}}key_press_num=0;//防止累加造成错误识别if(minute>0) //减操作minute--;}}if(UpdateTimeFlag==1){UpdateTimeFlag=0;Display_Data_Operation();if((minute==0)&&(second==0))//条件满足蜂鸣器闪响{Beep_ON();}elseBeep_OFF(); //不满足时关掉}}}/*------------------------------------------------uS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5 uS------------------------------------------------*/void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------显示函数,用于动态扫描数码管输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。
99秒秒表课程设计
目录1第1章 99秒秒表设计背景及目的要求1-11.1 99秒秒表设计背景................................................................. 1-11.2 设计目的................................................................................ 1-21.3硬件选择................................................................................. 1-21.4 设计内容................................................................................ 1-2第2章设计方案及基本原理 ................................................................ 1-32.1 预备知识................................................................................ 1-32.2 LED显示原理.......................................................................... 1-42.3 元器件选择 ............................................................................ 1-42.4 系统设计................................................................................ 1-52.5硬件工作原理.......................................................................... 1-62.6 硬件连接................................................................................ 1-6 .......................................................................................................... 1-7第3章程序设计.................................................................................. 1-83.1设计步骤................................................................................. 1-83.2程序代码................................................................................ 1-11第4章调试结果及分析 ...................................................................... 1-114.1 调试结果............................................................................... 1-114.2 结果分析............................................................................... 1-11第5章结论与体会 .............................................................................1-13参考文献.............................................................................................1-14附录 ..................................................................................................1-15第1章 99秒秒表设计背景及目的要求1.1 99秒秒表设计背景目前,单片机正朝着高性能和对品种方向发展,趋势是进一步向着低功耗、小体积、大存量、高性能、低价格和电路内装化等几个方面发展。