電子裝配工藝_第1頁
電子裝配工藝_第2頁
電子裝配工藝_第3頁
電子裝配工藝_第4頁
電子裝配工藝_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、電子裝配工藝專業(yè):應用電子技術 班級:1547 姓名:李苗 學號:1230302154715秒表的設計與工程實現(xiàn)一 單片機系統(tǒng)設計方案描述 系統(tǒng)設計基本指標: 1.實現(xiàn)最大時間長度超過5分鐘的正常倒計時 2.可以在5分鐘范圍內自由方面設置秒表的開始時間 3.進入最后一分鐘時,三聲蜂鳴器響提示 4.秒表計時到,五聲蜂鳴器響,同時小燈亮提示 電子工程訓練是一個綜合性實驗。秒表系統(tǒng)設計總體上分為硬件設計和軟件設計兩個部分,并要充分考慮它們的匹配設計。硬件設計特別是引腳的配置要充分考慮軟件實現(xiàn)的需要,反過來,軟件設計也要建立在硬件的

2、基礎上,并且充分利用硬件提供的資源。 硬件電路大體上可分為最小系統(tǒng)板電路、數(shù)碼管顯示電路和按鍵電路。最小系統(tǒng)板電路和數(shù)碼管顯示電路在老師指導下很快得以完成。按鍵電路為充分考慮以后軟件設計的靈活性和可擴展形,采用了排線將引腳引出。 軟件設計上,為方便秒表的操作使用,設置了“修改”、“增加”、“移位”和“開始/暫?!彼膫€按鍵功能?!靶薷摹辨I按下,進入修改狀態(tài),相應的修改位閃爍,提示按“增加”鍵修改該位時間參數(shù),操作“移位“按鍵可以移動修改位。“開始暫?!眲t用于秒表的開始運行和暫停運行。 按鍵處理通常有查詢和中斷兩種方式處理,查詢占用較多的單片機運行資源,而且延遲防抖效

3、果較差,容易多次觸發(fā),而中斷方式消抖則操作更為靈敏。同時考慮到AT89S52只有兩個外部中斷,將使用較多的“增加”和“開始/暫?!眱蓚€按鍵處理分配給兩個外部中斷。另外兩個按鍵則采用查詢方式檢測處理。 軟件設計整體上利用了“有限狀態(tài)機”的思想,按鍵控制狀態(tài)的轉換,并在相應的狀態(tài)下執(zhí)行相應的操作。一共設置了3個狀態(tài):state=0(暫停狀態(tài)),state=1(開始運行狀態(tài)),state=2(修改狀態(tài)),它們的相互轉化如下:由于本人之前接觸過一些仿真軟件Proteus的知識,而本系統(tǒng)設計所需要的單片機、按鍵、數(shù)碼管、蜂鳴器等硬件均可在Proteus得到仿真。在程序的編寫調試過程中,可以完全

4、脫離硬件,高效率的完成了程序的編寫調試。 2  硬件原理圖(電路原理圖、硬件仿真圖)     Proteus仿真圖 三系統(tǒng)流程圖: 1.主程序流程圖2.  修改狀態(tài)數(shù)據(jù)操作和數(shù)碼管顯示 3.  開始狀態(tài)的數(shù)碼管顯示 4暫停狀態(tài)的數(shù)碼管顯示較為簡單,根據(jù)保留的時間參數(shù),刷新數(shù)碼管,保持剛才的時間顯示。 5中斷INT0修改時間的流程圖6中斷INT1開始與暫停狀態(tài)的切換,程序較為簡單,按鍵觸發(fā)時,在state為1(開始狀態(tài))和state為0(暫停狀態(tài))來回切換&

5、#160;4、 程序  四、程序  #include<reg51.h> #define ulong unsigned long char tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90; char tab_dp=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x58,0x00,0x10; #define LED P0   

6、  /P0為數(shù)碼管的段選 #define WS P1  /P1為數(shù)碼管的位選 sbit time_shift=P30;   /P30為"移位"按鍵 sbit time_set=P31;  /P31為"修改"按鍵 sbit set_inc=P32;   /P32為"增加"按鍵 sbit time_run=P33

7、;  /P33為"計時開始暫停"按鍵 sbit LIGHT=P20; sbit SPEAKER=P27; unsigned char sec,min,sec_ge,sec_shi,min_ge,min_shi,t; /定義秒,分,時,秒的個位,十位,分的個位,十位 int state;    /秒表狀態(tài)指示 0-計時暫停  1-正在倒計時  2-計時時間參數(shù)修改

8、60;int flag;  /秒表修改數(shù)據(jù)指示 0-分鐘十位 1-分鐘個位 2-秒鐘十位  3-秒鐘個位 int  blink; /- void init(); void display_run(); void display_pause(); void delay(int); void time_modify();    /- 

9、;void main()   init();   state=0;  flag=0;  blink=1;  t=0;   LIGHT=1;  SPEAKER=1;   min=5;  sec=0;  sec_ge=0;    /秒的個位和十位  sec_shi=0;  

10、min_ge=5;    /分的個位和十位  min_shi=0;                    while(1)      if(time_set=0)    /如果"調時"按鍵按下  &#

11、160;    delay(5);      /延時去抖      if(time_set=0)      state=2;          if(state=0)         TR0

12、=0;     TR1=0;      display_pause();       if(state=1)           TR0=1;      TR1=0;      displa

13、y_run();       if(state=2)        TR1=1;   time_modify();           /- void init()    TMOD=0x11;  EA=1;  

14、                     /開總中斷  ET0=0;  ET1=0;        /定義定時器0工定時器1作與方式1  TH0=0x4d;     /定時器0賦初值 

15、60;TL0=oxfc;   TH1=15536/256;     /定時器1賦初值  TL1=15536%256;   /中斷初始化   EX0=1;   PX0=0;     IT0=1;   EX1=1;  PX1=1;   IT1=1;   

16、  /外中斷1 void INT_1() interrupt 2 using 0    if( time_run=0)/表示按鈕有按下    delay(20); /延時    if(time_run=0)        state=(state+1)%2;   LIG

17、HT=1;      SPEAKER=1;           /外中斷0 void INT_0()  interrupt 0 using 1    if( set_inc=0)/表示按鈕有按下    delay(20);  /延時去抖 &

18、#160;    if(set_inc=0)                  switch(flag)  /分支結構,根據(jù)flag的值來判斷哪一位加1             case 0:  &#

19、160;                    min=(min+10)%60;          break;               

20、0;    case 1:                       min=(min+1)%10+min/10*10;          break;     

21、60;            case 2:                        sec=(sec+10)%60;      break;  

22、;                case 3:                       sec=(sec+1)%10+sec/10*10;    

23、0;     break;            default:break;                         /-延時子函數(shù)- void de

24、lay(int x)      int i,j; for(i=x;i>0l;i-)      for(j=255;j>0;j-)       /-顯示子函數(shù)- void display_run()   if(TF0=1)    /如果定時器溢出   

25、;  TF0=0;    /清中斷標志位   t+;   if(t=20)         t=0; if(min=0&&sec=0)             min=60;     

26、    if(sec=0)           sec=59;      min-;         else sec-;            if(min=0&

27、;&sec>56)       SPEAKER=0;    delay(20);    SPEAKER=1;         if(min=0&&sec=0)       LIGHT=0;delay(20);    SP

28、EAKER=1; delay(240);          SPEAKER=0;    delay(20);    SPEAKER=1; delay(240);          SPEAKER=0;    delay(20);  

29、0; SPEAKER=1; delay(240);          SPEAKER=0;    delay(20);    SPEAKER=1;  state=4;     min=5;/回歸初始化          sec=0

30、;          sec_ge=0;    /秒的個位和十位          sec_shi=0;          min_ge=5;    /分的個位和十位    

31、60; min_shi=0;           sec_ge=sec%10;    /秒的個位和十位  sec_shi=sec/10;  min_ge=min%10;    /分的個位和十位  min_shi=min/10;  WS=0xfe;    /循環(huán)掃描 &#

32、160;LED=tabsec_ge;  delay(1);  WS=0xfd;  LED=tabsec_shi;  delay(1);  WS=0xfb;  LED=tab_dpmin_ge;  delay(1);  WS=0xf7;  LED=tabmin_shi;  delay(1);    void display_pause() 

33、  WS=0xfe;    /循環(huán)掃描  LED=tabsec_ge;  delay(1); WS=0xfd;  LED=tabsec_shi;  delay(1);  WS=0xfb;  LED=tab_dpmin_ge;  delay(1);  WS=0xf7;  LED=tabmin_shi;  delay(1);

34、0;  void time_modify()     /修改位的閃爍狀態(tài)     if(TF1=1)           TF1=0;  blink=(blink+1)%2;          /修改具體哪個數(shù)碼管指示  

35、;    if(time_shift=0)                   delay(60);           if(time_shift=0)        flag=

36、(flag+1)%4;              / 修改狀態(tài)下的數(shù)碼管顯示     switch(flag)  /分支結構,根據(jù)flag的值來決定掃描狀態(tài)             case 0:   

37、0;                     sec_ge=sec%10;    /秒的個位和十位            sec_shi=sec/10;      

38、60;     min_ge=min%10;    /分的個位和十位            min_shi=min/10;            WS=0xfe;    /循環(huán)掃描    &

39、#160;   LED=tabsec_ge;            delay(1);            WS=0xfd;            LED=tabsec_shi;  

40、60;         delay(1);            WS=0xfb;            LED=tab_dpmin_ge;           

41、; delay(1);        if(blink=1)                      WS=0xf7;              L

42、ED=tabmin_shi;              delay(1);               break;                &

43、#160;     case 1:                        sec_ge=sec%10;    /秒的個位和十位          

44、60;sec_shi=sec/10;           min_ge=min%10;    /分的個位和十位           min_shi=min/10;           WS=0xfe;  

45、60; /循環(huán)掃描           LED=tabsec_ge;           delay(1);           WS=0xfd;         

46、60; LED=tabsec_shi;           delay(1);            if(blink=1)           WS=0xfb;       &#

47、160;    LED=tab_dpmin_ge;            delay(1);                 WS=0xf7;          

48、0;   LED=tabmin_shi;           delay(1);     break;                  case 2:     

49、0;                  sec_ge=sec%10;    /秒的個位和十位           sec_shi=sec/10;          

50、60;min_ge=min%10;    /分的個位和十位           min_shi=min/10;           WS=0xfe;    /循環(huán)掃描           L

51、ED=tabsec_ge;           delay(1);     if(blink=1)                WS=0xfd;           L

52、ED=tabsec_shi;           delay(1);                WS=0xfb;           LED=tab_dpmin_ge;    

53、       delay(1);           WS=0xf7;           LED=tabmin_shi;           delay(1);   &

54、#160;           break;                  case 3:                        sec_ge=sec%10;    /秒的個位和十位          sec_shi=sec/10;           min_ge=min%

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論