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

下載本文檔

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

文檔簡介

1、<p>  點(diǎn)陣式液晶顯示屏的顯示程序設(shè)計</p><p><b>  一、設(shè)計目的</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.掌握的液晶

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

3、屏程序設(shè)計”“作者姓名、班級、學(xué)號” </p><p>  2)能進(jìn)行正常的模擬量采樣值顯示(溫度、壓力、電位) 。</p><p>  3) 改變字庫的內(nèi)容,顯示其它漢字。</p><p>  4) 改變頁地址或列地址,使顯示的內(nèi)容改變位置。 </p><p>  5)其它功能(如左、右移,上下卷、顯示圖片等)。</p>

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

5、>  液晶顯示模塊KS0108.c</p><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)主流程圖如下&l

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

7、gt;  主函數(shù):</b></p><p>  #include "c8051f020.h" </p><p>  #include <intrins.h> </p><p>  void Delay1us(unsigned char us)//延時us</p><p><b>  {&l

8、t;/b></p><p>  while (us)</p><p><b>  {</b></p><p>  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();</p><p><b>  --us;</b></p><p>&

9、lt;b>  }</b></p><p><b>  }</b></p><p>  void SYSCLK_Init (void)//系統(tǒng)時鐘初始化</p><p><b>  {</b></p><p>  int i;

10、 // delay counter</p><p>  OSCXCN = 0x67; // start external oscillator with</p><p>  // 18.432MHz crystal</p><p>  for (i=0; i < 256; i++) ; // Wai

11、t for osc. to start up</p><p>  while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle</p><p>  OSCICN = 0x88; // select external oscillator as SYSCLK<

12、;/p><p>  // source and enable missing clock</p><p>  // detector</p><p>  //OSCICN = 0x07; //interal 16MHZ</p><p><b>  }</b></p><p>  #define

13、PRT0CF P0MDOUT</p><p>  #define PRT1CF P1MDOUT</p><p>  #define PRT2CF P2MDOUT</p><p>  void PORT_Init (void) //串口初始化</p><p><b>  {</b></

14、p><p>  XBR0 = 0x07; // Enable SMBus, SPI0, and UART0</p><p>  XBR1 = 0x00;</p><p>  XBR2 = 0x44; // Enable crossbar and weak pull-ups&

15、lt;/p><p>  EMI0CF = 0x27;</p><p>  EMI0TC = 0x21;</p><p>  P74OUT = 0xFF;</p><p>  P0MDOUT = 0x15;</p><p>  P1MDOUT |= 0x3C; //P1.2-P1.5推挽輸出</p&g

16、t;<p>  P1 &= 0xc3;//P1.2-P1.5=0</p><p><b>  }</b></p><p>  void SPI0_Init (void) //spi0初始化</p><p><b>  {</b></p>&

17、lt;p>  SPI0CFG = 0x07; // data sampled on 1st SCK rising edge</p><p>  // 8-bit data words</p><p>  SPI0CFG|=0xC0;//CKPOL =1;</p><p>  SPI0CN = 0x03;

18、 // Master mode; SPI enabled; flags</p><p>  // cleared</p><p>  SPI0CKR = SYSCLK/2/8000000-1; // SPI clock <= 8MHz (limited by </p><p>  // EEPROM spec.)</

19、p><p><b>  }</b></p><p>  unsigned char Count1ms;</p><p>  void Timer0_Init (void) //計數(shù)器0初始化</p><p><b>  {</b></p><p> 

20、 CKCON|=0x8;</p><p>  TMOD|=0x1; //16Bit</p><p>  Count1ms=10;</p><p>  TR0 = 0; // STOP Timer0</p><p>  TH0 = (-SYSCLK/1000) >> 8;

21、 // set Timer0 to overflow in 1ms</p><p>  TL0 = -SYSCLK/1000;</p><p>  TR0 = 1; // START Timer0</p><p>  IE|= 0x2; </p><p><b>  }</b></p><

22、p>  void Timer0_ISR (void) interrupt 1 //1ms </p><p><b>  {</b></p><p>  TH0 = (-SYSCLK/1000) >> 8; </p><p>  TL0 = -SYSCLK/1000;</p><p>  if (C

23、ount1ms) Count1ms--;</p><p><b>  }</b></p><p>  void Delay1ms(unsigned char T) //延時1ms</p><p><b>  {</b></p><p>  Count1ms=T;</p>

24、<p>  while (Count1ms);</p><p><b>  }</b></p><p>  void Delay1s(unsigned char T) //延時1s</p><p><b>  {</b></p><p><b>  while (T

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

26、gt;  Delay1ms(200);</p><p><b>  T--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void TestLCD(void);//測試初始畫面</p><p&g

27、t;  char GetKeyValue(void);//獲取鍵值</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&g

28、t;<p>  void menulcd ();</p><p>  void zuoyouyi();</p><p>  void caiji ();</p><p>  void main (void) </p><p><b>  {</b></p><p><b>

29、  char i;</b></p><p>  unsigned int u;</p><p><b>  char Num;</b></p><p>  WDTCN = 0xde;</p><p>  WDTCN = 0xad; //關(guān)看門狗</p><p>  

30、SYSCLK_Init (); //初始化時鐘</p><p>  Timer0_Init();//初始化定時器</p><p>  PORT_Init (); //初始化IO口</p><p>  SPI0_Init (); //初始化SPI0</p><p>  init_ad

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

32、開中斷</p><p><b>  Num=0;</b></p><p>  menulcd ();</p><p>  u= GetADCValue(Num);//獲取按鍵值</p><p><b>  for (;;)</b></p><p><b>  {&l

33、t;/b></p><p>  i=GetKeyValue();</p><p>  if ((i<1)||(i>3))</p><p><b>  Num=i;</b></p><p>  Delay1ms(100);</p><p>  if (Num==0)</p&g

34、t;<p><b>  {</b></p><p>  menulcd ();//按0顯示主菜單</p><p><b>  }</b></p><p>  else if(Num==4)</p><p><b>  {</b></p><p&

35、gt;  TestLCD();//按4顯示開始畫面</p><p><b>  }</b></p><p>  else if(Num==5)</p><p><b>  {</b></p><p>  zuoyouyi();//按5漢字,圖畫左右移動</p><p><

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

37、DCValue(Num);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  KS0108模塊:</b></p><p>  #include "c8051F020.h"</p><

38、;p>  #include <intrins.h></p><p>  #include "dianzhen.c"//所有用到的漢字,圖畫點(diǎn)陣</p><p>  #define LCD_DATA P2</p><p>  #define LCD_RS P30</p><p>  #define LCD_

39、RW P31</p><p>  #define 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;

40、</p><p>  sbitHD7279_CLK=P1^6;</p><p>  #define NOSELECT7279 P5 |= 0x80//SPICS4(P57)=1</p><p>  #define SELECT7279 P5 &= ~(0x80) //SPICS4(P57)=0;</p><p>  

41、#define Set7279DAT HD7279_DAT=1</p><p>  #define Clr7279DAT HD7279_DAT=0</p><p>  #define Set7279CLK HD7279_CLK=1</p><p>  #define Clr7279CLK HD7279_CLK=0</p><p&g

42、t;<b>  //7279模塊</b></p><p>  void Delay1ms(unsigned char T);</p><p>  void Delay1s(unsigned char T);</p><p>  void Delay1us(unsigned char T);</p><p>  void

43、 Send7279Byte(unsigned char ch)//發(fā)送</p><p><b>  {</b></p><p><b>  char i;</b></p><p>  SELECT7279; //置CS低電平 </p><p>  Delay1us(50);//延時5

44、0μ</p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  if (ch&0x80)//輸出7位到HD7279A的DATA端 </p><p><b>  {</b></p><p>  Set7

45、279DAT;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Clr7279DAT;</p><p><b>  }</b><

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

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

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

49、t;/p><p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  Set7279CLK;//置CLK高電平</p><p>  Delay1us(8);//延時8μ</p><p>  ch=ch<<1;//接收數(shù)據(jù)左移1

50、位</p><p>  if (HD7279_DAT)</p><p>  ch+=1;//接收1位數(shù)據(jù)</p><p>  Clr7279CLK;//置CLK低電平</p><p>  Delay1us(8);//延時8μ</p><p><b>  }</b></p>

51、<p>  Clr7279DAT;//接收完畢,DATA端重新置成低電平(輸出狀態(tài))</p><p>  return ch;</p><p><b>  }</b></p><p>  unsigned char code BdSeg[]={</p><p>  0x7e,0x30,0x6d,0x79,

52、 // 0 1 2 3 </p><p>  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>

53、<p>  char GetKeyValue(void)//獲取鍵值</p><p><b>  {</b></p><p>  char KeyValue;</p><p>  if (CPT1CN&0x40) return -1;//無鍵按下 </p><p>  Send7279Byte(0x

54、15);//發(fā)讀鍵盤指令 </p><p>  KeyValue=Receive7279Byte();</p><p>  NOSELECT7279; //置CS高電平 </p><p>  return KeyValue; </p><p><b>  }</b></p><p> 

55、 //KS0108模塊</p><p>  #define SELECTCS 0</p><p>  void LCD_WaitReady1(void) //判斷LCD控制芯片KS0108是否忙</p><p><b>  {</b></p><p>  LCD_DATA=0xff;</p><p&g

56、t;<b>  _nop_();</b></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&

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

58、;p><b>  {</b></p><p>  LCD_DATA=0xff;</p><p><b>  _nop_();</b></p><p>  LCD_CS1=SELECTCS;</p><p><b>  LCD_RW=1;</b></p>&l

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

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

61、;<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><p><b>  LCD_E=0;</b><

62、;/p><p>  LCD_CS2=!SELECTCS;</p><p><b>  }</b></p><p>  void LCD_WriteCommand2(char ch)//向LCD控制芯片KS0108發(fā)送控制命令</p><p><b>  {</b></p><p&g

63、t;  LCD_WaitReady2();</p><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>&

64、lt;b>  LCD_E=1;</b></p><p><b>  LCD_E=0;</b></p><p>  LCD_CS1=!SELECTCS;</p><p><b>  }</b></p><p>  void LCD_WriteData1(char ch)//向LCD

65、控制芯片KS0108發(fā)送數(shù)據(jù)命令</p><p><b>  {</b></p><p>  LCD_WaitReady1();</p><p>  LCD_CS2=SELECTCS;</p><p><b>  LCD_RW=0;</b></p><p><b>

66、  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>  LCD_CS2=!SELECTCS;</p><p>&l

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

68、;/p><p><b>  LCD_RW=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_

69、E=0;</b></p><p>  LCD_CS1=!SELECTCS;</p><p><b>  }</b></p><p>  void LCD_WriteHZ(char x,char y,char *Dot) //顯示16*16點(diǎn)陣漢字</p><p><b>  {</b>&

70、lt;/p><p><b>  char i;</b></p><p>  for (i=0;i<32;i++)</p><p><b>  {</b></p><p>  if ((x+i%16)<64)</p><p><b>  {</b>

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

72、t;b>  else</b></p><p><b>  {</b></p><p>  LCD_WriteCommand2(0xB8+y+i/16);</p><p>  LCD_WriteCommand2(0x40+x-64+i%16);</p><p>  LCD_WriteData2(Dot[i

73、]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void LCD_WriteHZcircle(char x,char y,char *Dot) //顯示循環(huán)漢字</p>

74、;<p><b>  {</b></p><p><b>  char i;</b></p><p>  for (i=0;i<32;i++)</p><p><b>  {</b></p><p>  if ((x+i%16)<64)</p&g

75、t;<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><p><b> 

76、 }</b></p><p>  else if((x+i%16)>63&&(x+i%16)<=127)</p><p><b>  {</b></p><p>  LCD_WriteCommand2(0xB8+y+i/16);</p><p>  LCD_WriteCommand

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

78、CD_WriteCommand1(0xB8+y+i/16);</p><p>  LCD_WriteCommand1(0x40+(x+i%16)%128);</p><p>  LCD_WriteData1(Dot[i]);</p><p><b>  }</b></p><p><b>  }</b&g

79、t;</p><p><b>  }</b></p><p>  void InitLCD(void) //初始化LCD</p><p><b>  {</b></p><p><b>  char i,j;</b></p><p>  

80、LCD_RST=0;</p><p>  Delay1ms(1);</p><p>  LCD_RST=1;</p><p>  LCD_WriteCommand1(0xc0);</p><p>  LCD_WriteCommand2(0xc0);</p><p>  LCD_WriteCommand1(0x3f);

81、 //開顯示</p><p>  LCD_WriteCommand2(0x3f);</p><p>  for (j=0;j<8;j++)//清屏</p><p><b>  {</b></p><p>  LCD_WriteCommand1(0xB8+j);//清左半屏</p><

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

83、);</p><p>  for (i=0;i<64;i++)</p><p>  LCD_WriteData2(0x00);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void DispBmp(char *bu

84、f,int n)//顯示一幅位圖</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for (j=0;j<8;j++)//顯示位圖</p><p><b>  {</b></p><

85、;p>  LCD_WriteCommand1(0xB8+j+n);</p><p>  LCD_WriteCommand1(0x40);</p><p>  for (i=0;i<64;i++)</p><p>  LCD_WriteData1(buf[(j*2)*64+i]);</p><p>  LCD_WriteComma

86、nd2(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]);</p><p><b>  }</b></p>&l

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

88、<p>  for (j=0;j<2;j++)//顯示位圖</p><p><b>  {</b></p><p><b>  if(m<=63)</b></p><p><b>  {</b></p><p>  LCD_WriteCommand1

89、(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]);</p><p>  for(i=0;i<=63-m;i++)</p>&l

90、t;p>  LCD_WriteData1(buf[i+128*j]);</p><p>  LCD_WriteCommand2(0xB8+j+n);</p><p>  LCD_WriteCommand2(0x40);</p><p>  for(i=64-m;i<=127-m;i++)</p><p>  LCD_Write

91、Data2(buf[128*j+i]);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  { </b></p><p>  LCD_WriteCommand2(0xB8+j+n);</p><

92、;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=0;i<=127-m;i++)</p><p>  LCD_WriteData2(bu

93、f[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++)</p><p>  LCD_WriteData1(buf[i+128*j]);</p

94、><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void Display (char *DispBuf,char ShowDot,char x,char y) //液晶屏顯示溫度、電壓,壓力值&

95、lt;/p><p><b>  {</b></p><p>  char i,ch,j=-16;</p><p>  ShowDot--;</p><p>  for (i=2;i<6;i++)</p><p><b>  {</b></p><p>

96、;<b>  j+=16;</b></p><p>  ch=DispBuf[i];</p><p>  switch(ch)</p><p>  {case 0: LCD_WriteHZ(x+j,y,led0); break;</p><p>  case 1: LCD_WriteHZ(x+j,y,led1)

97、; break;</p><p>  case 2: LCD_WriteHZ(x+j,y,led2); break;</p><p>  case 3: LCD_WriteHZ(x+j,y,led3); break;</p><p>  case 4: LCD_WriteHZ(x+j,y,led4); break;</p><p&g

98、t;  case 5: LCD_WriteHZ(x+j,y,led5); break;</p><p>  case 6: LCD_WriteHZ(x+j,y,led6); break;</p><p>  case 7: LCD_WriteHZ(x+j,y,led7); break;</p><p>  case 8: LCD_WriteHZ(x+j

99、,y,led8); break;</p><p>  case 9: LCD_WriteHZ(x+j,y,led9); break;</p><p>  default: LCD_WriteHZ(x+j,y,led); break;</p><p><b>  }</b></p><p>  if(i==Sho

100、wDot)</p><p><b>  {</b></p><p>  LCD_WriteHZ(x+j+8,y,Dot);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</

101、b></p><p>  unsigned int GetADCValue(char No);</p><p>  char GetKeyValue(void);</p><p>  void menulcd () //顯示菜單</p><p><b>  {</b></p>&

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

103、gt;<b>  char i;</b></p><p>  InitLCD();</p><p>  DispBmp(ss,1);//江蘇大學(xué)計算機(jī)學(xué)院</p><p>  Delay1s(0.5);</p><p>  for (i=0;i<64;i++)</p><p><b&g

104、t;  {</b></p><p>  Delay1ms(100);</p><p>  LCD_WriteCommand1(0xc0+i%64);//設(shè)置起始行,實現(xiàn)向上滾動</p><p>  LCD_WriteCommand2(0xc0+i%64);</p><p><b>  }</b></p

105、><p>  Delay1s(2);</p><p>  InitLCD();</p><p>  DispBmp(ss1,1);//單片機(jī)課程設(shè)計</p><p>  Delay1s(2);</p><p>  InitLCD();</p><p>  DispBmp(ss2,1);//液晶點(diǎn)陣顯

106、示屏程序設(shè)計</p><p>  Delay1s(2);</p><p>  InitLCD();</p><p>  DispBmp(ss3,1);//作者:陳帥 班級:計算機(jī)0802 學(xué)號:48</p><p>  Delay1s(2);</p><p><b>  }</b></p&g

107、t;<p>  void zuoyouyi()//漢字,圖畫左右移動</p><p><b>  {</b></p><p>  char i,j,k;</p><p><b>  k=1;</b></p><p>  for (j=0;j<8;j++)//漢字從左向右滾動<

108、;/p><p><b>  {</b></p><p>  for(i=0;i<14;i++)</p><p><b>  {</b></p><p>  InitLCD();</p><p>  LCD_WriteHZcircle(k,j,Han); //顯示16*16

109、點(diǎn)陣漢字'漢'</p><p><b>  k++;</b></p><p><b>  }</b></p><p>  Delay1ms(70);</p><p><b>  }</b></p><p>  for (j=7;j>

110、=0;j--)//漢字從右向左滾動</p><p><b>  {</b></p><p>  for(i=0;i<14;i++)</p><p><b>  {</b></p><p>  InitLCD();</p><p>  LCD_WriteHZcircle(

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

112、p><b>  }</b></p><p>  void caiji () //溫度,電壓,壓力采集</p><p><b>  {</b></p><p><b>  char i;</b></p><p>  unsigned int w;</p&g

113、t;<p>  char No,buf[6];</p><p>  No=1; </p><p>  w = GetADCValue(1);</p><p><b>  for (;;)</b></p><p><b>  {</b></p><p>

114、  i=GetKeyValue();</p><p>  if ((i>=0)&&(i<=3))//如果按鍵大于3,則不讀入鍵值</p><p><b>  No=i;</b></p><p>  Delay1ms(250);</p><p>  buf[0]= No;</p>

115、<p>  buf[1]= ' ';</p><p>  buf[2]=(w%10000)/1000;</p><p>  buf[3]=(w%1000)/100;</p><p>  buf[4]=(w%100)/10;</p><p>  buf[5]=(w%10);</p><p>  

116、if (No==1)</p><p><b>  {</b></p><p>  InitLCD();</p><p>  DispBmp(tem,1);//按1采集到溫度</p><p>  Display(buf,4,50,4);</p><p><b>  }</b>&

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

118、;p><b>  } </b></p><p>  else if (No==3)</p><p><b>  {</b></p><p>  InitLCD();</p><p>  DispBmp(pres,1);//按3采集到壓力</p><p>  

119、Display(buf,4,50,4);</p><p><b>  }</b></p><p><b>  else</b></p><p>  break;//按0回到主菜單 </p><p>  w = GetADCValue(No);</p><p><

120、;b>  }</b></p><p><b>  }</b></p><p><b>  ADC模塊:</b></p><p>  #include "c8051F020.h"</p><p>  #include <intrins.h></p

121、><p><b>  /*</b></p><p>  壓力應(yīng)變片ADC試驗</p><p>  運(yùn)行此程序,壓力值將在數(shù)碼管上顯示.用手觸摸應(yīng)變片</p><p><b>  觀察壓力變化.</b></p><p><b>  */</b></p&g

122、t;<p>  #define MUX_TEMP0x08</p><p>  #define MUX_VOLT0x01</p><p>  #define MUX_PRESS0x02</p><p>  unsigned int idata Temp, Press, Volt;</p><p>  unsig

123、ned char idata mux_select;</p><p>  sfr16 ADC0 = 0xbe; // ADC0 data</p><p>  void init_adc(void)</p><p><b>  {</b></p><p>  ADC0CN = 0x

124、81; // ADC0 enabled; normal tracking</p><p>  // mode; ADC0 conversions are initiated </p><p>  // on write to AD0BUSY; ADC0 data is</p><p>  // left-justified&

125、lt;/p><p>  REF0CN = 0x07; // enable temp sensor, on-chip VREF,</p><p>  // and VREF output buffer</p><p>  mux_select = MUX_TEMP; // CPU on-chip temp sensor&

126、lt;/p><p>  AMX0SL = MUX_TEMP; </p><p>  ADC0CF = (SYSCLK/2500000) << 3; // ADC conversion clock = 2.5MHz</p><p>  //ADC0CF |= 0x01; // PGA gain = 2</

127、p><p>  EIE2 &= ~0x02; // disable ADC0 EOC interrupt</p><p>  EIE1 &= ~0x04; // disable ADC0 window compare interrupt</p><p><b>

128、  }</b></p><p>  // On-chip temperature</p><p>  // AN1. 電位器</p><p>  // AN2. 應(yīng)變片</p><p>  void read_analog_inputs(void)</p><p><b>  {</b

129、></p><p>  long temp_long;</p><p>  AD0INT = 0; // clear conversion complete indicator</p><p>  AD0BUSY = 1; // initiate conversion</p

130、><p>  while (AD0INT == 0); // wait for conversion complete</p><p>  switch (mux_select)</p><p><b>  {</b></p><p>  case MUX_TEMP:</p><p

131、>  temp_long = ADC0 - 42380/2;</p><p>  temp_long = (temp_long * 200L) / 156;</p><p>  Temp=temp_long;</p><p>  AMX0SL = MUX_VOLT;// Select AIN1 for next read</p><p&

132、gt;  mux_select = MUX_VOLT;</p><p><b>  break;</b></p><p>  case MUX_VOLT:</p><p>  temp_long = ADC0;</p><p>  Volt = 24*temp_long/655;</p><p>

133、  AMX0SL = MUX_PRESS;// Select on-chip temp sensor</p><p>  mux_select = MUX_PRESS;</p><p><b>  break;</b></p><p>  case MUX_PRESS:</p><p>  temp_long = A

134、DC0;</p><p>  temp_long = 24*temp_long/655;</p><p>  Press = temp_long;</p><p>  AMX0SL = MUX_TEMP; </p><p>  mux_select = MUX_TEMP;</p><p><b>  bre

135、ak;</b></p><p><b>  default:</b></p><p>  AMX0SL = MUX_TEMP;</p><p>  mux_select = MUX_TEMP;</p><p><b>  break;</b></p><p>&l

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

137、t;<p>  read_analog_inputs();</p><p>  read_analog_inputs();</p><p>  switch (No)</p><p><b>  {</b></p><p><b>  case 1:</b></p>&l

138、t;p>  return Temp;</p><p><b>  case 2:</b></p><p>  return Volt;</p><p><b>  case 3:</b></p><p>  if (Press<10) Press=0;</p><p&

139、gt;  return Press;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  3、調(diào)試過程</b></p><p>  將如下源文件main.c,c8051F020.h,ADC.c,KS0108.c加入到開發(fā)工

140、具中,調(diào)試程序,并下載到單片機(jī)中運(yùn)行,首先有“江蘇大學(xué)計算機(jī)學(xué)院”一行字向上滾動,然后顯示“液晶點(diǎn)陣顯示屏程序設(shè)計,班級,姓名”當(dāng)這些字顯示完畢后,進(jìn)入溫度、壓力、電位顯示模塊中,按1鍵,液晶屏上將顯示溫度**.**;按2鍵,液晶屏上將顯示電位*.***;按3鍵,液晶屏上將顯示壓力**.**。*代表數(shù)字。注意由于延時等原因,有時候按鍵后并不能轉(zhuǎn)換為另一種要求的顯示。系統(tǒng)基本按照課程設(shè)計的要求實現(xiàn)了所有功能,在程序設(shè)計和調(diào)試過程中,遇到和

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論