課程設(shè)計(jì)--基于51單片機(jī)的信號發(fā)生器的設(shè)計(jì)_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  通信工程學(xué)院</b></p><p><b>  課程設(shè)計(jì)說明書</b></p><p>  題 目 信號發(fā)生器的設(shè)計(jì) </p><p>  課 程 名 稱 單片機(jī)原理及應(yīng)用A </p><p>  專 業(yè)

2、 電子信息工程 </p><p><b>  目 錄</b></p><p><b>  一、課程設(shè)計(jì)目的</b></p><p><b>  二、課程設(shè)計(jì)任務(wù)</b></p><p><b>  三、課程設(shè)計(jì)要求</b>

3、</p><p><b>  四、課程設(shè)計(jì)思路</b></p><p>  五、課程設(shè)計(jì)軟件仿真結(jié)果截圖</p><p><b>  六、課程設(shè)計(jì)體會</b></p><p><b>  七、主要參考文獻(xiàn)</b></p><p>  八、附錄:源程序代碼

4、</p><p><b>  課程設(shè)計(jì)目的:</b></p><p>  在學(xué)習(xí)《單片機(jī)原理及應(yīng)用A》課程的基礎(chǔ)上,進(jìn)一步深入理解MCS-51單片機(jī)的結(jié)構(gòu)、工作原理和應(yīng)用技術(shù),提高單片機(jī)控制系統(tǒng)設(shè)計(jì)、研發(fā)的能力;按照教學(xué)計(jì)劃的要求,利用一周時(shí)間,綜合應(yīng)用所學(xué)知識,設(shè)計(jì)具有一定功能的小型單片機(jī)控制系統(tǒng),培養(yǎng)學(xué)生一定的自學(xué)能力和獨(dú)立分析問題、解決問題的能力,要求學(xué)生能通過

5、獨(dú)立思考、查閱工具書、參考文獻(xiàn),提出自己的設(shè)計(jì)方案,找出設(shè)計(jì)中遇到問題的解決途徑。</p><p><b>  課程設(shè)計(jì)要求:</b></p><p>  1、整個(gè)課程設(shè)計(jì)的各個(gè)環(huán)節(jié)都要自己動手。</p><p>  2、通過TLC5615串行D/A轉(zhuǎn)換芯片完成信號發(fā)生器設(shè)計(jì),經(jīng)由示波器觀察信號波形;</p><p> 

6、 3、采用C語言編程實(shí)現(xiàn); </p><p>  4、其他要求參見“nKDE-51單片機(jī)實(shí)驗(yàn)教學(xué)系統(tǒng)實(shí)驗(yàn)指導(dǎo)書;</p><p>  5、基本任務(wù)為必做項(xiàng)目,附加任務(wù)為選做項(xiàng)目;</p><p>  6、對課程設(shè)計(jì)進(jìn)行總結(jié),撰寫課程設(shè)計(jì)說明書。</p><p><b>  三、課程設(shè)計(jì)任務(wù):</b></p>

7、<p>  1、基本任務(wù):利用nKDE-51單片機(jī)實(shí)驗(yàn)教學(xué)系統(tǒng)上的硬件資源,實(shí)現(xiàn)信號發(fā)生器的功能。</p><p>  2、附加任務(wù):通過鍵盤(1)選擇輸出信號的波形;</p><p> ?。?)調(diào)整幅度、頻率等參數(shù)。</p><p>  3、工作量要求:(1)設(shè)計(jì)的硬件電路圖與程序流程圖;</p><p><b>  

8、(2)源程序代碼;</b></p><p> ?。?)系統(tǒng)運(yùn)行結(jié)果符合課程設(shè)計(jì)要求。</p><p><b>  四、課程設(shè)計(jì)思路:</b></p><p>  1、TLC5615芯片結(jié)構(gòu):</p><p>  引腳功能:DIN:串行數(shù)據(jù)輸入端 OUT

9、 SCLK</p><p>  SCLK:串行時(shí)鐘輸入端 REFin CS </p><p>  CS:片選端,低電平有效 DIN </p><p>  OUT:DAC模擬電

10、壓輸出端 DOUT </p><p>  REFin:基準(zhǔn)輸入端</p><p>  2、TLC5615芯片工作原理:</p><p>  TLC5615由16位轉(zhuǎn)換寄存器、控制邏輯、10位DAC寄存器、上電復(fù)位、DAC、外部基準(zhǔn)放大器、基準(zhǔn)電壓倍增器等部分組成。</p>

11、<p>  TLC5615通過固定增益為2 的運(yùn)放緩沖電阻串接網(wǎng)絡(luò),把10位數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換成模擬電壓。上電時(shí),內(nèi)部電路吧10DAC寄存器復(fù)位至全0,其輸出具有與基準(zhǔn)輸入相同的極性。</p><p>  (1)數(shù)據(jù)輸入。由于DAC是12位寄存器,所以在寫入10位數(shù)據(jù)后,最低2位寫入2個(gè)“0”。</p><p>  (2)輸出緩沖器。輸出緩沖器具有滿電源電壓幅度輸出,它帶有短路保護(hù)并

12、能驅(qū)動有100pF負(fù)載電容的2kΩ負(fù)載。</p><p> ?。?)外部基準(zhǔn)。外部基準(zhǔn)電壓輸入經(jīng)過緩沖,使得DAC輸入電阻與代碼無關(guān)。因此,REFin的輸入電阻為10MΩ,輸入電容典型值為5pF,它們與輸入代碼無關(guān)。基準(zhǔn)電壓決定DAC的滿度輸出。</p><p> ?。?)邏輯接口。邏輯輸入端可使用TTL或CMOS邏輯電平。使用滿電源電壓幅度時(shí),CMOS邏輯可得到最小的功耗。使用TTL邏輯

13、電平是,功耗需求增加約2倍。</p><p>  (5)串行時(shí)鐘和更新速率。TLC5615的最大串行時(shí)鐘頻率近似為14MHz。通常,數(shù)字更新速率受片選周期的限制。對于滿度輸入階躍跳變,10位DAC的建立時(shí)間約為12.5μs,這把更新頻率限制在80KHz。</p><p>  當(dāng)片選信號為低電平時(shí),輸入數(shù)據(jù)讀入16bit移位寄存器。SCLK輸入的上升沿把數(shù)據(jù)移入輸入寄存器,接著,CS的上升沿

14、把數(shù)據(jù)傳送至DAC寄存器,當(dāng)CS為高電平時(shí),輸入的數(shù)據(jù)不能由時(shí)鐘同步送入輸入寄存器。所有CS的跳變應(yīng)發(fā)生在SCLK輸入為低電平時(shí)。</p><p>  DIN只需要輸入12位數(shù)據(jù),DIN輸入的12位數(shù)據(jù)中,前10位為TLC5615輸入的D/A轉(zhuǎn)換數(shù)據(jù),并且輸入時(shí),高位在前,低位在后,后2位必須寫入為0的2位數(shù)值,因?yàn)門LC5615的DAC輸入鎖存器為12位寬。</p><p><b&

15、gt;  總流程圖:</b></p><p>  程序編譯及軟件仿真電路原理圖:</p><p><b>  元器件列表:</b></p><p>  五、課程設(shè)計(jì)軟件仿真結(jié)果截圖:</p><p>  1、按下三角波鍵示波器輸出三角波,同時(shí)液晶屏上顯示“san jiao bo”</p><

16、;p>  按下“鋸齒波”鍵示波器輸出三角波,同時(shí)液晶屏上顯示“ju chi bo”</p><p>  按下“方波”鍵示波器輸出三角波,同時(shí)液晶屏上顯示“fang bo”</p><p>  按下“正弦波”鍵示波器輸出三角波,同時(shí)液晶屏上顯示“sine”</p><p>  當(dāng)無任何鍵按下時(shí)示波器輸出直線,同時(shí)液晶屏上顯示“wave” </p>

17、<p>  6、顯示字符“三”:</p><p><b>  課程設(shè)計(jì)體會:</b></p><p>  本次課程設(shè)計(jì)我做的是信號發(fā)生器,參考相關(guān)書籍和老師給的程序,很快就把三角波、鋸齒波、方波、正弦波四種波形顯示出來了。后面就是波形顯示切換和在液晶屏上顯示對應(yīng)波形說明的問題。在老師同學(xué)和自己的努力下,在原程序上利用IF語句和SWITCH語句實(shí)現(xiàn)了波形按鍵切

18、換功能,即想要顯示方波按下“方波”鍵即可。另外我們這組還在LCM 1602液晶屏上顯示出了漢字,通過參考資料加上自己對漢字顯示原理的理解,最終在液晶屏上顯示出漢字“三”,雖然只是簡單的“三”,但是過程是相當(dāng)不容易。這次課程設(shè)計(jì)很有趣,讓我實(shí)實(shí)在在收獲了不少東西,知道了DA轉(zhuǎn)換和LCM1602顯示的原理,尤其是在LCM 1602漢字的顯示原理。這次課程設(shè)計(jì)也提高了我的編程能力和同學(xué)的合作能力。</p><p>&l

19、t;b>  主要參考文獻(xiàn):</b></p><p>  1、《nKDE51單片機(jī)實(shí)驗(yàn)教學(xué)系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》南京郵電大學(xué),2011年</p><p>  2、《單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì)》(第2版),謝維成等編著,清華大學(xué)出版社,2009年</p><p>  3、《單片機(jī)原理及應(yīng)用》(第2版),李建忠,西安電子科技大學(xué)出版社,2008年<

20、/p><p>  4、《基于protues的51系列單片機(jī)設(shè)計(jì)與仿真》侯玉寶 陳忠平 李成群等編著,電子工業(yè)出版社</p><p><b>  八、源程序代碼: </b></p><p><b>  LCM1602.H</b></p><p>  #ifndef LCM1602_h</p>

21、<p>  #define LCM1602_h</p><p>  #define BUSYFLAG0x80</p><p>  #define BLINK0x01</p><p>  #define NOBLINK0x00</p><p>  unsigned char LCMReadState(void);</

22、p><p>  void LCMDelay(int);</p><p>  void LCMWriteCmd(unsigned char);</p><p>  void LCMWriteData(unsigned char);</p><p>  void LCMClear(void);</p><p>  void L

23、CMInit(void);</p><p>  void LCMGotoXY(unsigned char,unsigned char);</p><p>  void LCMDisplayChar(unsigned char,unsigned char,unsigned char);</p><p>  void LCMDisplayString(unsigned

24、char,unsigned char,unsigned char*);</p><p>  void LCMBlink(unsigned char,unsigned char,unsigned char);</p><p><b>  #endif</b></p><p><b>  BOXING.H</b></p&

25、gt;<p>  #include <reg51.h></p><p>  #include <stdio.h></p><p>  #include <intrins.h></p><p>  #include <LCM1602.h></p><p>  #define OSC

26、22118400</p><p>  #define BAUDRATE9600</p><p>  sbitDIN = P1^4; //串行數(shù)據(jù)輸入端</p><p>  sbitSCK = P1^5; //串行時(shí)鐘輸入端</p><p>  sbitCS = P1^6; //DA片選端</p>&l

27、t;p>  sbit S0= P2^0; // 三角波</p><p>  sbit S1= P2^1; //鋸齒波</p><p>  sbit S2= P2^2; //方波波</p><p>  sbit S3= P2^3;//正弦波</p><p><b>  //正弦波</b

28、></p><p>  unsigned char code type[256]={ </p><p>  0x80,0x83,0x86,0x89,0x8c,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,</p><p>  0xae,0xb1,0xb3,0xb6,0xb9,</p><

29、;p>  0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,</p><p>  0xe0,0xe2,0xe4,0xe6,0xe8,</p><p>  0xea,0xeb,0xed,0xef,0xf0,0xf1,0xf3,0xf4,0xf5,0xf6,0xf8,0xf9,0xfa,0

30、xfa,0xfb,</p><p>  0xfc,0xfd,0xfd,0xfe,0xfe,</p><p>  0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfb,</p><p>  0xfa,0xfa,0xf9,0xf8,0xf6,</p><p

31、>  0xf5,0xf4,0xf3,0xf1,0xf0,0xef,0xed,0xeb,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,</p><p>  0xdc,0xda,0xd8,0xd5,0xd3,</p><p>  0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,0xb1,0xa

32、e,0xab,</p><p>  0xa8,0xa5,0xa2,0x9f,0x9c,</p><p>  0x99,0x96,0x93,0x90,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7a,0x77,0x74,0x70,0x6d,</p><p>  0x6a,0x67,0x64,0x61,0x5e,</p><p&g

33、t;  0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x47,0x44,0x41,0x3f,0x3c,0x39,0x37,0x34,</p><p>  0x32,0x2f,0x2d,0x2b,0x28,</p><p>  0x26,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0f,

34、0x0d,</p><p>  0x0c,0x0b,0x0a,0x08,0x07,</p><p>  0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x01,</p><p>  0x01,0x02,0x02,0x02,0x03,</p><p>

35、  0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,</p><p>  0x15,0x16,0x18,0x1a,0x1c,</p><p>  0x1e,0x20,0x22,0x24,0x26,0x28,0x2b,0x2d,0x2f,0x32,0x34,0x37,0x39,0x3c,0x

36、3f,</p><p>  0x41,0x44,0x47,0x4a,0x4d,</p><p>  0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x74,0x77,0x7a,</p><p><b>  0x7d};</b></p><p>  

37、void DAConvert(unsigned int da)//并行轉(zhuǎn)串行</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  da <<= 2;</b></p><p>  da &=

38、0xFFC;</p><p><b>  SCK = 0;</b></p><p><b>  CS = 0;</b></p><p>  for(i=0;i<12;i++)</p><p><b>  {</b></p><p>  if(da

39、& 0x800)</p><p><b>  DIN = 1;</b></p><p>  else DIN = 0;</p><p><b>  SCK = 1;</b></p><p><b>  SCK = 0;</b></p><p>&

40、lt;b>  da <<= 1;</b></p><p><b>  }</b></p><p><b>  CS = 1;</b></p><p><b>  SCK = 1;</b></p><p><b>  DIN = 1;<

41、;/b></p><p><b>  }</b></p><p>  void Delay(unsigned int t)</p><p><b>  {</b></p><p>  unsigned int i;</p><p>  while(t--)</p&

42、gt;<p>  {for(i=0;i<100;i++);}</p><p><b>  }</b></p><p>  void ling ()</p><p>  { LCMClear() ;</p><p>  LCMDisplayString(1,5,"wave "

43、);</p><p><b>  while(1)</b></p><p>  { DAConvert(0);</p><p>  if(S0==0||S1==0||S2==0||S3==0)break;</p><p><b>  }</b></p><p><b&g

44、t;  }</b></p><p>  void sanjiaobo()</p><p>  { LCMClear() ;</p><p>  LCMDisplayString(1,2,"san jiao bo");</p><p><b>  while(1)</b></p&

45、gt;<p>  { unsigned int i;</p><p>  for(i=0;i<256;i++)</p><p>  {DAConvert(i);} </p><p>  for (i=256;i>0;i--)</p><p>  { DAConvert(i);}</p><p&g

46、t;  if(S0==1)break;}</p><p><b>  }</b></p><p>  void juchibo()</p><p>  { LCMClear() ;</p><p>  LCMDisplayString(1,2,"ju chi bo");</p>

47、<p><b>  while(1)</b></p><p>  {unsigned int i;</p><p>  for (i=0;i<256;i++)</p><p>  { DAConvert(i);}</p><p>  if(S1==1)break;}</p><p

48、><b>  }</b></p><p>  void fangbo()</p><p>  { LCMClear() ;</p><p>  LCMDisplayString(1,2,"fang bo");</p><p><b>  while (1)</b>

49、;</p><p><b>  {</b></p><p>  DAConvert(40);</p><p>  Delay(50);</p><p>  DAConvert(0);</p><p>  Delay(50);</p><p>  if(S2==1)brea

50、k; }</p><p><b>  }</b></p><p>  void sine()</p><p>  { LCMClear() ;</p><p>  LCMDisplayString(1,5,"sine");</p><p><b>  whi

51、le(1)</b></p><p><b>  {</b></p><p>  unsigned char i;</p><p>  DAConvert(type[i]);</p><p><b>  i++;</b></p><p>  if(S3==1)bre

52、ak;}</p><p><b>  }</b></p><p>  void boxing(void)</p><p>  { int key=0;</p><p><b>  while(1)</b></p><p><b>  { </b>

53、</p><p>  if ( S0==1&&S1==1 && S2==1 &&S3==1 ) key=0;</p><p>  if ( S0==0) key=1;</p><p>  if ( S1==0) key=2;</p><p>  if ( S2==0) key=3;</p&

54、gt;<p>  if ( S3==0) key=4;</p><p>  switch (key)</p><p>  {case 0: ling(); </p><p><b>  break;</b></p><p>  case 1: sanjiaobo();</p><p&

55、gt;<b>  break;</b></p><p>  case 2: juchibo();</p><p><b>  break;</b></p><p>  case 3: fangbo();</p><p><b>  break;</b></p>&

56、lt;p>  case 4: sine();</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>&l

57、t;p><b>  LCM1602.C</b></p><p>  #include <reg51.h></p><p>  #include <intrins.h></p><p>  #include <LCM1602.H> </p><p>  #include <b

58、oxing.h></p><p>  #define BUSYFLAG0x80</p><p>  #define BLINK0x01</p><p>  #define NOBLINK0x00</p><p>  #define LCM_DBP0</p><p>  sbit LCM_RS= P

59、1^0;</p><p>  sbit LCM_RW= P1^1;</p><p>  sbit LCM_E= P1^2;</p><p>  sbit LCM_BLC= P1^3;</p><p>  unsigned int data DelayConst = 140;</p><p>  /******

60、************************************************************************</p><p>  函數(shù)名:LCMDelay</p><p>  功 能:通過循環(huán)的方式延時(shí)</p><p>  參 數(shù):int,表示要延時(shí)的毫秒數(shù)</p><p>  ************

61、******************************************************************/</p><p>  void LCMDelay(int ms)</p><p><b>  {</b></p><p>  unsigned int i,cnt;</p><p>  c

62、nt = DelayConst * ms;</p><p>  for(i=0;i<cnt;i++);</p><p><b>  }</b></p><p>  /******************************************************************************</p>

63、;<p>  函數(shù)名:LCMReadState</p><p>  功 能:查詢LCM的忙標(biāo)志/當(dāng)前AC地址</p><p>  返 回:BYTE,最高bit為1表示忙,為0表示閑</p><p>  **************************************************************************

64、****/</p><p>  unsigned char LCMReadState(void)</p><p><b>  {</b></p><p>  unsigned char state;</p><p>  LCM_E = 0;</p><p>  LCM_RS = 0;</p&

65、gt;<p>  LCM_RW = 1;</p><p>  LCM_E = 1;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  state = LCM_DB;</p><p> 

66、 LCM_E = 0;</p><p>  return state;</p><p><b>  }</b></p><p>  /*******************************************************************************</p><p>  函數(shù)名:

67、LCMClear</p><p><b>  功 能:清屏</b></p><p>  *******************************************************************************/</p><p>  void LCMClear(void)</p><p&

68、gt;<b>  {</b></p><p>  LCMDelay(1);</p><p>  LCM_E = 0;</p><p>  LCM_RS = 0;</p><p>  LCM_RW = 0;</p><p>  LCM_DB = 0x01;</p><p> 

69、 LCM_E = 1;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  LCM_E = 0;</p><p>  LCMDelay(1);</p><p><b>  }</b&g

70、t;</p><p>  /*******************************************************************************</p><p>  函數(shù)名:LCMWriteCmd</p><p>  功 能:向LCM寫入控制字</p><p>  參 數(shù):BYTE,命令字節(jié)。寫入

71、前不判斷忙表示(因?yàn)槌跏蓟^程中不能判斷)</p><p>  *******************************************************************************/</p><p>  void LCMWriteCmd(unsigned char cmd)</p><p><b>  {</

72、b></p><p>  LCMDelay(1);</p><p>  LCM_E = 0;</p><p>  LCM_RS = 0;</p><p>  LCM_RW = 0;</p><p>  LCM_DB = cmd;</p><p>  LCM_E = 1;</p>

73、<p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  LCM_E = 0;</p><p><b>  }</b></p><p>  /******************************

74、************************************************</p><p>  函數(shù)名:LCMWriteData</p><p>  功 能:向LCM寫入數(shù)據(jù)</p><p>  參 數(shù):BYTE,將要寫入的數(shù)據(jù)</p><p>  **********************************

75、********************************************/</p><p>  void LCMWriteData(unsigned char dc)</p><p><b>  {</b></p><p>  while(LCMReadState() & BUSYFLAG);</p>&l

76、t;p>  LCM_RS = 1;</p><p>  LCM_RW = 0;</p><p>  LCM_DB = dc;</p><p>  LCM_E = 1;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b&g

77、t;</p><p>  LCM_E = 0;</p><p><b>  }</b></p><p>  /******************************************************************************</p><p>  函數(shù)名:LCMInit</p

78、><p>  功 能:初始化LCM</p><p>  參 數(shù):DWORD,晶振頻率(Hz),供計(jì)算延時(shí)常數(shù)</p><p>  ******************************************************************************/</p><p>  void LCMInit(void

79、)</p><p><b>  {</b></p><p>  LCMDelay(60);// 延時(shí)60ms,等待LCM復(fù)位</p><p>  LCMWriteCmd(0x38);// 功能設(shè)置:8位接口,2行,5x7字符點(diǎn)陣</p><p>  LCMDelay(5);// 延時(shí)<

80、/p><p>  LCMWriteCmd(0x38);// 第二次</p><p>  LCMDelay(1);// 延時(shí)</p><p>  LCMWriteCmd(0x38);// 此后可以通過監(jiān)測忙標(biāo)志判斷指令執(zhí)行情況</p><p>  while(LCMReadState() & BUSYFLAG);

81、</p><p>  LCMWriteCmd(0x08);// 關(guān)閉顯示 </p><p>  while(LCMReadState() & BUSYFLAG);</p><p>  LCMWriteCmd(0x01);// 清屏</p><p>  while(LCMReadState() & BUSYFLA

82、G);</p><p>  LCMWriteCmd(0x06);// 顯示地址自動增量,整體不移位</p><p>  while(LCMReadState() & BUSYFLAG);</p><p>  LCMWriteCmd(0x0e);// 開顯示,開光標(biāo),不閃爍</p><p>  while(LCMRead

83、State() & BUSYFLAG);</p><p><b>  }</b></p><p>  /******************************************************************************</p><p>  函數(shù)名:LCMGotoXY</p><

84、;p>  功 能:移動光標(biāo)到X行,Y列</p><p>  參 數(shù):BYTE,x表示行(0,1),y表示列(橫向,取值0~0x0f)</p><p>  ******************************************************************************/</p><p>  void LCMGoto

85、XY(unsigned char x,unsigned char y)// x:行(0~1) y:列(0~F)</p><p><b>  {</b></p><p>  unsigned char cmd;</p><p><b>  if(x==0)</b></p><p><b>

86、;  {</b></p><p>  cmd = 0x80 | y;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cmd = 0x80 |

87、0x40 | y; //(第1行第0列為40H開始)</p><p><b>  }</b></p><p>  LCMWriteCmd(cmd);</p><p>  while(LCMReadState() & BUSYFLAG);</p><p><b>  }</b></p&g

88、t;<p>  /******************************************************************************</p><p>  函數(shù)名:LCMDisplayString</p><p>  功 能:從指定的位置開始顯示字符串</p><p>  參 數(shù):x表示行(0,1),y表示列

89、(橫向,取值0~0x0f),*str為指向?qū)⒁@示的字符串的指針</p><p>  ******************************************************************************/</p><p>  void LCMDisplayString(unsigned char x,unsigned char y,unsigned

90、char* str)</p><p><b>  {</b></p><p>  unsigned char ptr;</p><p><b>  ptr = 0;</b></p><p>  while(*(str+ptr) != 0)</p><p><b> 

91、 {</b></p><p>  LCMDisplayChar(x,(y+ptr),*(str+ptr));</p><p><b>  ptr++;</b></p><p><b>  }</b></p><p><b>  }</b></p>&l

92、t;p>  #include <reg51.h></p><p>  #include <stdio.h></p><p>  #define BUSYFLAG0x80</p><p>  #define BLINK0x01</p><p>  #define NOBLINK0x00</p>

93、<p>  #define OSC22118400</p><p>  unsigned char ucTH,ucTL,Ticks;</p><p>  //*****************************************************************************</p><p>  // 函數(shù)名:T0

94、ISR</p><p>  // 功 能:50ms中斷服務(wù)程序</p><p>  //*****************************************************************************</p><p>  void T0ISR(void) interrupt 1</p><p>&l

95、t;b>  {</b></p><p>  TH0 = ucTH;</p><p>  TL0 = ucTL;</p><p><b>  TR0 = 1;</b></p><p><b>  Ticks ++;</b></p><p>  if(Ticks

96、 == 20)</p><p><b>  {</b></p><p>  Ticks = 0;</p><p>  LCM_BLC = 0;</p><p><b>  }</b></p><p><b>  }</b></p><

97、p>  void main(void)</p><p><b>  {</b></p><p><b>  // 初始化</b></p><p>  EA = 0;// 停止所有中斷</p><p>  Ticks = 0;</p><p>  ucTH =

98、(65536-OSC/12/20)/256;// 計(jì)算50ms定時(shí)的時(shí)間常數(shù)</p><p>  ucTL = (65536-OSC/12/20)%256;</p><p>  TMOD = 0x01;// T0:模式1,16位定時(shí)器</p><p>  TH0 = ucTH;</p><p>  TL0 = ucTL;</

99、p><p>  ET0 = 1;// T0允許中斷</p><p>  TR0 = 1;// 啟動定時(shí)器</p><p>  EA = 1;// 打開總中斷允許</p><p>  LCMInit();</p><p>  LCMClear();</p><p><

100、b>  while(1)</b></p><p>  {boxing();} </p><p><b>  }</b></p><p><b>  漢字顯示程序</b></p><p>  #include<reg51.h> </p><p>

101、  #define uint unsigned int </p><p>  #define uchar unsigned char </p><p>  sbit rs=P1^0; </p><p>  sbit rw=P1^1; </p><p>  sbit en=P1^2;</p><p>  sbit LCM

102、_BLC = P1^3; </p><p><b>  //字符“三”</b></p><p>  uchar code table[]={0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x0F,//“三”左上半部分</p><p>  0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x7C, /

103、/“三”右上半部分</p><p>  0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00, //“三”左下半部分</p><p>  0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00//“三”右下半部分</p><p><b>  };</b></p><p>

104、  void delay(uint n) //延時(shí) </p><p><b>  { </b></p><p>  uint x,y; </p><p>  for(x=n;x>0;x--) </p><p>  for(y=110;y>0;y--); <

105、/p><p><b>  } </b></p><p>  void lcd_wcom(uchar com) //向lcm1602寫入命令字 </p><p><b>  { </b></p><p><b>  rs=0; </b></p

106、><p><b>  rw=0; </b></p><p><b>  P0=com; </b></p><p>  delay(5); </p><p><b>  en=1; </b></p><p><b>  en=0; </b>

107、;</p><p><b>  } </b></p><p>  void lcd_wdat(uchar dat) //向lcm1602寫入數(shù)據(jù) </p><p><b>  { </b></p><p><b>  rs=1; </b></

108、p><p><b>  rw=0; </b></p><p><b>  P0=dat; </b></p><p>  delay(5); </p><p><b>  en=1; </b></p><p><b>  en=0; </b&g

109、t;</p><p><b>  } </b></p><p>  void lcd_init() //lcm1602初始化</p><p><b>  { </b></p><p>  lcd_wcom(0x38); </p

110、><p>  lcd_wcom(0x0c); </p><p>  lcd_wcom(0x06); </p><p>  lcd_wcom(0x01); </p><p><b>  }</b></p><p>  void main

111、() </p><p><b>  { </b></p><p><b>  char m=0;</b></p><p>  LCM_BLC = 0; </p><p>  lcd_init(); </p><p>  lcd_wcom(0x40);

112、 //設(shè)定CGRAM地址 </p><p>  for(m=0;m<64;m++) //將代碼寫入CGRAM中 </p><p><b>  { </b></p><p>  lcd_wdat(table[m]); </p><p><b>  } </b

113、></p><p>  lcd_wcom(0x85); //設(shè)定上排的顯示位置 </p><p>  for(m=0;m<2;m++) </p><p><b>  { </b></p><p>  lcd_wdat(m); </p><p><

114、b>  } </b></p><p>  lcd_wcom(0xc5); //設(shè)定下排的顯示位置 </p><p>  for(m=2;m<4;m++) </p><p><b>  { </b></p><p>  lcd_wdat(m); </p>

溫馨提示

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

最新文檔

評論

0/150

提交評論