版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 單片機(jī)課程設(shè)計報告</b></p><p> ——液晶點(diǎn)陣顯示屏程序設(shè)計</p><p> 姓 名: </p><p> 專業(yè)班級: 通信1002 </p><p> 學(xué) 號:
2、 </p><p> 指導(dǎo)老師: </p><p> 設(shè)計日期: 2013.01.07~2013.01.11 </p><p><b> 一、設(shè)計目的</b></p><p> 1、了解液晶顯示屏的工作原理;</p><p> 2、掌握液晶顯示屏顯示程序
3、的設(shè)計方法;</p><p> 3、熟練掌握C51系統(tǒng)仿真開發(fā)系統(tǒng)的應(yīng)用;</p><p> 4、加強(qiáng)單片機(jī)的綜合運(yùn)用能力、提高單片機(jī)的軟件編程和調(diào)試能力,為以后的學(xué)習(xí)和開發(fā)工作打下良好基礎(chǔ)。</p><p><b> 二、設(shè)計要求</b></p><p> 1、從下到上滾動顯示:“江蘇大學(xué)計算機(jī)學(xué)院”然后交替顯
4、示:“2010年單片機(jī)課程設(shè)計”“液晶點(diǎn)陣顯示屏程序設(shè)計”“作者姓名、班級、學(xué)號” </p><p> 2、改變字庫的內(nèi)容,顯示其它漢字。</p><p> 3、改變頁地址或列地址,使顯示的內(nèi)容改變位置。 </p><p> 4、其它功能不限,可自由發(fā)揮(左、右移,上下卷、顯示圖片、時鐘等)。</p><p> 5、能進(jìn)行正常的模
5、擬量采樣值顯示(溫度、壓力、電位) 。</p><p><b> 三、設(shè)計方案</b></p><p> 3.1 設(shè)計原理及思路</p><p> 實驗中用到的OCM12864液晶顯示模塊是128×64點(diǎn)陣型液晶顯示模塊,可顯示各種字符及圖形,可與CPU直接接口,具有8位標(biāo)準(zhǔn)數(shù)據(jù)總線、6條控制線及電源線。采用KS0107控制IC
6、。</p><p> OCM12864的邏輯工作電壓(Vcc):4.5~5.5V;工作溫度(Ta):0~55℃(常溫)/-20~70℃(寬溫);保存溫度(Tstg):-10~65℃。</p><p> 電氣特性(測試條件 Ta=25,Vdd=5.0+/-0.25V):輸入高電平(Vih):3.5Vmin;輸入低電平(Vil):0.55Vmax;輸出高電平(Voh):3.75Vmin;輸
7、出低電平(Vol):1.0Vmax;工作電流:2.0mAmax。</p><p> 程序可分為四個模塊:</p><p> 主函數(shù)模塊main.c;</p><p> 模數(shù)轉(zhuǎn)換模塊ADC.c;</p><p> 液晶顯示模塊KS0108.c;</p><p> 時鐘模塊I2C.c。</p>&l
8、t;p> 其中,主函數(shù)模塊做一些初始化和函數(shù)調(diào)用工作,模數(shù)轉(zhuǎn)換模塊主要將溫度、壓力和電壓的值轉(zhuǎn)化為數(shù)字量供液晶顯示用,時鐘模塊主要讀取時間,可以讓時鐘正常運(yùn)行,液晶顯示模塊將得到的模數(shù)轉(zhuǎn)換傳遞過來的數(shù)字量和時鐘模塊的時間顯示到液晶面板上。</p><p><b> 3.2 程序框圖</b></p><p><b> 1、主流程圖</b>
9、;</p><p> 2、主函數(shù)模塊main.c</p><p> 3、模數(shù)轉(zhuǎn)換模塊ADC.c</p><p> 4、液晶顯示模塊KS0108.c</p><p> 5、時鐘模塊I2C.c</p><p><b> 3.3 源程序</b></p><p> 主函
10、數(shù)模塊main.c</p><p> #include "c8051f020.h" </p><p> #include <intrins.h> </p><p> void Delay1us(unsigned char us)</p><p><b> {<
11、/b></p><p> while (us)</p><p><b> {</b></p><p> _nop_(); _nop_(); _nop_(); _nop_(); _nop_();</p><p><b> --us;</b></p><p><
12、;b> }</b></p><p><b> }</b></p><p> void SYSCLK_Init (void) //系統(tǒng)始終初始化</p><p><b> {</b></p><p> int i;
13、 </p><p> OSCXCN = 0x67; </p><p> for (i=0; i < 256; i++) ; </p><p> while (!(OSCXCN & 0x80)) ;
14、 </p><p> OSCICN = 0x88; </p><p><b> }</b></p><p> #define PRT
15、0CF P0MDOUT</p><p> #define PRT1CF P1MDOUT</p><p> #define PRT2CF P2MDOUT</p><p> void PORT_Init (void) //端口初始化函數(shù)</p><p><b> {</b></p&g
16、t;<p> XBR0 = 0x07; // Enable SMBus, SPI0, and UART0</p><p> XBR1 = 0x00;</p><p> XBR2 = 0x44; // Enable crossbar and weak pull-ups</p>
17、<p> EMI0CF = 0x27;</p><p> EMI0TC = 0x21;</p><p> P74OUT = 0xFF;</p><p> P0MDOUT = 0x15;</p><p> P1MDOUT |= 0x3C; //P1.2-P1.5推挽輸出</p><p&
18、gt; P1 &= 0xc3; //P1.2-P1.5=0</p><p><b> }</b></p><p> void SPI0_Init (void) //SPIO初始化</p><p><b> {</b></p><p> SPI0
19、CFG = 0x07; // data sampled on 1st SCK rising edge</p><p> SPI0CFG|=0xC0; //CKPOL =1;</p><p> SPI0CN = 0x03; // Master mode; SPI enabled; flags<
20、;/p><p> SPI0CKR = SYSCLK/2/8000000-1;// SPI clock <= 8MHz</p><p><b> }</b></p><p> unsigned char Count1ms;</p><p> void Timer0_Init (void)
21、 //定時器0 初始化</p><p><b> {</b></p><p> CKCON|=0x8;</p><p> TMOD|=0x1; //16Bit</p><p> Count1ms=10;</p><p> TR0 = 0;
22、 // STOP Timer0</p><p> TH0 = (-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1ms</p><p> TL0 = -SYSCLK/1000;</p><p> TR0 = 1;
23、 // START Timer0</p><p> IE|= 0x2; </p><p><b> }</b></p><p> void Timer0_ISR (void) interrupt 1 //定時器0中斷服務(wù)函數(shù)</p><p><b> {</b><
24、;/p><p> TH0 = (-SYSCLK/1000) >> 8; </p><p> TL0 = -SYSCLK/1000;</p><p> if (Count1ms) Count1ms--;</p><p><b> }</b></p><p> void Delay
25、1ms(unsigned char T) //延時1ms的函數(shù)</p><p><b> {</b></p><p> Count1ms=T;</p><p> while (Count1ms);</p><p><b> }</b></p><p>
26、void Delay1s(unsigned char T) //延時1s的函數(shù)</p><p><b> {</b></p><p><b> while (T)</b></p><p><b> {</b></p><p> Delay1ms(200);&
27、lt;/p><p> Delay1ms(200);</p><p> Delay1ms(200);</p><p> Delay1ms(200);</p><p> Delay1ms(200);</p><p><b> T--;</b></p><p><b&
28、gt; }</b></p><p><b> }</b></p><p> void init_adc(void);</p><p> void TestLCD(void);</p><p> void TestI2C(void);</p><p> void main (
29、void) </p><p><b> {</b></p><p> WDTCN = 0xde;</p><p> WDTCN = 0xad; //關(guān)看門狗</p><p> SYSCLK_Init (); //初始化時鐘</p><p> Timer
30、0_Init();//初始化定時器</p><p> PORT_Init (); //初始化IO口</p><p> SPI0_Init (); //初始化SPI0</p><p> init_adc(); //初始化ADC</p><p> CPT1CN|=0x8
31、0; //使能比較器1</p><p> REF0CN = 0x03; //使能片內(nèi)參考電壓</p><p> DAC0CN |= 0x80; //使能DAC0</p><p><b> DAC0H=0;</b></p><p><b> DAC0L=
32、0;</b></p><p> EA=1; //開中斷</p><p> TestLCD();</p><p> TestI2C();</p><p><b> }</b></p><p> 模數(shù)轉(zhuǎn)換模塊ADC.c</p><p> #
33、include "c8051F020.h"</p><p> #include <intrins.h></p><p> #define MUX_TEMP0x08</p><p> #define MUX_VOLT0x01</p><p> #define MUX_PRESS0x02&
34、lt;/p><p> unsigned int idata Temp, Press, Volt;</p><p> unsigned char idata mux_select;</p><p> sfr16 ADC0 = 0xbe; // ADC0 data</p><p> //AD轉(zhuǎn)換模塊初始化<
35、;/p><p> void init_adc(void)</p><p><b> {</b></p><p> ADC0CN = 0x81; </p><p> REF0CN = 0x07; </
36、p><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
37、t;p> EIE2 &= ~0x02; // disable ADC0 EOC interrupt</p><p> EIE1 &= ~0x04; // disable ADC0 window compare interrupt</p><p><b> }</b></p>
38、<p> void read_analog_inputs(void)</p><p><b> {</b></p><p> long temp_long;</p><p> AD0INT = 0; // clear conversion complete indicator</p&
39、gt;<p> AD0BUSY = 1; // initiate conversion</p><p> while (AD0INT == 0); // wait for conversion complete</p><p> switch (mux_select)</p><p><b&g
40、t; {</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>
41、; 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
42、;</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
43、><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>
44、<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;<
45、;/p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> unsigned int GetADCValue(char No) //讀取片內(nèi)溫度傳感器的轉(zhuǎn)換結(jié)果,并將轉(zhuǎn)換結(jié)果返回</p&
46、gt;<p><b> {</b></p><p> read_analog_inputs();</p><p> read_analog_inputs();</p><p> read_analog_inputs();</p><p> switch (No)</p><p&
47、gt;<b> {</b></p><p><b> case 1:</b></p><p> return Temp;</p><p><b> case 2:</b></p><p> return Volt;</p><p><b&
48、gt; case 3:</b></p><p> if (Press<10) Press=0;</p><p> return Press;</p><p><b> }</b></p><p><b> }</b></p><p> 液晶顯示模
49、塊KS0108.c</p><p> #include "c8051F020.h"</p><p> #include <intrins.h></p><p> //Test7279</p><p> sbitHD7279_DAT=P1^7;</p><p> sbitHD
50、7279_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_DA
51、T=1</p><p> #define Clr7279DAT HD7279_DAT=0</p><p> #define Set7279CLK HD7279_CLK=1</p><p> #define Clr7279CLK HD7279_CLK=0</p><p> void Delay1ms(unsigned cha
52、r T);</p><p> void Delay1s(unsigned char T);</p><p> void Delay1us(unsigned char T);</p><p> void Send7279Byte(unsigned char ch)//發(fā)送一個字節(jié)給7279的函數(shù)</p><p><b> {
53、</b></p><p><b> char i;</b></p><p> SELECT7279; //置CS低電平 </p><p> Delay1us(50); //延時50μ</p><p> for (i=0;i<8;i+
54、+)</p><p><b> {</b></p><p> if (ch&0x80) //輸出7位到HD7279A的DATA端 </p><p><b> {</b></p><p> Set7279DAT;</p><p>&l
55、t;b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> Clr7279DAT;</p><p><b> }</b></p><p> Set7279CLK;
56、 //置CLK高電平 </p><p> ch=ch<<1; //待發(fā)數(shù)據(jù)左移 </p><p> Delay1us(8); //延時8μ</p><p> Clr7279CLK; //置CLK低電平 </p><p> Delay1us(8)
57、; //延時50μ</p><p><b> }</b></p><p> Clr7279DAT; //發(fā)送完畢,DATA端置低,返回 </p><p><b> }</b></p><p> unsigned char Receive7279Byte(v
58、oid)</p><p><b> {</b></p><p> unsigned char i,ch;</p><p><b> ch=0;</b></p><p> Set7279DAT; //DATA端置為高電平,輸入狀態(tài)</p><p>
59、Delay1us(50); //延時50μ</p><p> for (i=0;i<8;i++)</p><p><b> {</b></p><p> Set7279CLK; //置CLK高電平</p><p> Delay1us(8); //延時8μ</p
60、><p> ch=ch<<1; //接收數(shù)據(jù)左移1位</p><p> if (HD7279_DAT)</p><p> ch+=1; //接收1位數(shù)據(jù)</p><p> Clr7279CLK; //置CLK低電平</p><p> Delay1us(8);
61、 //延時8μ</p><p><b> }</b></p><p> Clr7279DAT; //接收完畢,DATA端重新置成低電平(輸出狀態(tài))</p><p> return ch;</p><p><b> }</b></p><p> uns
62、igned char code BdSeg[]={</p><p> 0x7e,0x30,0x6d,0x79, // 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
63、,0x4f,0x47, // c d e f</p><p> 0x00,0x01}; </p><p> char GetKeyValue(void) //獲取鍵值</p><p><b> {</b></p><p> char KeyValue;</p>&
64、lt;p> if (CPT1CN&0x40) return -1; //無鍵按下 </p><p> Send7279Byte(0x15); //發(fā)讀鍵盤指令 </p><p> KeyValue=Receive7279Byte();</p><p> NOSELECT7279;
65、 //置CS高電平 </p><p> return KeyValue; </p><p><b> }</b></p><p> //KS0108模塊</p><p> #define LCD_DATA P2</p><p> #define LCD_RS P
66、30</p><p> #define LCD_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&
67、gt;<p> #define SELECTCS 0</p><p> char code Number[]={};/*-- 文字: 0123456789:/ --*/</p><p> char code screen[]={};//江蘇大學(xué)計算機(jī)學(xué)院//</p><p> char code screen1[]={};//2010年單
68、片機(jī)課程設(shè)計//</p><p> char code screen2[]={};//液晶點(diǎn)陣顯示屏程序設(shè)計//</p><p> char code screen3[]={};//姓名、班級、學(xué)號//</p><p> char code screen4[]={};//主菜單//</p><p> char code ni[]={}
69、;/*-- 文字: 你 --*/</p><p> char code hao[]={};/*-- 文字: 好 --*/</p><p> char code wen[]={};/*-- 文字: 溫 --*/</p><p> char code du[]={};/*-- 文字: 度 --*/</p><p>
70、 char code dian[]={};/*-- 文字: 電 --*/</p><p> char code ya1[]={};/*-- 文字: 壓 --*/</p><p> char code ya2[]={};/*-- 文字: 壓 --*/</p><p> char code li[]={};/*-- 文字: 力 --*/<
71、;/p><p> char code maohao[]={};/*-- “:” --*/</p><p> char code sheshidu[]={};/*-- 字母: C --*/</p><p> char code fu[]={};/*-- 字母: V --*/</p><p> char code niu[]={
72、};/*-- 字母: N --*/</p><p> //數(shù)字“0~9”“.”//</p><p> char code led0[]={};</p><p> char code led1[]={};</p><p> char code led2[]={};</p><p> char code led
73、3[]={};</p><p> char code led4[]={};</p><p> char code led5[]={};</p><p> char code led6[]={};</p><p> char code led7[]={};</p><p> char code led8[]={
74、};</p><p> char code led9[]={};</p><p> char code led[]={};</p><p> char code Dot[]={};</p><p> void LCD_WaitReady1(void) //判斷LCD控制芯片KS0108是否忙</p><p>&
75、lt;b> {</b></p><p> LCD_DATA=0xff;</p><p><b> _nop_();</b></p><p> LCD_CS2=SELECTCS;</p><p><b> LCD_RW=1;</b></p><p>
76、<b> LCD_RS=0;</b></p><p><b> LCD_E=1;</b></p><p> while (LCD_DATA&0x80);</p><p> LCD_CS2=!SELECTCS;</p><p><b> }</b></p&
77、gt;<p> void LCD_WaitReady2(void) //判斷LCD控制芯片KS0108是否忙</p><p><b> {</b></p><p> LCD_DATA=0xff;</p><p><b> _nop_();</b></p><p> LCD_C
78、S1=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 (LCD_DATA&0x80);</p&
79、gt;<p> LCD_CS1=!SELECTCS;</p><p><b> }</b></p><p> void LCD_WriteCommand1(char ch) //向LCD控制芯片KS0108發(fā)送控制命令</p><p><b> {</b></p><p>
80、LCD_WaitReady1();</p><p> LCD_CS2=SELECTCS;</p><p><b> LCD_RW=0;</b></p><p><b> LCD_RS=0;</b></p><p> LCD_DATA=ch;</p><p><b
81、> LCD_E=1;</b></p><p><b> LCD_E=0;</b></p><p> LCD_CS2=!SELECTCS;</p><p><b> }</b></p><p> void LCD_WriteCommand2(char ch)//向LCD控
82、制芯片KS0108發(fā)送控制命令</p><p><b> {</b></p><p> LCD_WaitReady2();</p><p> LCD_CS1=SELECTCS;</p><p><b> LCD_RW=0;</b></p><p><b>
83、 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_CS1=!SELECTCS;</p><p><
84、;b> }</b></p><p> void LCD_WriteData1(char ch)//向LCD控制芯片KS0108發(fā)送數(shù)據(jù)命令</p><p><b> {</b></p><p> LCD_WaitReady1();</p><p> LCD_CS2=SELECTCS;<
85、/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_E
86、=0;</b></p><p> LCD_CS2=!SELECTCS;</p><p><b> }</b></p><p> void LCD_WriteData2(char ch)//向LCD控制芯片KS0108發(fā)送數(shù)據(jù)命令</p><p><b> {</b></p
87、><p> LCD_WaitReady2();</p><p> LCD_CS1=SELECTCS;</p><p><b> LCD_RW=0;</b></p><p><b> LCD_RS=1;</b></p><p> LCD_DATA=ch;</p>
88、;<p><b> LCD_E=1;</b></p><p><b> LCD_E=0;</b></p><p> LCD_CS1=!SELECTCS;</p><p><b> }</b></p><p> void InitLCD(void)
89、 //初始化LCD</p><p><b> {</b></p><p><b> char i,j;</b></p><p> LCD_RST=0;</p><p> Delay1ms(1);</p><p> LCD_RST=1;</
90、p><p> LCD_WriteCommand1(0xc0);</p><p> LCD_WriteCommand2(0xc0);</p><p> LCD_WriteCommand1(0x3f); //開顯示</p><p> LCD_WriteCommand2(0x3f);</p><p> f
91、or (j=0;j<8;j++) //清屏</p><p><b> {</b></p><p> LCD_WriteCommand1(0xB8+j);//清左半屏</p><p> LCD_WriteCommand1(0x40);</p><p> for (i=0;i<64;
92、i++)</p><p> LCD_WriteData1(0x00);</p><p> LCD_WriteCommand2(0xB8+j);//清右半屏</p><p> LCD_WriteCommand2(0x40);</p><p> for (i=0;i<64;i++)</p><p> LC
93、D_WriteData2(0x00);</p><p><b> }</b></p><p><b> }</b></p><p> void LCD_WriteHZ(char x,char y,char *Dot) //顯示16*16點(diǎn)陣漢字</p><p><b> {<
94、/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><p><b> {<
95、;/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> }</b></p><
96、p><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_WriteData
97、2(Dot[i]);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void LCD_WriteSZ(char x,char y,char *Dat) //顯示16*8點(diǎn)陣數(shù)字
98、 </p><p><b> { </b></p><p><b> char i; </b></p><p> for (i=0;i<16;i++) </p><p> { </p><p> if ((x+i%8)<64)
99、//x代表列, 一個數(shù)字占8列,顯示在左半屏</p><p><b> { </b></p><p> LCD_WriteCommand1(0xB8+y+i/8); //設(shè)置頁地址 y表示頁</p><p> LCD_WriteCommand1(0x40+x+i%8); //設(shè)置列地址 x表示列,一個數(shù)字占8列</p>
100、<p> LCD_WriteData1(Dat[i]); </p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> LCD_WriteCommand2(0xB8+y+i/
101、8); </p><p> LCD_WriteCommand2(0x40+x-64+i%8);//減去64列,表示寫在右屏</p><p> LCD_WriteData2(Dat[i]); </p><p><b> } </b></p><p><b> } </b></p>
102、<p><b> } </b></p><p> void LCD_WriteZM(char x,char y,char *Dot) //顯示16*16點(diǎn)陣字母</p><p><b> { </b></p><p><b> char i;</b></p>
103、<p> for (i=0;i<16;i++)</p><p><b> {</b></p><p> if ((x+i%8)<64)</p><p><b> {</b></p><p> LCD_WriteCommand1(0xB8+y+i/8);</p&g
104、t;<p> LCD_WriteCommand1(0x40+x+i%8);</p><p> LCD_WriteData1(Dot[i]);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b&
105、gt;</p><p> LCD_WriteCommand2(0xB8+y+i/8);</p><p> LCD_WriteCommand2(0x40+x-64+i%8);</p><p> LCD_WriteData2(Dot[i]);</p><p><b> }</b></p><p&g
106、t;<b> }</b></p><p><b> }</b></p><p> void DispBmp(char *buf)//顯示一幅位圖</p><p><b> {</b></p><p><b> int i,j;</b></
107、p><p> for (j=0;j<8;j++)//顯示位圖</p><p><b> {</b></p><p> LCD_WriteCommand1(0xB8+j);</p><p> LCD_WriteCommand1(0x40);</p><p> for (i=0;i
108、<64;i++)</p><p> LCD_WriteData1(buf[(j*2)*64+i]);</p><p> LCD_WriteCommand2(0xB8+j);</p><p> LCD_WriteCommand2(0x40);</p><p> for (i=0;i<64;i++)</p>&
109、lt;p> LCD_WriteData2(buf[(j*2+1)*64+i]);</p><p><b> }</b></p><p><b> }</b></p><p> void DispBmpUp(char *buf) //顯示一幅位圖,上移</p><p><b&
110、gt; { </b></p><p><b> int i;</b></p><p> DispBmp(buf);</p><p> for (i=0;i<64;i++)</p><p><b> {</b></p><p> Delay1ms(
111、50);</p><p> LCD_WriteCommand1(0xc0+i%64);//設(shè)置起始行,實現(xiàn)向上滾動</p><p> LCD_WriteCommand2(0xc0+i%64);</p><p><b> }</b></p><p><b> } </b></p>
112、<p> void DispBmpDown(char *buf) //顯示一幅位圖,下移</p><p><b> { </b></p><p><b> int i;</b></p><p> DispBmp(buf);</p><p> for (i=63;i>
113、;=0;i--) </p><p><b> { </b></p><p> Delay1ms(50); </p><p> LCD_WriteCommand1(0xc0+i%64); //設(shè)置起始行,實現(xiàn)向下滾動 </p><p> LCD_WriteCommand2(0xc0+i%64); </p>
114、;<p><b> } </b></p><p><b> } </b></p><p> void DispBmpLeft(char *buf) //顯示一幅位圖,左移</p><p><b> { </b></p><p> int i,j,k
115、; </p><p> for (k=0;k<128;k++) </p><p><b> { </b></p><p> for (j=0;j<8;j++) //顯示位圖 </p><p><b> { </b></p><p> LCD_W
116、riteCommand1(0xB8+j); </p><p> LCD_WriteCommand1(0x40); </p><p> for (i=0;i<64;i++) //左移</p><p><b> { </b></p><p> if((i+k)<128) </p>
117、;<p> LCD_WriteData1(buf[(j*2)*64+i+k]); </p><p><b> else </b></p><p> LCD_WriteData1(buf[(j*2)*64+i+k-128]); </p><p><b> } </b></p><p&
118、gt; LCD_WriteCommand2(0xB8+j); </p><p> LCD_WriteCommand2(0x40); </p><p> for (i=0;i<64;i++) </p><p><b> { </b></p><p> if((i+k)<64) </p>
119、<p> LCD_WriteData2(buf[(j*2+1)*64+i+k]); </p><p><b> else </b></p><p> LCD_WriteData2(buf[(j*2+1)*64+i+k-128]); </p><p><b> } </b></p><
120、p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> void DispBmpRight(char *buf) //顯示一幅位圖,右移 </p><p><b> { <
121、;/b></p><p> int i,j,k; </p><p> for (k=0;k<128;k++) </p><p><b> { </b></p><p> for (j=0;j<8;j++) //顯示位圖 </p><p><b> { &
122、lt;/b></p><p> LCD_WriteCommand1(0xB8+j); </p><p> LCD_WriteCommand1(0x40); </p><p> for (i=0;i<64;i++) //右移</p><p><b> { </b></p><
123、;p> if((i-k)>0) </p><p> LCD_WriteData1(buf[(j*2)*64+i-k]); </p><p><b> else </b></p><p> LCD_WriteData1(buf[(j*2)*64+i-k+128]); </p><p><b>
124、 } </b></p><p> LCD_WriteCommand2(0xB8+j); </p><p> LCD_WriteCommand2(0x40); </p><p> for (i=0;i<64;i++) </p><p><b> { </b></p><p&
125、gt; if((i-k)>-64) </p><p> LCD_WriteData2(buf[(j*2+1)*64+i-k]); </p><p><b> else </b></p><p> LCD_WriteData2(buf[(j*2+1)*64+i-k+128]); </p><p><b&
126、gt; } </b></p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> void LCD_DispChar(char x,char y,char ch) //128*6
127、4 取值x=0-128 y=0-8</p><p><b> {</b></p><p> if ((ch>=0)&&(ch<=0xb))</p><p><b> {</b></p><p> LCD_WriteSZ(x,y,&Number[ch*16
128、]);</p><p><b> }</b></p><p><b> }</b></p><p> //液晶屏顯示溫度、電壓,壓力值</p><p> void Display (char *DispBuf,char ShowDot,char x,char y) </p>
129、<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><b>
130、 j+=16;</b></p><p> ch=DispBuf[i];</p><p> switch(ch)</p><p><b> {</b></p><p> case 0: LCD_WriteSZ(x+j,y,led0); break;</p><p> ca
131、se 1: LCD_WriteSZ(x+j,y,led1); break;</p><p> case 2: LCD_WriteSZ(x+j,y,led2); break;</p><p> case 3: LCD_WriteSZ(x+j,y,led3); break;</p><p> case 4: LCD_WriteSZ(x+j,y,led
132、4); break;</p><p> case 5: LCD_WriteSZ(x+j,y,led5); break;</p><p> case 6: LCD_WriteSZ(x+j,y,led6); break;</p><p> case 7: LCD_WriteSZ(x+j,y,led7); break;</p><p
133、> case 8: LCD_WriteSZ(x+j,y,led8); break;</p><p> case 9: LCD_WriteSZ(x+j,y,led9); break;</p><p> default: LCD_WriteZM(x+j,y,led); break;</p><p><b> }</b>&l
134、t;/p><p> if(i==ShowDot)</p><p> LCD_WriteSZ(x+j+8,y,Dot);</p><p><b> }</b></p><p><b> }</b></p><p> void ShowVolt(void) /
135、/顯示電壓</p><p><b> { </b></p><p> LCD_WriteHZ(2,3,dian); </p><p> LCD_WriteHZ(20,3,ya1); </p><p> LCD_WriteHZ(36,3,maohao); </p><p> LCD_Wri
136、teZM(108,3,fu); </p><p><b> } </b></p><p> void ShowPress(void) //顯示壓力</p><p><b> { </b></p><p> LCD_WriteHZ(2,3,ya2); </p>&l
137、t;p> LCD_WriteHZ(20,3,li); </p><p> LCD_WriteHZ(36,3,maohao); </p><p> LCD_WriteZM(108,3,niu); </p><p><b> } </b></p><p> void ShowTemp(void)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計---點(diǎn)陣式液晶顯示屏的顯示程序設(shè)計
- 單片機(jī)課程設(shè)計報告——點(diǎn)陣式液晶顯示屏的顯示程序設(shè)計
- 單片機(jī)原理及應(yīng)用課程設(shè)計--點(diǎn)陣式液晶顯示屏的顯示程序設(shè)計
- 單片機(jī)課程設(shè)計---點(diǎn)陣電子顯示屏設(shè)計
- 單片機(jī)課程設(shè)計--點(diǎn)陣led電子顯示屏
- 單片機(jī)課程設(shè)計---點(diǎn)陣led電子顯示屏
- 單片機(jī)課程設(shè)計---led點(diǎn)陣電子顯示屏的設(shè)計
- 單片機(jī)課程設(shè)計之led點(diǎn)陣電子顯示屏設(shè)計
- 單片機(jī)課程設(shè)計報告--- led點(diǎn)陣動態(tài)顯示屏設(shè)計
- led顯示屏單片機(jī)課程設(shè)計
- 單片機(jī)課程設(shè)計lcd顯示屏設(shè)計
- 課程設(shè)計--點(diǎn)陣式lcd液晶顯示屏設(shè)計
- 基于單片機(jī)的led點(diǎn)陣顯示屏設(shè)計
- 單片機(jī)課程設(shè)計---基于51單片機(jī)的電子顯示屏設(shè)計
- led點(diǎn)陣顯示屏課程設(shè)計
- 基于單片機(jī)的點(diǎn)陣電子顯示屏的設(shè)計
- 基于單片機(jī)的led點(diǎn)陣電子顯示屏設(shè)計
- 基于單片機(jī)的LED點(diǎn)陣顯示屏設(shè)計定稿.doc
- 基于單片機(jī)的LED點(diǎn)陣顯示屏設(shè)計初稿.doc
- led顯示屏單片機(jī)課程設(shè)計說明書
評論
0/150
提交評論