目錄
第一章 概述 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仿真軟件 第六章 心得體會 自己寫吧!! 第七章參考文獻 |