把主函數(shù)改成這樣:
站在用戶的角度思考問題,與客戶深入溝通,找到松滋網(wǎng)站設計與松滋網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務覆蓋松滋地區(qū)。
void main()
{
uchar i,j,k=0x80;
while(1)
{
for(i=8;i0;i--)
{
for(j=250;j0;j--)
{
P2=0xff;
P0=DSY_CODE[8-i];
P2=k;
DelayMS(3);
}
}
k=_crol_(k,1);
}
}
補充:
你要是想從左到右依次顯示0到7,并且依次一個一個的顯示過去,那你只需要改你一個數(shù)組里的內(nèi)容就OK了。
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
具體怎么改要看你電路是怎么接的,就是任意時刻只讓一個發(fā)光管點亮,很明顯,你上面的這個數(shù)組里的數(shù)據(jù)估計不能完成你所要的功能,我也沒法知道你的電路,你要按你的電路去改這個數(shù)組的內(nèi)容,就是任意一個數(shù)同時只讓八個數(shù)碼管其中一個點亮就OK了,至于細節(jié),還是你自己慢慢試,印象深些。呵呵。
前面我們說的都是無參數(shù)無返回值的函數(shù),實際程序中,我們經(jīng)常使用到帶參數(shù)有返回值的函數(shù)。
一、函數(shù)參數(shù)傳遞
1.形式參數(shù)和實際參數(shù)
函數(shù)的調(diào)用值把一些表達式作為參數(shù)傳遞給函數(shù)。函數(shù)定義中的參數(shù)是形式參數(shù),函數(shù)的調(diào)用者提供給函數(shù)的參數(shù)叫實際參數(shù)。在函數(shù)調(diào)用之前,實際參數(shù)的值將被拷貝到這些形式參數(shù)中。
2.參數(shù)傳遞
先看一個例子:
void a(int); /*注意函數(shù)聲明的形式*/
main()
{
int num;
scanf("%d",num);
a(num); /*注意調(diào)用形式*/
}
void a(int num_back) /*注意定義形式*/
{
printf("%d\n",num_back);
}
在主函數(shù)中,先定義一個變量,然后輸入一個值,在a()這個函數(shù)中輸出。當程序運行a(num);這一步時,把num的值賦值給num_back,在運行程序過程中,把實際參數(shù)的值傳給形式參數(shù),這就是函數(shù)參數(shù)的傳遞。
形參和實參可能不只一個,如果多于一個時,函數(shù)聲明、調(diào)用、定義的形式都要一一對應,不僅個數(shù)要對應,參數(shù)的數(shù)據(jù)類型也要對應。
void a(int,float);
main()
{
int num1;
float num2;
scanf("%d",num1);
scanf("%f",num2);
a(num1,num2);
}
void a(int num1_back,float num2_back)
{
printf("%d,%f\n",num1_back,num2_back);
}
上面的例子中,函數(shù)有兩個參數(shù),一個是整型,一個是浮點型,那么在聲明、調(diào)用、定義的時候,不僅個數(shù)要一樣,類型也要對應。如果不對應,有可能使的編譯錯誤,即使沒錯誤,也有可能讓數(shù)據(jù)傳遞過程中出現(xiàn)錯誤。
再看一個例子:
void a(int);
main()
{
int num;
scanf("%d",num);
a(num);
}
void a(int num)
{
printf("%d\n",num);
}
看上面的例子,形式參數(shù)和實際參數(shù)的標識符都是num,程序把實際參數(shù)num的值傳遞給形式參數(shù)num。有些人可能就不明白了,既然兩個都是num,為什么還要傳遞呢?干脆這樣不就行了嗎:
void a();
main()
{
int num;
scanf("%d",num);
a();
}
void a()
{
printf("%d\n",num);
}
其實不然,這就要涉及到標識符作用域的問題。作用域的意思就是說,哪些變量在哪些范圍內(nèi)有效。一個標識符在一個語句塊中聲明,那么這個標識符僅在當前和更低的語句塊中可見,在函數(shù)外部的其實地方不可見,其他地方同名的標識符不受影響,后面我們會系統(tǒng)講解作用域的問題。在這兒你就要知道兩個同名的變量在不同的函數(shù)中是互不干擾的。
前面將的都是變量與變量之間的值傳遞,其實函數(shù)也可以傳遞數(shù)組之間的值。看下面的例子:
void a(int []);
main()
{
int array[5],i;
for(i=0;i5;i++) scanf("%d",array[i]);
a(array);
}
void a(int array[])
{
int i;
for(i=0;i5;i++) printf("%d\t",array[i]);
printf("\n");
}
#include math.h
int primeNum(int p)
{
int i, q;
/* Negative number is not a prime */
if (p 0)
return 0;
q = (int) sqrt(p);
for (i = 2; i q; i++)
if ((p % i) == 0)
return 0;
/* No factor of p is found */
return 1;
}
/*原理::
從2-sqrt(x)的數(shù)中看是否有可以整除的, 如果沒有, 則為素數(shù).
*/
#include dos.h
#include bios.h
#include conio.h
#include stdio.h
#include stdlib.h
#include math.h
#define LEFT 0x4b00 /*左*/
#define RIGHT 0x4d00 /*右*/
#define DOWN 0x5000 /*下*/
#define UP 0x4800 /*上*/
#define SPACE 0x3920 /*空格*/
#define ESC 0x011b /* ESC鍵*/
#define ENTER 0x1c0d /*回車鍵*/
#define Backspace 0xe08 /*擦除鍵*/
#define ALT_B 12288 /*組合鍵ALT_B */
#define ALT_M 12800/*組合鍵ALT_M */
#define ALT_H 8960/*組合鍵ALT_H */
int key;/*按鍵變量*/
int textx,texty;/*光標坐標,x行,y列*/
struct menustruct/*菜單用的結(jié)構(gòu)體*/
{
char name[10];/*主菜單名*/
char str[10][20];/*選項*/
int n;/*選項數(shù)*/
}ml[3];/*使用了3個,可根據(jù)需要增刪*/
typedef struct BookList/*書的結(jié)構(gòu)體*/
{
char num[20];/*圖書編號*/
char name[20];/*書名*/
int price;/*書的價格*/
char person[20];/*借閱人*/
int yes;/*判斷書是否存在或者已經(jīng)借出,1存在,0借出*/
struct BookList *next;
}Book;
typedef struct MemberList/*會員的結(jié)構(gòu)體*/
{
char name[20];/*會員的姓名*/
char sex[2];/*會員的性別*/
int age;/*會員的年齡*/
struct MemberList *next;
}Member;
char save[4096];/*保存文本區(qū)域空間*/
/*char sav1[4096];*/
char c[4096];/*清屏專用空間*/
int i,j;/*常用變量*/
void Menu();/*初始化界面*/
void Selectitem();/*定義菜單*/
void DrawSelectitem();/*顯示主菜單*/
void BlackText(int x,int y,char *z);/*選中菜單*/
void RedText(int x,int y,char *z);/*正常菜單*/
void Run();/*具體操作過程*/
void DrawMl(int n);/*顯示下拉菜單*/
void MoveMl(int n,int x);/*菜單選項的控制*/
void Enter(int m,int n);/*菜單選項的具體功能*/
void BookAdd();/*添加圖書*/
void BookConsult();/*圖書查詢*/
void BookDel();/*刪除圖書資料*/
void BookBorrow();/*借書*/
void BookReturn(); /*還書*/
void MemberAdd(); /*增加會員*/
void MemberConsult();/*查詢會員*/
void MemberDel(); /*刪除會員*/
void MemberBook(); /*查詢會員借書信息*/
void Help(); /*幫助*/
void Ver(); /*版本信息*/
void ClrScr();/*自定義清屏函數(shù)*/
void DrawFrame(int left,int up,int right,int down,int textcolor,int backgroundcolor);/*畫邊框*/
/***主函數(shù)****/
void main(void)
{
Menu();/*初始化界面*/
Run();/*具體操作過程*/
}
/*初始化界面*/
void Menu()
{
system("cls"); /*調(diào)用系統(tǒng)的清屏命令*/
textbackground(BLUE);/*將背景設置為藍色*/
window(1,1,25,80);
clrscr();
textx=3;/*光標初始化位置*/
texty=2;
gotoxy(1,2);
printf("%c",218);/*畫左上角*/
for(i=0;i78;i++)
printf("%c",196); /*畫水平直線*/
printf("%c",191);/*畫右上角*/
for(i=3;i=23;i++)
{
gotoxy(1,i);
printf("%c",179); /*畫垂直線*/
gotoxy(80,i);
printf("%c",179);
}
printf("%c",192); /*畫左下角*/
for(i=0;i78;i++)
printf("%c",196);
printf("%c",217); /*畫右下角*/
gotoxy(1,1);
textcolor(7); /*設置灰色*/
for(i=0;i80;i++)
cprintf("%c",219);/*用符號實現(xiàn)畫主菜單的灰色背景區(qū)*/
Selectitem(); /*調(diào)用選項函數(shù)*/
DrawSelectitem(); /*畫選項*/
gettext(2,3,78,23,c); /*保存當前文本區(qū)域*/
}
/*定義菜單*/
void Selectitem()
{
strcpy(ml[0].name,"Book");/*下面的具體選項補空格是為了各菜單黑色背景相同*/
strcpy(ml[0].str[0],"Add ");/*添加圖書*/
strcpy(ml[0].str[1],"Consult ");/*查詢圖書*/
strcpy(ml[0].str[2],"Del ");/*刪除圖書資料*/
strcpy(ml[0].str[3],"Borrow ");/*借書*/
strcpy(ml[0].str[4],"Return ");/*還書*/
strcpy(ml[0].str[5],"Exit ");/*退出系統(tǒng)*/
ml[0].n=6; /*保存菜單的項數(shù)*/
strcpy(ml[1].name,"Member");
strcpy(ml[1].str[0],"Add ");/*添加新會員*/
strcpy(ml[1].str[1],"Consult ");/*查詢會員資料*/
strcpy(ml[1].str[2],"Del ");/*刪除會員資料*/
strcpy(ml[1].str[3],"Memberbook ");
ml[1].n=4;
strcpy(ml[2].name,"Help");/*系統(tǒng)幫助*/
strcpy(ml[2].str[0],"This System ");
strcpy(ml[2].str[1],"Ver ");
ml[2].n=2;
}
/*顯示主單名*/
void DrawSelectitem()
{
for(i=0;i3;i++)
RedText(i,1,ml[i].name); /*顯示主菜單名,且首字母為紅色*/
}
/*正常顯示菜單*/
void RedText(int x,int y,char *z)
{
textbackground(7); /*設置背景顏色為淺灰色*/
gotoxy(3+x*20,y);
for(j=0;z[j];j++)
{
if(j==0)
textcolor(RED);/*第一個字母顯示紅色*/
else
textcolor(BLACK); /*設置黑色*/
cprintf("%c",z[j]); /*輸出菜單名*/
}
}
/*顯示選中菜單*/
void BlackText(int x,int y,char *z)
{
textbackground(0); /*設置背景顏色為黑色*/
textcolor(15); /*設置文本顏色為白色*/
gotoxy(3+20*x,y);/*定位坐標*/
cputs(z); /*輸出菜單名字符串*/
}
/*按鍵操作過程*/
void Run()
{
while(1)
{
gotoxy(texty,textx);
key=bioskey(0);/*接收按鍵*/
switch(key)
{
case ALT_B:
case ESC: DrawMl(0);break; /*顯示下拉菜單1*/
case ALT_M: DrawMl(1);break;/*顯示下拉菜單2*/
case ALT_H: DrawMl(2);/*顯示下拉菜單3*/
case UP: /*上光標鍵的操作控制*/
{
if(textx==3)
textx=23;
textx--;
gotoxy(texty,textx);
}break;
case DOWN: /*下光標鍵的操作控制*/
{
if(textx==23)
textx=3;
textx++;
gotoxy(texty,textx);
}break;
case LEFT: /*左光標鍵的操作控制*/
{
if(texty==2)
texty=79;
texty--;
gotoxy(texty,textx);
}break;
case Backspace: /*擦除鍵的設置*/
{
if(texty==2textx==3)
continue;
else
{
if(texty!=2)
texty--; /*擦除鍵的細節(jié)問題,先擦去東西,然后光標還要往后退一格*/
else
if(texty==2)
{
texty=78;
textx--;
}
gotoxy(texty,textx);
printf(" ");
gotoxy(texty,textx);
}
}break;/*end case 0xe08*/
case RIGHT: /*右光標鍵的操作控制*/
{
if(texty==79)
texty=2;
texty++;
gotoxy(texty,textx);
}break;
case SPACE: /*空格鍵的操作*/
{
if(texty==79)
continue;
else
{
gotoxy(texty,textx); /*空格的細節(jié)操作*/
printf(" ");
texty++;
gotoxy(texty,textx);
}
}break;
case ENTER: /*回車的控制操作*/
{
if(textx==23)
continue;
textx++;
texty=2;
gotoxy(texty,textx);
}break;
default : /*非控制鍵的結(jié)果*/
{
if(texty==79textx==23)/*到達最后就不再輸出*/
continue;
else
if(texty==79textx!=23) /*到行的最后*/
{
textx++;
texty=2;
}
gotoxy(texty,textx);/*輸出結(jié)果*/
printf("%c",key);
if(texty==79) /*如果texty==79就不執(zhí)行*/
continue;
else /*如果沒到行尾就繼續(xù)執(zhí)行,使光標向前移動一位*/
texty++;
}
}
}/*大循環(huán)的大括號*/
}
/*畫邊框函數(shù)*/
void DrawFrame(int l,int u,int r,int d,int tcolor,int bcolor)
{
textbackground(bcolor); /*背景顏色*/
textcolor(bcolor); /*文本顏色*/
for(i=l;i=r;i++) /*輸出背景區(qū)域*/
{
for(j=u;j=d;j++)
{
gotoxy(i,j);
printf("%c",219); /*輸出背景字符*/
}
}
textcolor(tcolor);/*邊框顏色*/
for(i=u+1;id;i++) /*在背景區(qū)域內(nèi)輸出邊框線*/
{
gotoxy(l,i);
cprintf("%c",179); /*垂直線*/
gotoxy(r,i);
cprintf("%c",179);
}
for(i=l+1;ir;i++)
{
gotoxy(i,u);
cprintf("%c",196); /*水平線*/
gotoxy(i,d);
cprintf("%c",196);
}
gotoxy(l,u);
cprintf("%c",218);/*左上角*/
gotoxy(r,u);
cprintf("%c",191);/*右上角*/
gotoxy(l,d);
cprintf("%c",192);/*左下角*/
gotoxy(r,d);
cprintf("%c",217); /*右下角*/
/* gettext(l+1,u+1,r-1,d-1,save1);*//*保存邊框內(nèi)區(qū)域*/
}
/*顯示具體下拉選擇項目*/
void DrawMl(int n)
{
gettext(1,1,80,25,save);/*保存被掩蓋的地方*/
BlackText(n,1,ml[n].name);/*反選顯示主菜單*/
DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*下拉菜單的邊框*/
for(i=3;i3+ml[n].n;i++)/*輸出所選菜單各選項*/
{
if(i==3)
BlackText(n,i,ml[n].str[i-3]);/*默認選中第一項*/
else
RedText(n,i,ml[n].str[i-3]);/*其余各項首字符紅色顯示*/
}
gotoxy(79,1);
MoveMl(n,3);/*菜單選項的控制*/
}
/*菜單選項的控制,n決定水平項,x決定下拉的選項*/
void MoveMl(int n,int x)
{
int flag=1;
while(flag)
{
gotoxy(79,1);
key=bioskey(0);/*接收按鍵*/
gotoxy(79,1);
switch(key)
{
case ESC:/*退出循環(huán)*/
puttext(1,1,80,25,save);/*恢復打開菜單前的樣子*/
flag=0;
break;
case LEFT:/*移到左邊的選項*/
puttext(1,1,80,25,save);/*恢復打開菜單前的樣子*/
if(n==0)/*往左移動越界的話移到最后一個選項*/
DrawMl(2);
else
DrawMl(n-1);
flag=0;
break;
case RIGHT:/*移動右邊的選項*/
puttext(1,1,80,25,save);/*恢復打開菜單前的樣子*/
if(n==2)/*往右移動越界的話移到第一個選項*/
DrawMl(0);
else
DrawMl(n+1);
flag=0;
break;
case UP:/*具體選項往上移動*/
RedText(n,x,ml[n].str[x-3]);/*輸出紅色字體*/
if(x==3)/*移到最上面再按上鍵,就移到最下面*/
x=3+ml[n].n-1;
else
x--;/*移動到新的要顯示的內(nèi)容*/
BlackText(n,x,ml[n].str[x-3]);/*輸出黑色字體*/
flag=1;
break;
case DOWN:/*具體選項往下移動*/
RedText(n,x,ml[n].str[x-3]);
if(x==(3+ml[n].n-1))/*移動到最底下再按下鍵就移到最上面*/
x=3;
else
x++;/*移動到新的要顯示的內(nèi)容*/
BlackText(n,x,ml[n].str[x-3]);
flag=1;
break;
case ENTER:
puttext(1,1,80,25,save);/*恢復打開菜單前的樣子*/
Enter(n,x-3);/*菜單選項的具體功能*/
flag=0;
break;
}
gotoxy(79,1);
}
}
/*菜單選項的具體功能*/
void Enter(int m,int n)
{
switch(m)
{
case 0:switch(n) /*選擇了圖書菜單選項*/
{
case 0:BookAdd();break;/*添加圖書*/
case 1:BookConsult();break;/*圖書查詢*/
case 2:BookDel();break;/*刪除一本圖書資料*/
case 3:BookBorrow();break;/*借書*/
case 4:BookReturn();break;/*還書*/
case 5:exit(0);break;
} break;/*退出系統(tǒng)*/
case 1: switch(n) /*選擇了會員菜單選項*/
{
case 0: MemberAdd();break;/*添加會員*/
case 1: MemberConsult();break;/*會員查詢*/
case 2:MemberDel();break;/*刪除一個會員資料*/
case 3:MemberBook();/*查詢某個會員所借圖書情況*/
}break;
case 2:switch(n) /*選擇了幫助菜單選項*/
{
case 0:Help();break;
case 1:Ver();
}
}/*結(jié)束外switch*/
}