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

下載本文檔

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

文檔簡介

1、<p><b>  單片機(jī)原理及應(yīng)用</b></p><p><b>  課程設(shè)計(jì)</b></p><p>  學(xué)院名稱: 計(jì)算機(jī) </p><p>  專業(yè)班級: 通信0902 </p><p>  學(xué)生

2、姓名: </p><p>  學(xué)生學(xué)號: </p><p>  指導(dǎo)教師姓名: </p><p>  2012年 1 月</p><p>  點(diǎn)陣式液晶顯示屏的顯示程序設(shè)計(jì)</p>

3、;<p><b>  一、設(shè)計(jì)目的</b></p><p>  1.熟練掌握C51系統(tǒng)仿真開發(fā)系統(tǒng)的應(yīng)用。</p><p>  2.加強(qiáng)單片機(jī)的綜合運(yùn)用能力、提高單片機(jī)的軟件編程和調(diào)試能力,為以后的學(xué)習(xí)和開發(fā)工作打下良好基礎(chǔ)。</p><p>  3.掌握的液晶的工作原理以及應(yīng)用設(shè)計(jì)。</p><p>  

4、4.掌握小系統(tǒng)開發(fā)設(shè)計(jì)的流程以及設(shè)計(jì)思路。</p><p><b>  二、設(shè)計(jì)方案</b></p><p><b>  實(shí)驗(yàn)要求:</b></p><p>  1)從下到上滾動(dòng)顯示:“江蘇大學(xué)計(jì)算機(jī)學(xué)院”然后交替顯示:“單片機(jī)課程設(shè)計(jì)”“液晶點(diǎn)陣顯示屏程序設(shè)計(jì)”“作者姓名、班級、學(xué)號” </p><

5、p>  2)能進(jìn)行正常的模擬量采樣值顯示(溫度、壓力、電位) 。</p><p>  3) 改變字庫的內(nèi)容,顯示其它漢字。</p><p>  4) 改變頁地址或列地址,使顯示的內(nèi)容改變位置。 </p><p>  5)其它功能(如左、右移,上下卷、顯示圖片等)。</p><p><b>  設(shè)計(jì)思路:</b>

6、;</p><p>  由于實(shí)驗(yàn)指導(dǎo)書中做過液晶顯示和模數(shù)轉(zhuǎn)換得實(shí)驗(yàn),根據(jù)兩個(gè)實(shí)驗(yàn)的功能實(shí)現(xiàn)和流程原理進(jìn)行設(shè)計(jì)</p><p>  將程序分成三個(gè)模塊:</p><p>  主函數(shù)模塊main.c</p><p>  模數(shù)轉(zhuǎn)換模塊ADC.c</p><p>  液晶顯示模塊KS0108.c</p><

7、;p>  其中讓主函數(shù)模塊做一些初始化和函數(shù)調(diào)用工作,模數(shù)轉(zhuǎn)換模塊主要是將溫度,壓力,點(diǎn)位的值轉(zhuǎn)化為數(shù)字量供液晶顯示用,液晶顯示模塊得到模數(shù)轉(zhuǎn)換模塊傳遞過來的數(shù)字量顯示到液晶面板上。</p><p><b>  程序流程圖:</b></p><p><b>  1系統(tǒng)主流程圖如下</b></p><p><b&

8、gt;  2主函數(shù)流程圖</b></p><p><b>  3 顯示模塊流程圖</b></p><p>  4 模數(shù)轉(zhuǎn)換模塊流程圖</p><p><b>  主要的源程序及注釋</b></p><p><b>  主函數(shù):</b></p><

9、p>  #include "c8051f020.h" </p><p>  #include <intrins.h> </p><p>  void Delay1us(unsigned char us)//延時(shí)us</p><p><b>  {</b></p><p>  whil

10、e (us)</p><p><b>  {</b></p><p>  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();</p><p><b>  --us;</b></p><p><b>  }</b></p>&l

11、t;p><b>  }</b></p><p>  void SYSCLK_Init (void)//系統(tǒng)時(shí)鐘初始化</p><p><b>  {</b></p><p>  int i; // delay counter</p><p&

12、gt;  OSCXCN = 0x67; // start external oscillator with</p><p>  // 18.432MHz crystal</p><p>  for (i=0; i < 256; i++) ; // Wait for osc. to start up</p>&

13、lt;p>  while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle</p><p>  OSCICN = 0x88; // select external oscillator as SYSCLK</p><p>  // source and e

14、nable missing clock</p><p>  // detector</p><p>  //OSCICN = 0x07; //interal 16MHZ</p><p><b>  }</b></p><p>  #define PRT0CF P0MDOUT</p><p>

15、  #define PRT1CF P1MDOUT</p><p>  #define PRT2CF P2MDOUT</p><p>  void PORT_Init (void) //串口初始化</p><p><b>  {</b></p><p>  XBR0 = 0x07;

16、 // Enable SMBus, SPI0, and UART0</p><p>  XBR1 = 0x00;</p><p>  XBR2 = 0x44; // Enable crossbar and weak pull-ups</p><p>  EMI0CF = 0x2

17、7;</p><p>  EMI0TC = 0x21;</p><p>  P74OUT = 0xFF;</p><p>  P0MDOUT = 0x15;</p><p>  P1MDOUT |= 0x3C; //P1.2-P1.5推挽輸出</p><p>  P1 &= 0xc3;

18、//P1.2-P1.5=0</p><p><b>  }</b></p><p>  void SPI0_Init (void) //spi0初始化</p><p><b>  {</b></p><p>  SPI0CFG = 0x07;

19、 // data sampled on 1st SCK rising edge</p><p>  // 8-bit data words</p><p>  SPI0CFG|=0xC0;//CKPOL =1;</p><p>  SPI0CN = 0x03; // Master mode; SPI e

20、nabled; flags</p><p>  // cleared</p><p>  SPI0CKR = SYSCLK/2/8000000-1; // SPI clock <= 8MHz (limited by </p><p>  // EEPROM spec.)</p><p><b>  }</b&

21、gt;</p><p>  unsigned char Count1ms;</p><p>  void Timer0_Init (void) //計(jì)數(shù)器0初始化</p><p><b>  {</b></p><p>  CKCON|=0x8;</p><p>  

22、TMOD|=0x1; //16Bit</p><p>  Count1ms=10;</p><p>  TR0 = 0; // STOP Timer0</p><p>  TH0 = (-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1m

23、s</p><p>  TL0 = -SYSCLK/1000;</p><p>  TR0 = 1; // START Timer0</p><p>  IE|= 0x2; </p><p><b>  }</b></p><p>  void Timer0_ISR (void) inter

24、rupt 1 //1ms </p><p><b>  {</b></p><p>  TH0 = (-SYSCLK/1000) >> 8; </p><p>  TL0 = -SYSCLK/1000;</p><p>  if (Count1ms) Count1ms--;</p><

25、;p><b>  }</b></p><p>  void Delay1ms(unsigned char T) //延時(shí)1ms</p><p><b>  {</b></p><p>  Count1ms=T;</p><p>  while (Count1ms);</p&

26、gt;<p><b>  }</b></p><p>  void Delay1s(unsigned char T) //延時(shí)1s</p><p><b>  {</b></p><p><b>  while (T)</b></p><p><

27、;b>  {</b></p><p>  Delay1ms(200);</p><p>  Delay1ms(200);</p><p>  Delay1ms(200);</p><p>  Delay1ms(200);</p><p>  Delay1ms(200);</p><

28、p><b>  T--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void TestLCD(void);//測試初始畫面</p><p>  char GetKeyValue(void);//獲取鍵值&l

29、t;/p><p>  void init_adc(void);</p><p>  unsigned int GetADCValue(char No);</p><p>  void Display (char *DispBuf,char ShowDot,char x,char y);</p><p>  void menulcd ();<

30、/p><p>  void zuoyouyi();</p><p>  void caiji ();</p><p>  void main (void) </p><p><b>  {</b></p><p><b>  char i;</b></p><

31、p>  unsigned int u;</p><p><b>  char Num;</b></p><p>  WDTCN = 0xde;</p><p>  WDTCN = 0xad; //關(guān)看門狗</p><p>  SYSCLK_Init (); //初始化時(shí)鐘<

32、/p><p>  Timer0_Init();//初始化定時(shí)器</p><p>  PORT_Init (); //初始化IO口</p><p>  SPI0_Init (); //初始化SPI0</p><p>  init_adc();</p><p>  CPT1CN|=

33、0x80;//使能比較器1</p><p>  REF0CN = 0x07; //使能片內(nèi)參考電壓</p><p>  DAC0CN |= 0x80;//使能DAC0</p><p>  DAC0H=0;DAC0L=0;</p><p>  EA=1;//開中斷</p><p><b>  

34、Num=0;</b></p><p>  menulcd ();</p><p>  u= GetADCValue(Num);//獲取按鍵值</p><p><b>  for (;;)</b></p><p><b>  {</b></p><p>  i=Ge

35、tKeyValue();</p><p>  if ((i<1)||(i>3))</p><p><b>  Num=i;</b></p><p>  Delay1ms(100);</p><p>  if (Num==0)</p><p><b>  {</b>

36、</p><p>  menulcd ();//按0顯示主菜單</p><p><b>  }</b></p><p>  else if(Num==4)</p><p><b>  {</b></p><p>  TestLCD();//按4顯示開始畫面</p>

37、<p><b>  }</b></p><p>  else if(Num==5)</p><p><b>  {</b></p><p>  zuoyouyi();//按5漢字,圖畫左右移動(dòng)</p><p><b>  }</b></p><

38、p>  else if(Num==6)</p><p><b>  {</b></p><p>  caiji ();//按6采集溫度,電壓,壓力</p><p><b>  }</b></p><p>  u = GetADCValue(Num);</p><p>&

39、lt;b>  }</b></p><p><b>  }</b></p><p><b>  KS0108模塊:</b></p><p>  #include "c8051F020.h"</p><p>  #include <intrins.h>&

40、lt;/p><p>  #include "dianzhen.c"//所有用到的漢字,圖畫點(diǎn)陣</p><p>  #define LCD_DATA P2</p><p>  #define LCD_RS P30</p><p>  #define LCD_RW P31</p><p>  #defin

41、e LCD_E P32</p><p>  #define LCD_CS1 P33</p><p>  #define LCD_CS2 P34</p><p>  #define LCD_RST P35</p><p>  sbitHD7279_DAT=P1^7;</p><p>  sbitHD7279_

42、CLK=P1^6;</p><p>  #define NOSELECT7279 P5 |= 0x80//SPICS4(P57)=1</p><p>  #define SELECT7279 P5 &= ~(0x80) //SPICS4(P57)=0;</p><p>  #define Set7279DAT HD7279_DAT=1&l

43、t;/p><p>  #define Clr7279DAT HD7279_DAT=0</p><p>  #define Set7279CLK HD7279_CLK=1</p><p>  #define Clr7279CLK HD7279_CLK=0</p><p><b>  //7279模塊</b><

44、;/p><p>  void Delay1ms(unsigned char T);</p><p>  void Delay1s(unsigned char T);</p><p>  void Delay1us(unsigned char T);</p><p>  void Send7279Byte(unsigned char ch)//發(fā)送

45、</p><p><b>  {</b></p><p><b>  char i;</b></p><p>  SELECT7279; //置CS低電平 </p><p>  Delay1us(50);//延時(shí)50μ</p><p>  for (i=0;i

46、<8;i++)</p><p><b>  {</b></p><p>  if (ch&0x80)//輸出7位到HD7279A的DATA端 </p><p><b>  {</b></p><p>  Set7279DAT;</p><p><b&g

47、t;  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Clr7279DAT;</p><p><b>  }</b></p><p>  Set7279CLK;//置

48、CLK高電平 </p><p>  ch=ch<<1;//待發(fā)數(shù)據(jù)左移 </p><p>  Delay1us(8);//延時(shí)8μ</p><p>  Clr7279CLK;//置CLK低電平 </p><p>  Delay1us(8);//延時(shí)50μ</p><p><b>  }

49、</b></p><p>  Clr7279DAT;//發(fā)送完畢,DATA端置低,返回 </p><p><b>  }</b></p><p>  unsigned char Receive7279Byte(void)//接收</p><p><b>  {</b></p&

50、gt;<p>  unsigned char i,ch;</p><p><b>  ch=0;</b></p><p>  Set7279DAT;//DATA端置為高電平,輸入狀態(tài)</p><p>  Delay1us(50);//延時(shí)50μ</p><p>  for (i=0;i<

51、8;i++)</p><p><b>  {</b></p><p>  Set7279CLK;//置CLK高電平</p><p>  Delay1us(8);//延時(shí)8μ</p><p>  ch=ch<<1;//接收數(shù)據(jù)左移1位</p><p>  if (HD7279_

52、DAT)</p><p>  ch+=1;//接收1位數(shù)據(jù)</p><p>  Clr7279CLK;//置CLK低電平</p><p>  Delay1us(8);//延時(shí)8μ</p><p><b>  }</b></p><p>  Clr7279DAT;//接收完畢,DAT

53、A端重新置成低電平(輸出狀態(tài))</p><p>  return ch;</p><p><b>  }</b></p><p>  unsigned char code BdSeg[]={</p><p>  0x7e,0x30,0x6d,0x79, // 0 1 2 3 </p><p>  

54、0x33,0x5b,0x5f,0x70, // 4 5 6 7</p><p>  0x7f,0x7b,0x77,0x1f, // 8 9 a b</p><p>  0x4e,0x3d,0x4f,0x47, // c d e f</p><p>  0x00,0x01}; </p><p>  char GetKeyValue(void)/

55、/獲取鍵值</p><p><b>  {</b></p><p>  char KeyValue;</p><p>  if (CPT1CN&0x40) return -1;//無鍵按下 </p><p>  Send7279Byte(0x15);//發(fā)讀鍵盤指令 </p><p>

56、  KeyValue=Receive7279Byte();</p><p>  NOSELECT7279; //置CS高電平 </p><p>  return KeyValue; </p><p><b>  }</b></p><p>  //KS0108模塊</p><p>  #

57、define SELECTCS 0</p><p>  void LCD_WaitReady1(void) //判斷LCD控制芯片KS0108是否忙</p><p><b>  {</b></p><p>  LCD_DATA=0xff;</p><p><b>  _nop_();</b><

58、/p><p>  LCD_CS2=SELECTCS;</p><p><b>  LCD_RW=1;</b></p><p><b>  LCD_RS=0;</b></p><p><b>  LCD_E=1;</b></p><p>  while (LC

59、D_DATA&0x80);</p><p>  LCD_CS2=!SELECTCS;</p><p><b>  }</b></p><p>  void LCD_WaitReady2(void) //判斷LCD控制芯片KS0108是否忙</p><p><b>  {</b></p&

60、gt;<p>  LCD_DATA=0xff;</p><p><b>  _nop_();</b></p><p>  LCD_CS1=SELECTCS;</p><p><b>  LCD_RW=1;</b></p><p><b>  LCD_RS=0;</b&g

61、t;</p><p><b>  LCD_E=1;</b></p><p>  while (LCD_DATA&0x80);</p><p>  LCD_CS1=!SELECTCS;</p><p><b>  }</b></p><p>  void LCD_Wri

62、teCommand1(char ch) //向LCD控制芯片KS0108發(fā)送控制命令</p><p><b>  {</b></p><p>  LCD_WaitReady1();</p><p>  LCD_CS2=SELECTCS;</p><p><b>  LCD_RW=0;</b><

63、/p><p><b>  LCD_RS=0;</b></p><p>  LCD_DATA=ch;</p><p><b>  LCD_E=1;</b></p><p><b>  LCD_E=0;</b></p><p>  LCD_CS2=!SELECT

64、CS;</p><p><b>  }</b></p><p>  void LCD_WriteCommand2(char ch)//向LCD控制芯片KS0108發(fā)送控制命令</p><p><b>  {</b></p><p>  LCD_WaitReady2();</p>&l

65、t;p>  LCD_CS1=SELECTCS;</p><p><b>  LCD_RW=0;</b></p><p><b>  LCD_RS=0;</b></p><p>  LCD_DATA=ch;</p><p><b>  LCD_E=1;</b></p&

66、gt;<p><b>  LCD_E=0;</b></p><p>  LCD_CS1=!SELECTCS;</p><p><b>  }</b></p><p>  void LCD_WriteData1(char ch)//向LCD控制芯片KS0108發(fā)送數(shù)據(jù)命令</p><p&g

67、t;<b>  {</b></p><p>  LCD_WaitReady1();</p><p>  LCD_CS2=SELECTCS;</p><p><b>  LCD_RW=0;</b></p><p><b>  LCD_RS=1;</b></p>&l

68、t;p>  LCD_DATA=ch;</p><p><b>  LCD_E=1;</b></p><p><b>  LCD_E=0;</b></p><p>  LCD_CS2=!SELECTCS;</p><p><b>  }</b></p><

69、;p>  void LCD_WriteData2(char ch)//向LCD控制芯片KS0108發(fā)送數(shù)據(jù)命令</p><p><b>  {</b></p><p>  LCD_WaitReady2();</p><p>  LCD_CS1=SELECTCS;</p><p><b>  LCD_RW

70、=0;</b></p><p><b>  LCD_RS=1;</b></p><p>  LCD_DATA=ch;</p><p><b>  LCD_E=1;</b></p><p><b>  LCD_E=0;</b></p><p>

71、  LCD_CS1=!SELECTCS;</p><p><b>  }</b></p><p>  void LCD_WriteZM(char x,char y,char *Dot) { //顯示16*16點(diǎn)陣漢字</p><p><b>  char i;</b></p><p>  for

72、(i=0;i<16;i++){</p><p>  if ((x+i%8)<64){</p><p>  LCD_WriteCommand1(0xB8+y+i/8);</p><p>  LCD_WriteCommand1(0x40+x+i%8);</p><p>  LCD_WriteData1(Dot[i]);}</p

73、><p>  else{LCD_WriteCommand2(0xB8+y+i/8);</p><p>  LCD_WriteCommand2(0x40+x-64+i%8);</p><p>  LCD_WriteData2(Dot[i]);}}}</p><p>  void LCD_WriteHZ(char x,char y,char *Dot

74、) //顯示16*16點(diǎn)陣漢字</p><p><b>  {</b></p><p><b>  char i;</b></p><p>  for (i=0;i<32;i++)</p><p><b>  {</b></p><p>  if

75、((x+i%16)<64)</p><p><b>  {</b></p><p>  LCD_WriteCommand1(0xB8+y+i/16);</p><p>  LCD_WriteCommand1(0x40+x+i%16);</p><p>  LCD_WriteData1(Dot[i]);</p&

76、gt;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  LCD_WriteCommand2(0xB8+y+i/16);</p><p>  LCD_WriteCommand2(

77、0x40+x-64+i%16);</p><p>  LCD_WriteData2(Dot[i]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void L

78、CD_WriteHZcircle(char x,char y,char *Dot) //顯示循環(huán)漢字</p><p><b>  {</b></p><p><b>  char i;</b></p><p>  for (i=0;i<32;i++)</p><p><b>  {&

79、lt;/b></p><p>  if ((x+i%16)<64)</p><p><b>  {</b></p><p>  LCD_WriteCommand1(0xB8+y+i/16);</p><p>  LCD_WriteCommand1(0x40+x+i%16);</p><p&

80、gt;  LCD_WriteData1(Dot[i]);</p><p><b>  }</b></p><p>  else if((x+i%16)>63&&(x+i%16)<=127)</p><p><b>  {</b></p><p>  LCD_WriteCo

81、mmand2(0xB8+y+i/16);</p><p>  LCD_WriteCommand2(0x40+x-64+i%16);</p><p>  LCD_WriteData2(Dot[i]);</p><p><b>  }</b></p><p><b>  else</b></p&g

82、t;<p><b>  {</b></p><p>  LCD_WriteCommand1(0xB8+y+i/16);</p><p>  LCD_WriteCommand1(0x40+(x+i%16)%128);</p><p>  LCD_WriteData1(Dot[i]);</p><p><

83、b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void InitLCD(void) //初始化LCD</p><p><b>  {</b></p><

84、;p><b>  char i,j;</b></p><p>  LCD_RST=0;</p><p>  Delay1ms(1);</p><p>  LCD_RST=1;</p><p>  LCD_WriteCommand1(0xc0);</p><p>  LCD_WriteCom

85、mand2(0xc0);</p><p>  LCD_WriteCommand1(0x3f); //開顯示</p><p>  LCD_WriteCommand2(0x3f);</p><p>  for (j=0;j<8;j++)//清屏</p><p><b>  {</b></p>&

86、lt;p>  LCD_WriteCommand1(0xB8+j);//清左半屏</p><p>  LCD_WriteCommand1(0x40);</p><p>  for (i=0;i<64;i++)</p><p>  LCD_WriteData1(0x00);</p><p>  LCD_WriteCommand2(0

87、xB8+j);//清右半屏</p><p>  LCD_WriteCommand2(0x40);</p><p>  for (i=0;i<64;i++)</p><p>  LCD_WriteData2(0x00);</p><p><b>  }</b></p><p><b&g

88、t;  }</b></p><p>  void DispBmp(char *buf,int n)//顯示一幅位圖</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for (j=0;j<8;j++)//顯示位

89、圖</p><p><b>  {</b></p><p>  LCD_WriteCommand1(0xB8+j+n);</p><p>  LCD_WriteCommand1(0x40);</p><p>  for (i=0;i<64;i++)</p><p>  LCD_WriteD

90、ata1(buf[(j*2)*64+i]);</p><p>  LCD_WriteCommand2(0xB8+j+n);</p><p>  LCD_WriteCommand2(0x40);</p><p>  for (i=0;i<64;i++)</p><p>  LCD_WriteData2(buf[(j*2+1)*64+i]

91、);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void DispBmp1(char *buf,int n,int m)//顯示一幅位圖//128*16,n為頁值,m為列值</p><p><b>  {</b><

92、;/p><p><b>  int i,j;</b></p><p>  for (j=0;j<2;j++)//顯示位圖</p><p><b>  {</b></p><p><b>  if(m<=63)</b></p><p><

93、;b>  {</b></p><p>  LCD_WriteCommand1(0xB8+j+n);</p><p>  LCD_WriteCommand1(0x40);</p><p>  for(i=128-m;i<=127;i++)</p><p>  LCD_WriteData1(buf[i+128*j]);&

94、lt;/p><p>  for(i=0;i<=63-m;i++)</p><p>  LCD_WriteData1(buf[i+128*j]);</p><p>  LCD_WriteCommand2(0xB8+j+n);</p><p>  LCD_WriteCommand2(0x40);</p><p>  f

95、or(i=64-m;i<=127-m;i++)</p><p>  LCD_WriteData2(buf[128*j+i]);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  { </b></p&g

96、t;<p>  LCD_WriteCommand2(0xB8+j+n);</p><p>  LCD_WriteCommand2(0x40);</p><p>  for(i=192-m;i<=127;i++)</p><p>  LCD_WriteData2(buf[128*j+i]);</p><p>  for(i

97、=0;i<=127-m;i++)</p><p>  LCD_WriteData2(buf[128*j+i]);</p><p>  LCD_WriteCommand1(0xB8+j+n);</p><p>  LCD_WriteCommand1(0x40);</p><p>  for(i=128-m;i<=191-m;i++

98、)</p><p>  LCD_WriteData1(buf[i+128*j]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void Display (c

99、har *DispBuf,char ShowDot,char x,char y) //液晶屏顯示溫度、電壓,壓力值</p><p><b>  {</b></p><p>  char i,ch,j=-16;</p><p>  ShowDot--;</p><p>  for (i=2;i<6;i++)<

100、/p><p><b>  {</b></p><p><b>  j+=16;</b></p><p>  ch=DispBuf[i];</p><p>  switch(ch)</p><p>  {case 0: LCD_WriteZM(x+j,y,led0); br

101、eak;</p><p>  case 1: LCD_WriteZM(x+j,y,led1); break;</p><p>  case 2: LCD_WriteZM(x+j,y,led2); break;</p><p>  case 3: LCD_WriteZM(x+j,y,led3); break;</p><p>  c

102、ase 4: LCD_WriteZM(x+j,y,led4); break;</p><p>  case 5: LCD_WriteZM(x+j,y,led5); break;</p><p>  case 6: LCD_WriteZM(x+j,y,led6); break;</p><p>  case 7: LCD_WriteZM(x+j,y,le

103、d7); break;</p><p>  case 8: LCD_WriteZM(x+j,y,led8); break;</p><p>  case 9: LCD_WriteZM(x+j,y,led9); break;</p><p>  default: LCD_WriteZM(x+j,y,led); break;</p><

104、p><b>  }</b></p><p>  if(i==ShowDot)</p><p><b>  {</b></p><p>  LCD_WriteZM(x+j+8,y,Dot);</p><p><b>  }</b></p><p>&

105、lt;b>  }</b></p><p><b>  }</b></p><p>  unsigned int GetADCValue(char No);</p><p>  char GetKeyValue(void);</p><p>  void menulcd () //顯

106、示菜單</p><p><b>  {</b></p><p>  InitLCD();</p><p>  DispBmp(menu,0);</p><p><b>  }</b></p><p>  void TestLCD(void) //開頭文字的顯示&l

107、t;/p><p><b>  {</b></p><p><b>  char i;</b></p><p>  InitLCD();</p><p>  DispBmp(ss,1);//江蘇大學(xué)計(jì)算機(jī)學(xué)院</p><p>  Delay1s(0.5);</p>&

108、lt;p>  for (i=0;i<64;i++)</p><p><b>  {</b></p><p>  Delay1ms(100);</p><p>  LCD_WriteCommand1(0xc0+i%64);//設(shè)置起始行,實(shí)現(xiàn)向上滾動(dòng)</p><p>  LCD_WriteCommand2(0

109、xc0+i%64);</p><p><b>  }</b></p><p>  Delay1s(2);</p><p>  InitLCD();</p><p>  DispBmp(ss1,1);//單片機(jī)課程設(shè)計(jì)</p><p>  Delay1s(2);</p><p&g

110、t;  InitLCD();</p><p>  DispBmp(ss2,1);//液晶點(diǎn)陣顯示屏程序設(shè)計(jì)</p><p>  Delay1s(2);</p><p>  InitLCD();</p><p>  DispBmp(ss3,1);//作者:柳健 班級:計(jì)算機(jī)0902 學(xué)號:3090601061</p><p&

111、gt;  Delay1s(2);</p><p><b>  }</b></p><p>  void zuoyouyi()//漢字,圖畫左右移動(dòng)</p><p><b>  {</b></p><p>  char i,j,k;</p><p><b>  k=1

112、;</b></p><p>  for (j=0;j<8;j++)//漢字從左向右滾動(dòng)</p><p><b>  {</b></p><p>  for(i=0;i<14;i++)</p><p><b>  {</b></p><p>  Init

113、LCD();</p><p>  LCD_WriteHZcircle(k,j,Han); //顯示16*16點(diǎn)陣漢字'漢'</p><p><b>  k++;</b></p><p><b>  }</b></p><p>  Delay1ms(70);</p>&

114、lt;p><b>  }</b></p><p>  for (j=7;j>=0;j--)//漢字從右向左滾動(dòng)</p><p><b>  {</b></p><p>  for(i=0;i<14;i++)</p><p><b>  {</b></p&

115、gt;<p>  InitLCD();</p><p>  LCD_WriteHZcircle(k,j,Han); //顯示16*16點(diǎn)陣漢字'漢'</p><p><b>  k--;</b></p><p><b>  }</b></p><p>  Delay1

116、ms(70);</p><p><b>  } </b></p><p><b>  }</b></p><p>  void caiji () //溫度,電壓,壓力采集</p><p><b>  {</b></p><p><b&g

117、t;  char i;</b></p><p>  unsigned int w;</p><p>  char No,buf[6];</p><p>  No=1; </p><p>  w = GetADCValue(1);</p><p><b>  for (;;)</b&

118、gt;</p><p><b>  {</b></p><p>  i=GetKeyValue();</p><p>  if ((i>=0)&&(i<=3))//如果按鍵大于3,則不讀入鍵值</p><p><b>  No=i;</b></p><

119、p>  Delay1ms(250);</p><p>  buf[0]= No;</p><p>  buf[1]= ' ';</p><p>  buf[2]=(w%10000)/1000;</p><p>  buf[3]=(w%1000)/100;</p><p>  buf[4]=(w%1

120、00)/10;</p><p>  buf[5]=(w%10);</p><p>  if (No==1)</p><p><b>  {</b></p><p>  InitLCD();</p><p>  DispBmp(tem,1);//按1采集到溫度</p><p>

121、;  Display(buf,4,50,4);</p><p><b>  }</b></p><p>  else if (No==2)</p><p><b>  {</b></p><p>  InitLCD();</p><p>  DispBmp(volte,1);

122、//按2采集到電壓</p><p>  Display(buf,3,50,4);</p><p><b>  } </b></p><p>  else if (No==3)</p><p><b>  {</b></p><p>  InitLCD();<

123、/p><p>  DispBmp(pres,1);//按3采集到壓力</p><p>  Display(buf,4,50,4);</p><p><b>  }</b></p><p><b>  else</b></p><p>  break;//按0回到主菜單

124、</p><p>  w = GetADCValue(No);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  ADC模塊:</b></p><p>  #include "c8051

125、F020.h"</p><p>  #include <intrins.h></p><p><b>  /*</b></p><p>  壓力應(yīng)變片ADC試驗(yàn)</p><p>  運(yùn)行此程序,壓力值將在數(shù)碼管上顯示.用手觸摸應(yīng)變片</p><p><b>  觀察

126、壓力變化.</b></p><p><b>  */</b></p><p>  #define MUX_TEMP0x08</p><p>  #define MUX_VOLT0x01</p><p>  #define MUX_PRESS0x02</p><p> 

127、 unsigned int idata Temp, Press, Volt;</p><p>  unsigned char idata mux_select;</p><p>  sfr16 ADC0 = 0xbe; // ADC0 data</p><p>  void init_adc(void)</p>

128、<p><b>  {</b></p><p>  ADC0CN = 0x81; // ADC0 enabled; normal tracking</p><p>  // mode; ADC0 conversions are initiated </p><p>  // on writ

129、e to AD0BUSY; ADC0 data is</p><p>  // left-justified</p><p>  REF0CN = 0x07; // enable temp sensor, on-chip VREF,</p><p>  // and VREF output buffer</p>

130、<p>  mux_select = MUX_TEMP; // CPU on-chip temp sensor</p><p>  AMX0SL = MUX_TEMP; </p><p>  ADC0CF = (SYSCLK/2500000) << 3; // ADC conversion clock = 2.5MHz</p>&l

131、t;p>  //ADC0CF |= 0x01; // PGA gain = 2</p><p>  EIE2 &= ~0x02; // disable ADC0 EOC interrupt</p><p>  EIE1 &= ~0x04; //

132、disable ADC0 window compare interrupt</p><p><b>  }</b></p><p>  // On-chip temperature</p><p>  // AN1. 電位器</p><p>  // AN2. 應(yīng)變片</p><p>  v

133、oid read_analog_inputs(void)</p><p><b>  {</b></p><p>  long temp_long;</p><p>  AD0INT = 0; // clear conversion complete indicator</p><p

134、>  AD0BUSY = 1; // initiate conversion</p><p>  while (AD0INT == 0); // wait for conversion complete</p><p>  switch (mux_select)</p><p><b>

135、  {</b></p><p>  case MUX_TEMP:</p><p>  temp_long = ADC0 - 42380/2;</p><p>  temp_long = (temp_long * 200L) / 156;</p><p>  Temp=temp_long;</p><p> 

136、 AMX0SL = MUX_VOLT;// Select AIN1 for next read</p><p>  mux_select = MUX_VOLT;</p><p><b>  break;</b></p><p>  case MUX_VOLT:</p><p>  temp_long = ADC0;&

137、lt;/p><p>  Volt = 24*temp_long/655;</p><p>  AMX0SL = MUX_PRESS;// Select on-chip temp sensor</p><p>  mux_select = MUX_PRESS;</p><p><b>  break;</b></p&

138、gt;<p>  case MUX_PRESS:</p><p>  temp_long = ADC0;</p><p>  temp_long = 24*temp_long/655;</p><p>  Press = temp_long;</p><p>  AMX0SL = MUX_TEMP; </p>&

139、lt;p>  mux_select = MUX_TEMP;</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  AMX0SL = MUX_TEMP;</p><p>  mux_select = MUX_TEMP;<

140、/p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  unsigned int GetADCValue(char No)//采集數(shù)據(jù)</p><p><b&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論