模塊化編程是為了更好的管理工程、方便以后移植代碼、使主函數(shù)或主文件(即有main函數(shù)的那個文件)變得簡單,因?yàn)槲覀冏x代碼時一般都是從主函數(shù)開始讀的。
成都創(chuàng)新互聯(lián)是專業(yè)的蛟河網(wǎng)站建設(shè)公司,蛟河接單;提供網(wǎng)站設(shè)計制作、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行蛟河網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
那怎么進(jìn)行模塊化呢?
簡單的就是一個功能包裝成一個函數(shù),要實(shí)現(xiàn)什么功能就調(diào)用哪個函數(shù)實(shí)現(xiàn)。
而復(fù)雜點(diǎn)的就是,一個功能模塊統(tǒng)一放一個C文件中,這個模塊相關(guān)的函數(shù)全部在這個C文件中實(shí)現(xiàn),在主文件(即有main函數(shù)的C文件)想要使用這個模塊的功能函數(shù),只需要包含它的頭文件就可以調(diào)用了。那頭文件就只是放這個功能模塊的函數(shù)聲明。
這樣子做,以后移植就方便多了。如果別的工程需要這個功能模塊,只需復(fù)制一下它的C文件已經(jīng)H文件到這個工程目錄下,就能使用。
比如實(shí)現(xiàn)LCD描字、劃線、畫圓等等函數(shù)都放在一個叫做lcd.c的文件中,那就應(yīng)該有一個叫做lcd.h的文件跟它對應(yīng),這個.h都是放這個.c文件對外函數(shù)的聲明。主文件的開頭出只需來一個#include"lcd.h"就可以調(diào)用這些畫圓劃線函數(shù)了。
這與液晶的驅(qū)動芯片有關(guān),比如帶字庫的12864液晶,畫點(diǎn)、畫線子函數(shù)如下:
/*******************************************************************/
// 畫任意點(diǎn)
/*******************************************************************/
void dian( unsigned char X, unsigned char Y, unsigned char Color )
{
unsigned char Row , Tier , Tier_bit ;
unsigned char ReadOldH, ReadOldL ;
send_com( 0x34 ) ;
send_com( 0x36 ) ;
Tier = X 4 ;
Tier_bit = X 0x0f ;
if( Y 32 )
{
Row = Y ;
}
else
{
Row = Y - 32 ;
Tier += 8 ;
}
send_com( Row + 0x80 ) ;
send_com( Tier + 0x80 ) ;
read_12864() ;
ReadOldH = read_12864() ;
ReadOldL = read_12864() ;
send_com( Row + 0x80 ) ;
send_com( Tier + 0x80 ) ;
if( Tier_bit 8 )
{
switch( Color)
{
case 0 : ReadOldH =( ~( 0x01 ( 7 - Tier_bit ))) ; break ;
case 1 : ReadOldH |= ( 0x01 ( 7 - Tier_bit )) ; break ;
case 2 : ReadOldH ^= ( 0x01 ( 7 - Tier_bit )) ; break ;
default : break ;
}
send_data( ReadOldH ) ;
send_data( ReadOldL ) ;
}
else
{
switch(Color)
{
case 0 : ReadOldL = (~( 0x01 ( 15 - Tier_bit ))) ; break ;
case 1 : ReadOldL |= ( 0x01 ( 15 - Tier_bit )) ; break ;
case 2 : ReadOldL ^= ( 0x01 ( 15 - Tier_bit )) ; break ;
default : break ;
}
send_data( ReadOldH ) ;
send_data( ReadOldL ) ;
}
send_com( 0x30 );
}
/**********************************************/
//畫水平線
/**********************************************/
void linex( unsigned char X0, unsigned char X1, unsigned char Y, unsigned char Color )
{ unsigned char Temp ;
if( X0 X1 )
{
Temp = X1 ;
X1 = X0 ;
X0 = Temp ;
}
for( ; X0 = X1 ; X0++ )
dian( X0, Y, Color ) ;
}
/**********************************************/
//畫垂直線
/**********************************************/
void liney( unsigned char X, unsigned char Y0, unsigned char Y1, unsigned char Color )
{
unsigned char Temp ;
if( Y0 Y1 )
{
Temp = Y1 ;
Y1 = Y0 ;
Y0 = Temp ;
}
for(; Y0 = Y1 ; Y0++)
dian( X, Y0, Color) ;
}
/**********************************************************/
//畫任意兩點(diǎn)間線段
/**********************************************************/
void line( unsigned char StartX, unsigned char StartY, unsigned char EndX, unsigned char EndY, unsigned char Color )
{
int t, distance;
int x = 0 , y = 0 , delta_x, delta_y ;
char incx, incy ;
delta_x = EndX - StartX ;
delta_y = EndY - StartY ;
if( delta_x 0 )
{
incx = 1;
}
else if( delta_x == 0 )
{
liney( StartX, StartY, EndY, Color ) ;
return ;
}
else
{
incx = -1 ;
}
if( delta_y 0 )
{
incy = 1 ;
}
else if(delta_y == 0 )
{
linex( StartX, EndX, StartY, Color ) ;
return ;
}
else
{
incy = -1 ;
}
delta_x = abs( delta_x );
delta_y = abs( delta_y );
if( delta_x delta_y )
{
distance = delta_x ;
}
else
{
distance = delta_y ;
}
dian( StartX, StartY, Color ) ;
for( t = 0 ; t = distance+1 ; t++ )
{
dian( StartX, StartY, Color ) ;
x += delta_x ;
y += delta_y ;
if( x distance )
{
x -= distance ;
StartX += incx ;
}
if( y distance )
{
y -= distance ;
StartY += incy ;
}
}
}
函數(shù)名: line
功 能: 在指定兩點(diǎn)間畫一直線
用 法: void far line(int x0, int y0, int x1, int y1);
程序例:#include graphics.h
#include stdlib.h
#include stdio.h
#include conio.hint main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int xmax, ymax; /* initialize graphics and local variables */
initgraph(gdriver, gmode, ""); /* read result of initialization */
errorcode = graphresult();
/* an error occurred */
if (errorcode != grOk)
{
printf("Graphics error: %s\n",
grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
} setcolor(getmaxcolor());
xmax = getmaxx();
ymax = getmaxy(); /* draw a diagonal line */
line(0, 0, xmax, ymax); /* clean up */
getch();
closegraph();
return 0;
}
名稱欄目:lcdc語言畫線函數(shù) lcd繪制曲線
標(biāo)題來源:http://m.rwnh.cn/article18/hhgpdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、云服務(wù)器、靜態(tài)網(wǎng)站、服務(wù)器托管、網(wǎng)頁設(shè)計公司、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)