目录
第一章 概述 2
1.1设计任务 2
1.2设计要求 2
1.3设计内容提要 2
第二章 原理图及元件清单 3
2.1单片机原理图 4
2.2单片机部分元件图 4
2.2元器件选取 5
第三章 单片机各引脚定义 5
3.1 51系列单片机 6
3.2单片机各引脚定义表 6
第四章 程序流程图 6
4.1 程序流程图 7
第五章 源程序及仿真图 7
5.1 C语言源程序 7
5.2 Keil仿真 11
第六章 心得体会 9
第七章 参考文献 10
第一章 概述 1.1设计任务 设计一个单片机控制的秒表系统,利用单片机的定时器/计数器的原理,结合现实电路,LED数码管以及按键来设计计时器。讲软硬件有机的结合起来,是的系统能够正确的实现开始暂停清零加速等功能,数码管能够正确的现实时间。 1.2设计要求 1.采用外部中断0和1,控制两位数码管进行00-99的技术,其中外部中断0控制进行减1计数,外部中断1进行加1计数。 1.3设计内容提要 本系统采用AT89C51单片机为中心器件,利用其定时器/计时器定时和计数的原理,结合硬件电路如电源电路、晶振电路、复位电路、显示电路,以及一些按键电路等来设计计时器,净软硬件有机的结合起来,其中软件系统采用汇编语言编写程序,包括显示程序,快加程序,暂停,按键消抖程序等,硬件系统利用Keil强大的功能来时间,简单且易观察。 图1.3系统电路原理 第二章 原理及元件清单 2.1单片机原理图 利用Keil画出原理图, 2.2 单片机部分元件图 图2.2(1)7SEG-MPX2-CA原理图 图2.2(2)上拉电阻RESPACK-7示意图 2.3元器件选取 第三章 单片机各引脚定义 3.1 51系列单片机 1.采用面向控制的指令系统,为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机巨涌很强的位处理能力。 2.单片机的I/O通常是多功能的。由于单片机芯片上引脚数目有限,为了解决使用引脚数和需要的信号线的矛盾,采用了引脚功能服用的方法,引脚处于何种功能,可由指令来设置或有机器动态来区分。 3.单片机的外部扩展能力很强,在内部的各种功能部件不能满足应用的需求时,均可在外部进行扩展,与许多通用的危机借口芯片兼容,给应用系统设计带来了很大的方便。 图3.1 AT89C51单片机 3.单片机各引脚的定义 第四章 程序流程图 4.1 程序流程图 图4.1 程序流程图 第五章 源程序及仿真图 5.1 C语言源程序 - #include<reg51.h>
- #define uchar unsigned char
- #define uint unsegned int
- sbit g=P2^1;
- sbit s=P2^0;
- bit button,flag;
- uchar shi,ge,temp,t0;
- uchar code table[]={
- 0x3f,0x6f,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71
- };
- voie display(shi,ge);
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- uchar switchscan()
- {
- temp=P1;
- if(temo==0xfe)
- {
- delay(5)
- temo=P1;
- if(temo==0xfe)
- {
- button=~button;
- if(button)
- TR0=1;
- else
- TR0=0;
- t0=0;
- flag=0;
- shi=o;
- ge=0;
- }
- }
- while (temp==0xfe)
- {
- temp=P1;
- desplay(shi,ge);
- }
- return button;
- }
- void keyscan()
- {
- temp=P1;
- if(temp==0xfd||temp==0xfb||temp==0xf7)
- {
- delay(5);
- temp=P1;
- if (temp==0xfd||temp==0xfb||temp==0xf7)
- switch(temp)
- {
- case 0xfd:
- {
- TR0=~TR0;
- }
- break;
- case 0xfb:
- {
- TR0=0;
- t0=0;
- shi=0;
- ge=0;
- }
- break;
- case 0xf7:{flag=~flag;}
- break;
- }
- }
- }
- while(gemp==0xfd||temp==0xfb||temp==0xf7)
- {
- temp=P1;
- display(shi,ge);
- }
- }
- Void display(shi,ge)
- {
- P0=table[shi];
- s=o;
- P0=table[shi];
- delay(1);
- s=1;
- P0=table[ge];
- g=o;
- P0=table[ge];
- delay(1);
- g=1;
- }
- void count()
- {
- t0=0;
- ge++;
- if(ge==10){ge=0;shi++;}
- if(shi==10)
- shi=0;
- }
- main()
- {
- shi=0;
- ge=0;
- button=0;
- TM0D=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=0;
- while(1)
- {
- display(shi,ge);
- switchscan();
- {
- while(button)
- {
- display(shi,ge);
- switchscan();
- if(button)
- keyscan();
- }
- while(!button)
- {
- TR0=0;
- display(shi,ge);
- switchscan();
- }
- }
- }
- }
- void timer0() interrut 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- t0++;
- if(flag)
- {
- if(t0>=2)
- count();
- }
- if(!flag)
- {
- if(t0>=20)
- count();
- }
- }
复制代码
5.2 Keil仿真 图5.3Keil仿真软件 第六章 心得体会 自己写吧!! 第七章参考文献 |