2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  單片機原理及應用 課程設計</p><p><b>  姓名 : </b></p><p><b>  學號 : </b></p><p><b>  班級 : </b></p&g

2、t;<p><b>  電子時鐘設計</b></p><p><b>  功能要求:</b></p><p>  時鐘計時器要求用單片機及16位LCD數(shù)碼顯示時、分、秒,以24小時計時方式運行,使用按鍵開關(guān)可以實現(xiàn)時、分、秒調(diào)整。</p><p><b>  方案論證:</b></

3、p><p>  為實現(xiàn)LCD顯示器的數(shù)字顯示,系統(tǒng)沒有其他復雜的處理任務,所以采用動態(tài)掃描法實現(xiàn)LCD的顯示。單片機采用AT89S52系列,這種單片機有足夠的空余硬件資源,可以實現(xiàn)其他的擴展功能。電子時鐘系統(tǒng)的總體設計框圖如下:</p><p>  時鐘系統(tǒng)的總體設計框圖</p><p>  3.系統(tǒng)硬件電路的設計:</p><p>  電子時鐘

4、的硬件電路原理圖、PCB圖、3D電路板圖和Proteus仿真電路圖如下圖所示,該電路采用AT89S52單片機最小化應用設計,采用LCD液晶顯示器;P0口輸出段碼數(shù)據(jù),P2.0~P2.2做掃描輸出,P1.0,P1.1和P1.2口接3個按鈕開關(guān),用于調(diào)試及功能設計;采用12MHz晶振,可提高秒計時的精確性;PCB電路板布線規(guī)則為線粗:0.5mm,有效間距:0.3mm,采用底面布線。</p><p><b>

5、  時鐘電路原理圖</b></p><p><b>  PCB圖</b></p><p><b>  3D電路版圖</b></p><p>  4.系統(tǒng)程序的設計:</p><p>  主程序中計時采用定時器T0中斷完成,秒表使用定時器T1完成,主程序循環(huán)調(diào)用顯示子程序和查鍵子程序,當端

6、口有開關(guān)按下時,轉(zhuǎn)入相應功能子程序;時間顯示子程序顯示每次顯示28個內(nèi)存單元的字符和十進制BCD碼數(shù)據(jù),首地址在調(diào)用顯示子程序時先指定。</p><p><b>  5.軟、硬件調(diào)試:</b></p><p>  軟件調(diào)試在Kiel C51編譯器下進行,最后可結(jié)合硬件實時調(diào)試;硬件調(diào)試可結(jié)合示波器測試晶振及P0、P2端口的波形情況進行綜合硬件測試分析。</p&g

7、t;<p>  6. 單片機源程序:</p><p>  ;*************C文件程序**************</p><p>  #include "reg51.h"</p><p>  #include "clock.h"</p><p><b>  main(

8、)</b></p><p><b>  {</b></p><p>  lcdinit();</p><p>  uartint();</p><p>  t0_init();</p><p><b>  while(1)</b></p><p

9、>  { keyscan();</p><p>  FloatToASCII();</p><p>  display();</p><p><b>  }</b></p><p><b>  }</b></p><p>  ;***************H文件程序

10、******************</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  uchar aa[]={"time:16-37-00"};</p><p>  uchar bb[]={"D

11、ate:2009-11-05"};</p><p>  uint tim=0;</p><p>  uint sec=58;</p><p>  uint min=59;</p><p>  uint hour=23;</p><p>  uint year=2009;</p><p>

12、;  uint month=11;</p><p>  uint day=5;</p><p>  uint addr;</p><p>  sbit rs=P2^0;</p><p>  sbit rw=P2^1;</p><p>  sbit en=P2^2;</p><p>  sbit

13、key0=P1^0; //調(diào)整位切換</p><p>  sbit key1=P1^1; //加控制</p><p>  sbit key2=P1^2; //減控制</p><p>  sbit key3=P1^3; //顯示模式轉(zhuǎn)換</p><p>  uint mode=1; //mode=1為時鐘顯示,mode=2 為計時

14、顯示</p><p>  uint station=0; //mode=1:station=1為時調(diào)整,station=2為分調(diào)整,station=3為秒調(diào)整,station=4為年調(diào)整,station=5為月調(diào)整,station=6為日調(diào)整</p><p>  void wrcommand(uchar dat);</p><p>  void wrdata(uc

15、har dat);</p><p>  void delay(uint dat);</p><p>  void lcd_string(uchar *p,char flag);</p><p>  void wrcommand (uchar dat)</p><p><b>  {</b></p><

16、p>  delay(300);</p><p><b>  rs=0;</b></p><p><b>  rw=0;</b></p><p><b>  en=1;</b></p><p><b>  P0=dat;</b></p>

17、<p><b>  en=0;</b></p><p><b>  }</b></p><p>  void wrdata(uchar dat)</p><p><b>  {</b></p><p>  delay(300);</p><p>

18、;<b>  rs=1;</b></p><p><b>  rw=0;</b></p><p><b>  en=1;</b></p><p><b>  P0=dat;</b></p><p><b>  en=0;</b><

19、;/p><p><b>  }</b></p><p>  void delay(uint dat)</p><p><b>  {</b></p><p>  while(dat--);</p><p><b>  }</b></p><

20、;p>  void lcdinit()</p><p>  { wrcommand(0x01);</p><p>  wrcommand(0x38);</p><p>  wrcommand(0x06);</p><p>  wrcommand(0x0c);</p><p><b>  }</b

21、></p><p>  void lcd_string(uchar *p,char flag)</p><p>  { if(flag==1)</p><p>  { addr=0x80;</p><p>  while(*p!='\0')</p><p><b>  {<

22、/b></p><p>  wrcommand(addr);</p><p>  wrdata(*p);</p><p><b>  addr++;</b></p><p><b>  p++;</b></p><p><b>  }</b><

23、;/p><p><b>  }</b></p><p>  if(flag==2)</p><p><b>  {</b></p><p>  addr=0xc0;</p><p>  while(*p!='\0')</p><p>  {

24、 wrcommand(addr);</p><p>  wrdata(*p);</p><p><b>  addr++;</b></p><p><b>  p++;</b></p><p><b>  }</b></p><p><b>

25、  }</b></p><p><b>  }</b></p><p>  void t0_init(void)</p><p><b>  {</b></p><p>  TMOD=0x01;</p><p><b>  ET0=1;</b>

26、;</p><p><b>  TH0=0X3C;</b></p><p><b>  TL0=0XB0;</b></p><p><b>  TR0=1;</b></p><p><b>  EA=1;</b></p><p>&

27、lt;b>  }</b></p><p>  void t0(void) interrupt 1 using 2</p><p>  { tim=tim+1;</p><p>  if(tim==20)</p><p><b>  {tim=0;</b></p><p>  

28、sec=sec+1;</p><p>  if(sec==60)</p><p><b>  {sec=0;</b></p><p>  min=min+1;</p><p>  if(min==60)</p><p><b>  {min=0;</b></p>

29、<p>  hour=hour+1;</p><p>  if(hour==24)</p><p><b>  {hour=0;</b></p><p>  day=day+1;</p><p>  if(month==2)</p><p>  //if(year%1000==0)&

30、lt;/p><p>  if(day==29)</p><p><b>  {</b></p><p><b>  day=1;</b></p><p>  month=month+1;</p><p>  //if(month==13)</p><p>

31、<b>  //{</b></p><p>  //month=1;</p><p>  //year=year+1;</p><p><b>  //}</b></p><p><b>  //}</b></p><p>  //if(!(y

32、ear%1000==0))</p><p>  //if(day==30)</p><p><b>  //{</b></p><p><b>  //day=1;</b></p><p>  //month=month+1;</p><p>  //if(month==1

33、3)</p><p>  //{//month=1;</p><p>  //year=year+1;</p><p><b>  //}</b></p><p><b>  }</b></p><p><b>  //e

34、lse</b></p><p>  if(month==4||month==6||month==9||month==11)</p><p>  if(day==31)</p><p><b>  {</b></p><p><b>  day=1;</b></p><

35、p>  month=month+1;</p><p>  if(month==13)</p><p><b>  {</b></p><p><b>  month=1;</b></p><p>  year=year+1;</p><p><b>  }&l

36、t;/b></p><p><b>  }</b></p><p><b>  //else</b></p><p>  if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)</p><p>  

37、if(day==32)</p><p><b>  {</b></p><p><b>  day=1;</b></p><p>  month=month+1;</p><p>  if(month==13)</p><p>  {month=1;</p>

38、<p>  year=year+1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><

39、b>  }</b></p><p><b>  }</b></p><p><b>  TH0=0X3C;</b></p><p><b>  TL0=0XB0;</b></p><p><b>  }</b></p>&l

40、t;p>  void display()</p><p>  { lcd_string(aa,1);</p><p>  lcd_string(bb,2);</p><p><b>  }</b></p><p>  void uartint()</p><p>  { SCON =

41、 0x50; //串口方式1,允許接收</p><p>  TMOD = 0x20; //定時器1 定時方式2</p><p>  TH1 = 0xE8; //11.0592MHz 1200 波特率</p><p>  TL1 = 0xE8;</p><p><b>  TI = 1;</b></p>&l

42、t;p><b>  TR1 = 1;</b></p><p><b>  }</b></p><p>  void FloatToASCII()</p><p>  { aa[0]='T';</p><p>  aa[1]='i';</p>&l

43、t;p>  aa[2]='m';</p><p>  aa[3]='e';</p><p>  aa[4]=':';</p><p>  aa[5]=hour/10+'0';</p><p>  aa[6]=hour%10+'0';</p>&

44、lt;p>  aa[7]=':';</p><p>  aa[8]=min/10+'0';</p><p>  aa[9]=min%10+'0';</p><p>  aa[10]=':';</p><p>  aa[11]=sec/10+'0';</

45、p><p>  aa[12]=sec%10+'0';</p><p>  bb[0]='D';</p><p>  bb[1]='a';</p><p>  bb[2]='t';</p><p>  bb[3]='e';</p>

46、<p>  bb[4]=':';</p><p>  bb[5]=year/1000+'0';</p><p>  bb[6]=year%1000/100+'0';</p><p>  bb[7]=year%100/10+'0';</p><p>  bb[8]=yea

47、r%10+'0';</p><p>  bb[9]='/';</p><p>  bb[10]=month/10+'0';</p><p>  bb[11]=month%10+'0';</p><p>  bb[12]='/';</p><p&

48、gt;  bb[13]=day/10+'0';</p><p>  bb[14]=day%10+'0';</p><p><b>  }</b></p><p>  void keyscan()</p><p>  { if(key0==0)</p><p> 

49、 {delay(50);</p><p>  if(key0==0)</p><p>  {station++;</p><p><b>  TR0=0;</b></p><p><b>  }</b></p><p>  if(station==7)</p>

50、<p>  {station=0;</p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p>  while(key0==0);</p><p><b>  }</b></p><p>  

51、if(key1==0)</p><p>  { delay(50);</p><p>  if(key1==0)</p><p>  if(mode==1)</p><p>  switch(station)</p><p><b>  {</b></p><p>  c

52、ase 1:hour++;</p><p>  if(hour==24)</p><p><b>  hour=0;</b></p><p><b>  break;</b></p><p>  case 2:min++;</p><p>  if(min==60)</

53、p><p><b>  min=0;</b></p><p><b>  break;</b></p><p>  case 3:sec++;</p><p>  if(sec==60)</p><p><b>  sec=0;</b></p>

54、<p><b>  break;</b></p><p>  case 4:year++;</p><p><b>  break;</b></p><p>  case 5:month++;</p><p>  if(month==13)</p><p><

55、;b>  month=1;</b></p><p><b>  break;</b></p><p>  case 6:day++;</p><p>  if(day==32)</p><p><b>  day=1;</b></p><p><b&g

56、t;  break;</b></p><p>  default:break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key2==0)</p><p>  { delay(300);</p

57、><p>  if(key2==0)</p><p>  if(mode==1)</p><p>  switch(station)</p><p>  { case 1:if(hour==0)</p><p><b>  hour=23;</b></p><p><b

58、>  else</b></p><p><b>  hour--;</b></p><p><b>  break;</b></p><p>  case 2:if(min==0)</p><p><b>  min=59;</b></p>&l

59、t;p><b>  else</b></p><p><b>  min--;</b></p><p><b>  break;</b></p><p>  case 3:if(sec==0)</p><p><b>  sec=59;</b><

60、;/p><p><b>  else </b></p><p><b>  sec--;</b></p><p><b>  break;</b></p><p>  case 4:year--;</p><p><b>  break;&l

61、t;/b></p><p>  case 5:month--;</p><p>  if(month==0)</p><p><b>  month=12;</b></p><p><b>  break;</b></p><p>  case 6:day--;<

62、/p><p>  if(day==0)</p><p><b>  day=31;</b></p><p><b>  break;</b></p><p>  default:break;</p><p><b>  }</b></p>&l

溫馨提示

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

評論

0/150

提交評論