|
這是一個(gè)溫度監(jiān)控系統(tǒng)的lcd12864液晶顯示部分
0.png (41.68 KB, 下載次數(shù): 73)
下載附件
2016-9-4 22:51 上傳
0.png (57.08 KB, 下載次數(shù): 79)
下載附件
2016-9-4 22:52 上傳
所有資料下載:
一個(gè)溫度監(jiān)控系統(tǒng)的lcd12864液晶顯示部分.rar
(207.69 KB, 下載次數(shù): 46)
2016-9-4 22:53 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
源程序如下:
- #include<reg52.h>
- #include <stdlib.h>
- #include "GraphicsDriver.h"
- #define LCDCS2W_COM (*((uchar volatile xdata *) 0x2000))
- #define LCDCS2W_DAT (*((uchar volatile xdata *) 0x2001))
- #define LCDCS1W_COM (*((uchar volatile xdata *) 0x2004))
- #define LCDCS1W_DAT (*((uchar volatile xdata *) 0x2005))
- #define LCDCS2R_DAT (*((uchar volatile xdata *) 0x2003))
- #define LCDCS1R_DAT (*((uchar volatile xdata *) 0x2007))
- #define LCD_Wr1command(command) LCDCS1W_COM = command
- #define LCD_Wr2command(command) LCDCS2W_COM = command
- #define LCD_Wr1data(wrdata) LCDCS1W_DAT = wrdata
- #define LCD_Wr2data(wrdata) LCDCS2W_DAT = wrdata
- uchar pageaddr=0xb8;
- uchar xaddr=0x40;
- uchar startx=0xc0;
- uchar control=0x3f;
- uchar r[8]={0};
- uchar code DEC_HEX_TAB[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
- void delay5us()
- {
- uchar i;
- i=0;
- }
- /****************************************************************************
- *函數(shù)名:LCD_WriteByte
- *功能:向LCD寫(xiě)字節(jié)
- *取值范圍:x 橫坐標(biāo), y縱坐標(biāo), wrdata要寫(xiě)入的數(shù)據(jù)
- ****************************************************************************/
- void LCD_WriteByte(uchar x, uchar y, uchar wrdata)
- {
- uchar m;
- m=x;
- if(m<64)
- { LCD_Wr1command(xaddr+m);
- delay5us();
- LCD_Wr1command(pageaddr+y);
- delay5us();
- LCD_Wr1data(wrdata);
- delay5us();
- }
- else
- {
- m=m-64;
- LCD_Wr2command(xaddr+m);
- delay5us();
- LCD_Wr2command(pageaddr+y);
- delay5us();
- LCD_Wr2data(wrdata);
- delay5us();
- }
- }
- /****************************************************************************
- *函數(shù)名:LCD_Point
- *功能:在LCD中點(diǎn)亮一個(gè)像素點(diǎn)
- *xaddress:像素點(diǎn)橫坐標(biāo), yaddress:像素點(diǎn)的縱坐標(biāo)
- ****************************************************************************/
- void LCD_Point(uchar xaddress,uchar yaddress)
- {
- uchar wrdata,x,y;
- x=xaddress+2;
- yaddress=61-yaddress;
- y=yaddress>>3;
- wrdata=DEC_HEX_TAB[yaddress&0x07];
- if(y==7)
- {
- if(x!=2) {wrdata|=0x20;}
- else {wrdata=0x3f;}
- }
- else if(x==2) wrdata=0xff;
- LCD_WriteByte(x,y,wrdata);
- }
- /*************************************************************
- *函數(shù)名:HLine
- *功能:畫(huà)出水平線
- *其中:xaddress 為起始點(diǎn)橫坐標(biāo),yaddress為起始點(diǎn)縱坐標(biāo),
- * toyaddress為結(jié)束點(diǎn)橫坐標(biāo),坐標(biāo)原點(diǎn)位于LCD左下角
- *************************************************************/
- void HLine(uchar xaddress,uchar yaddress,uchar toxaddress)
- {
- uchar bak;
- if(xaddress>toxaddress)
- {
- bak = toxaddress;
- toxaddress = xaddress;
- xaddress = bak;
- }
- while(xaddress<=toxaddress)
- {
- LCD_Point(xaddress,yaddress);
- xaddress++;
- }
- }
- /*************************************************************
- *函數(shù)名:RLine
- *功能:畫(huà)出垂直線
- *其中:xaddress 為起始點(diǎn)橫坐標(biāo),yaddress為起始點(diǎn)縱坐標(biāo),
- * toyaddress為結(jié)束點(diǎn)縱坐標(biāo),坐標(biāo)原點(diǎn)位于LCD左下角
- *************************************************************/
- void RLine(uchar xaddress,uchar yaddress,uchar toyaddress)
- {
- uchar bak,x,y,longth,wrdata,i;
- if(yaddress<toyaddress)
- {
- bak = toyaddress;
- toyaddress = yaddress;
- yaddress = bak;
- }
- x=xaddress+2;
- yaddress=61-yaddress;
- toyaddress=61-toyaddress;
- longth=toyaddress-yaddress+1;
- while(yaddress<=toyaddress)
- {
- y=yaddress>>3;
- if(y==7) wrdata|=0x20;
- r[y]=wrdata=r[y]|DEC_HEX_TAB[yaddress&0x07];
- yaddress++;
- LCD_WriteByte(x,y,wrdata);
- }
- for(i=0;i<=7;i++)
- r[i]=0;
- }
- /*************************************************************
- *函數(shù)名:Line
- *功能:畫(huà)出水平線
- *其中:x0 為起始點(diǎn)橫坐標(biāo),y0為起始點(diǎn)縱坐標(biāo),
- * x1為結(jié)束點(diǎn)橫坐標(biāo),y1為結(jié)束點(diǎn)橫坐標(biāo)
- *************************************************************/
- void Line(uchar x0, uchar y0, uchar x1, uchar y1)
- { int dx; // 直線x軸差值變量
- int dy; // 直線y軸差值變量
- char dx_sym; // x軸增長(zhǎng)方向,為-1時(shí)減值方向,為1時(shí)增值方向
- char dy_sym; // y軸增長(zhǎng)方向,為-1時(shí)減值方向,為1時(shí)增值方向
- int dx_x2; // dx*2值變量,用于加快運(yùn)算速度
- int dy_x2; // dy*2值變量,用于加快運(yùn)算速度
- int di; // 決策變量
-
- x0=x0+1;
- x1=x1+1;
- dx = x1-x0; // 求取兩點(diǎn)之間的差值
- dy = y1-y0;
-
- /* 判斷增長(zhǎng)方向,或是否為水平線、垂直線、點(diǎn) */
- if(dx>0) // 判斷x軸方向
- { dx_sym = 1; // dx>0,設(shè)置dx_sym=1
- }
- else
- { if(dx<0)
- { dx_sym = -1; // dx<0,設(shè)置dx_sym=-1
- }
- else
- { // dx==0,畫(huà)垂直線,或一點(diǎn)
- RLine(x0, y0, y1);
- return;
- }
- }
-
- if(dy>0) // 判斷y軸方向
- { dy_sym = 1; // dy>0,設(shè)置dy_sym=1
- }
- else
- { if(dy<0)
- { dy_sym = -1; // dy<0,設(shè)置dy_sym=-1
- }
- else
- { // dy==0,畫(huà)水平線,或一點(diǎn)
- HLine(x0, y0, x1);
- return;
- }
- }
-
- /* 將dx、dy取絕對(duì)值 */
- dx = dx_sym * dx;
- dy = dy_sym * dy;
-
- /* 計(jì)算2倍的dx及dy值 */
- dx_x2 = dx*2;
- dy_x2 = dy*2;
-
- /* 使用Bresenham法進(jìn)行畫(huà)直線 */
- if(dx>=dy) // 對(duì)于dx>dy,則使用x軸為基準(zhǔn)
- { di = dy_x2 - dx;
- while(x0!=x1)
- { LCD_Point(x0, y0);
- x0 += dx_sym;
- if(di<0)
- { di += dy_x2; // 計(jì)算出下一步的決策值
- }
- else
- { di += dy_x2 - dx_x2;
- y0 += dy_sym;
- }
- }
- LCD_Point(x0, y0); // 顯示最后一點(diǎn)
- }
- else // 對(duì)于dx<=dy,則使用y軸為基準(zhǔn)
- { di = dx_x2 - dy;
- while(y0!=y1)
- { LCD_Point(x0, y0);
- y0 += dy_sym;
- if(di<0)
- { di += dx_x2;
- }
- else
- { di += dx_x2 - dy_x2;
- x0 += dx_sym;
- }
- }
- LCD_Point(x0, y0); // 顯示最后一點(diǎn)
- }
- }
- /**************************************************************
- *函數(shù)名:BuildXY()
- *功能:建立平面直角坐標(biāo)系
- *x0(x0>1) 為原點(diǎn)的橫坐標(biāo), y0(y0>1) 為原點(diǎn)的縱坐標(biāo),
- *x1(x1>2) 為橫軸截止點(diǎn), y1(y1>2)為縱軸截止點(diǎn)
- *張猛,2010-8-8
- **************************************************************/
- void BulidXY(uchar x0, uchar y0, uchar x1, uchar y1)
- {
- RLine(x0,y0,y1); //畫(huà)出縱軸
- HLine(x0,y0,x1); //畫(huà)出橫軸
- }
- /****************************************************************************
- * 名稱(chēng):Rectangle()
- * 功能:畫(huà)矩形。
- * 入口參數(shù):x0 矩形起點(diǎn)所在列的位置
- * y0 矩形起點(diǎn)所在行的位置
- * x1 矩形終點(diǎn)所在列的位置
- * y1 矩形終點(diǎn)所在行的位置
- * 出口參數(shù):無(wú)
- * 說(shuō)明:操作失敗原因是指定地址超出緩沖區(qū)范圍。
- ****************************************************************************/
- void Rectangle(uchar x0, uchar y0, uchar x1, uchar y1)
- { HLine(x0, y0, x1);
- HLine(x0, y1, x1);
- RLine(x0, y0, y1);
- RLine(x1, y0, y1);
- }
復(fù)制代碼
|
|