unsignedchari;
unsignedcharTab[ ]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,
0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00, 0xE7,0xDB,0xBD,0x7E,0x3C,0x18,0x00,0x81, 0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB}; //流水灯控制码
unsignedchar*p; //定义无符号字符型指针
p=Tab; //将数组首地址存入指针p while(1) {
for(i=0;i<32;i++) //共32个流水灯控制码 {
P0=*(p+i); //*(p+i)的值等于a[i] delay150ms(); //调用150ms 延时函数 } }
}
// 29 P0 P1
//实例29:用P0 、P1 口显示整型函数返回值
#include
/************************************************* 函数功能:计算两个无符号整数的和
*************************************************/ unsignedintsum(inta,intb) {
unsignedints; s=a+b; return(s); }
/************************************************* 函数功能:主函数
*************************************************/ voidmain(void) {
unsignedz;
z=sum(2008,2009);
P1=z/256; //取得z 的高8位 P0=z%6; //取得z的低8 位 while(1) ;
221/ 192
}
//实例30:用有参函数控制P0 口8位LED流水速度
#include
/************************************************* 函数功能:延时一段时间
*************************************************/ voiddelay(unsignedcharx) {
unsignedcharm,n; for(m=0;m ; } /************************************************* 函数功能:主函数 *************************************************/ voidmain(void) { unsignedchari; unsigned charcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制码 while(1) { //快速流水点亮LED for(i=0;i<8;i++)//共8个流水灯控制码 { P0=Tab[i]; delay(100); //延时约60ms,(3*100*200=60000μs) } //慢速流水点亮LED for(i=0;i<8;i++)//共8个流水灯控制码 { P0=Tab[i]; delay(250); //延时约150ms,(3*250*200=150000μs) } } } 22/ 192 2 // 31 //实例31:用数组作函数参数控制流水花样 #include /************************************************* 函数功能:延时约150ms *************************************************/ voiddelay(void) { unsignedcharm,n; for(m=0;m<200;m++) for(n=0;n<250;n++) ; } /************************************************* 函数功能:流水点亮P0口8位LED *************************************************/ voidled_flow(unsignedchara[8]) { unsignedchari; for(i=0;i<8;i++) { P0=a[i]; delay(); } } /************************************************* 函数功能:主函数 *************************************************/ voidmain(void) { unsigned charcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制码 led_flow(Tab); } // 32 P0 8 LED //实例32:用指针作函数参数控制P0口8 位LED流水点亮 #include 223/ 192 /************************************************* 函数功能:延时约150ms *************************************************/ voiddelay(void) { unsignedcharm,n; for(m=0;m<200;m++) for(n=0;n<250;n++) ; } /************************************************* 函数功能:流水点亮P0口8位LED *************************************************/ voidled_flow(unsignedchar*p) //形参为无符号字符型指针 { unsignedchari; while(1) { i=0; //将i 置为0,指向数组第一个元素 while(*(p+i)!='\\0')//只要没有指向数组的结束标志 { P0=*(p+i);// 取的指针所指变量(数组元素)的值,送P0口 delay(); //调用延时函数 i++; //指向下一个数组元素 } } } /************************************************* 函数功能:主函数 *************************************************/ voidmain(void) { unsigned charcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE, 0xFF,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80, 0x00,0xE7,0xDB,0xBD,0x7E,0xFF,0xFF,0x3C, 0x18,0x0,0x81,0xC3,0xE7,0xFF, 0xFF,0x7E}; //流水灯控制码 unsignedchar*pointer; 224/ 192 pointer=Tab; led_flow(pointer); } // 33 P1 //实例33:用函数型指针控制P1口灯花样 #include unsignedcharcode Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制码,该数组被定义为全局变量 /************************************************************** 函数功能:延时约150ms **************************************************************/ voiddelay(void) { unsignedcharm,n; for(m=0;m<200;m++) for(n=0;n<250;n++) ; } /************************************************************** 函数功能:流水灯左移 **************************************************************/ voidled_flow(void) { unsignedchari; for(i=0;i<8;i++) //8位控制码 { P0=Tab[i]; delay(); } } /************************************************************** 函数功能:主函数 **************************************************************/ voidmain(void) { void(*p)(void);//定义函数型指针,所指函数无参数,无返回值 p=led_flow; //将函数的入口地址赋给函数型指针p while(1) 225/ 192