模塊化編程是為了更好的管理工程、方便以后移植代碼、使主函數(shù)或主文件(即有main函數(shù)的那個(gè)文件)變得簡(jiǎn)單,因?yàn)槲覀冏x代碼時(shí)一般都是從主函數(shù)開(kāi)始讀的。

成都創(chuàng)新互聯(lián)是專(zhuān)業(yè)的蛟河網(wǎng)站建設(shè)公司,蛟河接單;提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行蛟河網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
那怎么進(jìn)行模塊化呢?
簡(jiǎn)單的就是一個(gè)功能包裝成一個(gè)函數(shù),要實(shí)現(xiàn)什么功能就調(diào)用哪個(gè)函數(shù)實(shí)現(xiàn)。
而復(fù)雜點(diǎn)的就是,一個(gè)功能模塊統(tǒng)一放一個(gè)C文件中,這個(gè)模塊相關(guān)的函數(shù)全部在這個(gè)C文件中實(shí)現(xiàn),在主文件(即有main函數(shù)的C文件)想要使用這個(gè)模塊的功能函數(shù),只需要包含它的頭文件就可以調(diào)用了。那頭文件就只是放這個(gè)功能模塊的函數(shù)聲明。
這樣子做,以后移植就方便多了。如果別的工程需要這個(gè)功能模塊,只需復(fù)制一下它的C文件已經(jīng)H文件到這個(gè)工程目錄下,就能使用。
比如實(shí)現(xiàn)LCD描字、劃線(xiàn)、畫(huà)圓等等函數(shù)都放在一個(gè)叫做lcd.c的文件中,那就應(yīng)該有一個(gè)叫做lcd.h的文件跟它對(duì)應(yīng),這個(gè).h都是放這個(gè).c文件對(duì)外函數(shù)的聲明。主文件的開(kāi)頭出只需來(lái)一個(gè)#include"lcd.h"就可以調(diào)用這些畫(huà)圓劃線(xiàn)函數(shù)了。
這與液晶的驅(qū)動(dòng)芯片有關(guān),比如帶字庫(kù)的12864液晶,畫(huà)點(diǎn)、畫(huà)線(xiàn)子函數(shù)如下:
/*******************************************************************/
// 畫(huà)任意點(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 );
}
/**********************************************/
//畫(huà)水平線(xiàn)
/**********************************************/
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 ) ;
}
/**********************************************/
//畫(huà)垂直線(xiàn)
/**********************************************/
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) ;
}
/**********************************************************/
//畫(huà)任意兩點(diǎn)間線(xià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)間畫(huà)一直線(xià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;
}
名稱(chēng)欄目:lcdc語(yǔ)言畫(huà)線(xiàn)函數(shù) lcd繪制曲線(xiàn)
標(biāo)題來(lái)源:http://chinadenli.net/article18/hhgpdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、云服務(wù)器、靜態(tài)網(wǎng)站、服務(wù)器托管、網(wǎng)頁(yè)設(shè)計(jì)公司、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)