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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  單片機(jī)原理及應(yīng)用 課程設(shè)計(jì)</p><p><b>  姓名 : </b></p><p><b>  學(xué)號(hào) : </b></p><p><b>  班級(jí) : </b></p&g

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

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

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

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

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

7、t;<p>  6. 單片機(jī)源程序:</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為時(shí)鐘顯示,mode=2 為計(jì)時(shí)

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

評(píng)論

0/150

提交評(píng)論