单片机C语言编程.pdf
目 录实例3:用单片机控制第一个灯亮.3实例4:用单片机控制一个灯闪烁:认识单片机的工作频率.3实例5:将P1 口状态分别送入PO、P2、P3 :认 识I/O 口的引脚功能.4实例6:使 用P3 口流水点亮8位LED.4实例7:通过对P3 地址的操作流水点亮8位LED.5实例8:用不同数据类型控制灯闪烁时间.6实例9:用P0 口、P1 分别显示加法和减法运算结果.8实 例10:用P0、P1 口显示乘法运算结果.8实 例1 1:用P1、P0 口显示除法运算结果.9实 例12:用自增运算控制P0 口 8位LED流水花样.9实 例13:用P0 显示逻辑 与 运算结果.10实 例14:用P0 口显示条件运算结果.10实 例1 5:用P0 显示按位 异或 运算结果.10实 例16:用P0显示左移运算结果.10实 例17:万能逻辑电路 实验.11实 例18:用右移运算流水点亮P1 口 8位LED.11实 例1 9:用if语句控制P0 口 8位LED的流水方向.12实例2 0:用swtich语句的控制P0 口 8位LED的点亮状态.12实例21:用f or语句控制蜂鸣器鸣笛次数.14实例2 2:用whi Ie语句控制LED.15实例2 3:用do-wh i I e语句控制P0 口 8位LED流水点亮.16实例24:用字符型数组控制P0 口 8位LED流水点亮.16实例2 5:用P0 显示字符串常量.17实例2 6:用P0 口显示指针运算结果.18实例2 7:用指针数组控制P0 口 8位LED流水点亮.18实例2 8:用数组的指针控制P0 口 8位LED流水点亮.19实例29:用P 0、P1 显示整型函数返回值.20实例3 0:用有参函数控制P0 口 8位LED流水速度.21实例31:用数组作函数参数控制流水花样.22实例32:用指针作函数参数控制P0 口 8位LED流水点亮.23实例33:用函数型指针控制P1 灯花样.24实例34:用指针数组作为函数的参数显示多个字符串.25实例35:字符函数ctype.h应用举例.26实例3 6:内部函数i ntr i ns.h应用举例.27实例37:标准函数std I ib.h应用举例.27实例38:字符串函数string,h应用举例.28实例39:宏定义应用举例2.28实例40:宏定义应用举例2.29实例41:宏定义应用举例3.29实例4 2:用定时器T0查询方式P2 口 8位控制LED闪烁.30实例4 3:用定时器T1查询方式控制单片机发出1K Hz音 频.31实例44:将计数器T0计数的结果送P1 口 8位LED显 示.31实例4 5:用定时器TO的中断控制1位LED闪烁.32实例4 6:用定时器TO的中断实现长时间定时.33实例47:用定时器T1中断控制两个LED以不同周期闪烁.34实例4 8:用计数器T1的中断控制蜂鸣器发出1K Hz音 频.35实例4 9:用定时器TO的中断实现 渴望 主题曲的播放.35实例50-1:输出50个矩形脉冲.38实例50-2:计数器T0统计外部脉冲数.39实例51-2:定时器T0的模式2测量正脉冲宽度.40实例52:用定时器T0控制输出高低宽度不同的矩形波.40实例5 3:用外中断0的中断方式进行数据采集.41实例5 4 7:榆出负脉宽为200微秒的方波.42实例54-2:测量负脉冲宽度.43实例5 5:方式0控制流水灯循环点亮.44实例56-1:数据发送程序.45实例56-2:数据接妆程序.46实例57-1:数据发送程序.47实例57-2:数据接收程序.48实例5 8:单片机向PC发送数据.49实例5 9:单片机接收PC发出的数据.50实例6 0:用LED数码显示数字5.51实例61:用LED数码显示器循环显示数字。9.51实例62:用数码管慢速动态扫描显示数字1234”.52实例63:用LED数码显示器伪静态显示数字1234.53实例64:用数码管显示动态检测结果.54实例65:数码秒表设计.56实例66:数码时钟设计.57实例67:用LED数码管显示计数器T0的计数值.61实例68:静态显示数字“59”.62实例69:无软件消抖的独立式键盘输入实验.63实例70:软件消抖的独立式键盘输入实验.63实例71:CPU控制的独立式键盘扫描实验.64实例72:定时器中断控制的独立式键盘扫描实验.67实例73:独立式键盘控制的4级变速流水灯.70实例74:独立式键盘的按键功能扩展:以一当四”.72实例7 5:独立式键盘调时的数码时钟实验.74实例76:独立式键盘控制步进电机实验.78实例77:矩阵式键盘按键值的数码管显示实验.81实例78:矩阵式键盘按键音.84实例7 9:简易电子琴.85实例80:矩阵式键盘实现的电子密码锁.91实例8 1:用LCD显示字符A.95实例82:用LCD循环右移显示W elcome to China.98实例8 3:用LCD显示适时检测结果.102实例84:液晶时钟设计.106实例85:将数据OxOf 写入AT24co2再读出送P1 口显示.112实例86:将按键次数写入AT24co2,再读出并用1602LCD显示.116实例87:对I2C总线上挂接多个AT24co2的读写操作.124实例88:基于AT24co2的多机通信 读取程序.129实例8 8:基于AT24C02的多机通信 写入程序.133实例90:D S18B20温度检测及其液晶显示.144实例91:将数据Oxaa写入X5045再读出送P1 口显示.153实例92:将流水灯控制码写入X5045并读出送P1 口显示.157实例9 3:对SPI总线上挂接多个X5045的读写操作.161实例94:基于AD C0832的数字电压表.165实例9 5:用D AC0832产生锯齿波电压.171实例9 6:用P1 口显示红外遥控器的按键值.172实例9 7:用红外遥控器控制继电器.174实例9 8:基于D S1302的日历时钟.177实例9 9:单片机数据发送程序.186实 例100:电机转速表设计.187模拟霍尔脉冲.192/*函数的使用和熟悉*/实例3:用单片机控制第一个灯亮#include 包含51单片机寄存器定义的头文件vo i d ma in(void)whi le(1)无限循环P1=0 xf e;/P1=1111 1110B,即 P1.0 输出低电平)实例4:用单片机控制一个灯闪烁:认识单片机的工作频率#include/包含单片机寄存器的头文件函数功能:延时一段时间void de I ay(vo i d)/两个void意思分别为无需返回值,没有参数传递(unsigned int i ;/定义无符号整数,最大取值范围65535f or(i=0;i20000;i+)/做 20000 次空循环;/什么也不做,等待一个机器周期1函数功能:主 函 数(C语言规定必须有也只能有1个主函数)void main(void)(whi le(1)/无限循环(P1=0 xf e;/P1=1111 1110B,P1.0 输出低电平de I ay();/延时一段时间P1=0 xf f;/P1=1111 1111B,P1.0 输出高电平delay 0;/延时一段时间)实例5:将 P1 状态分别送入PO、P2、P3 :认 识 I/O 口的引脚功能#incIude/包含单片机寄存器的头文件函数功能:主 函 数(C语言规定必须有也只能有1个主函数)vo i d ma i n(vo id)whi le(1)无限循环(P1=0 xf f;/P1=1111 1111,熄灭 LEDPO=P1;/将P1 口状态送入PO 口P2=P1;/将P1 口状态送入P2 口P3=P1;/将P1 口状态送入P3 口实例6:使 用 P3 口流水点亮8 位 LED#include/包含单片机寄存器的头文件函数功能:延时一段时间void delay(void)uns i gned char i,j;f or(i=0;i250;i+)f or(j=0;j250;j+)函数功能:主函数void main(void)(wh i le(1)(P3=0 xf e;第一个灯亮delay();调用延时函数P3=0 xf d;/第二个灯亮de I ay 0;/调用延时函数P3=0 xf b;/第三个灯亮delay();/调用延时函数P3=0 xf 7;/第四个灯亮de I ay();/调用延时函数P3=0 xef;/第五个灯亮delayO;/调用延时函数P3=0 xdf;/第六个灯亮delayO;/调用延时函数P3=0 xbf;/第七个灯亮delayO;/调用延时函数P3=0 x7f;/第八个灯亮de I ay();/调用延时函数/实例7:通过对P3 地址的操作流水点亮8位LED#i nc I ude/包含单片机寄存器的头文件sf r x=0 xb0;/P3 在存储器中的地址是bOH,通 过sf r可定义8051内核单片机的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作函数功能:延时一段时间void delay(void)(uns i gned char i,j;f or(i=0;i250;i+)f or(j=0;j250;j+);利用循环等待若干机器周期,从而延时一段时间)函数功能:主函数void main(void)(whi le(1)x=0 xf e;第一个灯亮de I ay();/调用延时函数x=0 xf d;/第二个灯亮de I ay();/调用延时函数x=0 xf b;/第三个灯亮de I ay 0;/调用延时函数x=0 xf 7;/第四个灯亮de I ay 0;/调用延时函数x=0 xef;第五个灯亮de I ay();/调用延时函数x=0 xdf;/第六个灯亮de I ay();/调用延时函数x=0 xbf;/第七个灯亮de I ay();/调用延时函数x=0 x7f;/第八个灯亮de I ay();/调用延时函数)实例8:用不同数据类型控制灯闪烁时间#include/包含单片机寄存器的头文件函数功能:用整形数据延时一段时间void int_de lay(void)延时一段较长的时间unsigned int m;/定义无符号整形变量,双字节数据,值域为065535f or(m=0;m36000;m+);/空操作函数功能:用字符型数据延时一段时间void char_de I ay(void)/延时一段较短的时间(unsigned char i,j;定义无符号字符型变量,单字节数据,值 域0255f or(i=0;i200;i+)f or(j=0;j180;j+);/空操作函数功能:主函数vo i d ma i n(vo i d)(uns i gned char i;whi le(1)(f or(i=0;i3;i+)(P1=0 xf e;P1.0 的灯点亮i nt_de I ay 0;/延时一段较长的时间P1=0 xf f;/熄灭i nt_de I ay 0;延时一段较长的时间f or(i=0;i3;i+)(P1=0 xef;/P1.4 口的灯点亮char_delay 0;/延时一段较长的时间P1=0 xf f;/熄灭char_de I ay();/延时一段较长的时间实例9:用 0 口、P1 口分别显示加法和减法运算结果#includevo i d ma i n(vo i d)unsigned char m,n;m=43;/即十进制数 2x16+11=43n=60;/即十进制数 3x16+12=60P1=m+n;/P1=103=0110 0111,结果 P1.3、P1.4、P1.7 口的灯被点亮P0=n-m;/P0=17=0001 0001,结果 P0.0、P0.4 的灯被熄灭/实 例 10:用 P0、P1 口显示乘法运算结果#include/包含单片机寄存器的头文件void ma in(void)unsigned char m,n;uns i gned i nt s;m=64;n=71;s=m*n;s=64*71=4544,需 要16位二进制数表示,高8位 送P1 口,低8位 送P0 口由于 4544=17*256+192=H3*16*16*16+H2*16*16+H1*16+HO两边同除以 256,可得 17+192/256=H3*16+H2+(H1*16+H0)/256/因此,高8位16进制数H3*16+H2必然等于17,即4544除以256的商 低8位16进制数H1*16+H0必然等于192,即4544除 以256的余数P1=s/256;高 8 位送 P1 口,P1=17=11H=0001 0001B,P1.(HnP1.4tr灭,其余亮P0=s%256;/低 8 位送 P0 口 ,P3=192=cOH=1100 0000B,P3.1,P3.6,P3.7口灭,其余亮/实 例1 1:用 P1、P0 口显示除法运算结果#i nc I ude/包含单片机寄存器的头文件void main(void)(P1=36/5;/求整数P0=(36%5)*10)/5;/求小数whi le(1);/无限循环防止程序“跑飞”)/实 例1 2:用自增运算控制P0 口 8 位 LED流水花样#include 包含单片机寄存器的头文件函数功能:延时一段时间void delay(void)(unsigned int i;f or(i=0;i20000;i+)函 数 功 能:主函数void main(void)(uns i gned char i;f or(i=0;i255;i+)/注 意i的值不能超过255(P0=i;将i的值送PODde I ay();/调用延时函数实例1 3:用 P0 显示逻辑 与 运算结果#include 包含单片机寄存器的头文件void main(void)(PO=(40)&(90 xab);将逻辑运算结果送PO 口whi le(1);设置无限循环,防止程序“跑飞”/实 例1 4:用 P0 口显示条件运算结果#include/包含单片机寄存器的头文件void main(void)(P0=(84)?8:4;将条件运算结果送 PO 口,P0=8=0000 1000Bwhi le(1);设置无限循环,防止程序“跑飞”实例1 5:用 P0 显示按位 异或 运算结果#include/包含单片机寄存器的头文件void main(void)(P0=0 xa2-0 x3c;将条件运算结果送 PO 口,PO二8二0000 1000Bwhi le(1);设置无限循环,防止程序“跑飞”/实例1 6:用 P0显示左移运算结果#incIude/包含单片机寄存器的头文件void ma in(void)(P0=0 x3b2;将左移运算结果送 PO 口,P0=1110 1100B=0 xecwhi le(1)无限循环,防止程序“跑飞”/实 例17:“万能逻辑电路 实验#includesbit F=Pr 4;sbit X=Pr5;sbit 丫=P1%;sbit Z=P7;void main(void)包含单片机寄存器的头文件 将F位 定 义 为P1.4 将X位 定 义 为P1.5/将丫位定义为P1.6 将Z位 定 义 为P1.7whi le(1)F=(X)&Y)|Z;/将逻辑运算结果赋给F/实 例18:用右移运算流水点亮P1 口 8位LED#incIude 包含单片机寄存器的头文件函数功能:延时一段时间void de I ay(void)unsigned int n;f or(n=0;n30000;n+)函数功能:主函数void main(void)(uns i gned char i;whi le(1)P1=0 xf f;delay();f or(i=0;i8;i+)设 置 循 环 次 数 为8(P1=P11;每 次 循 环P 1的 各 二 进 位 右 移1位,高 位 补0de I ay();/调用延时函数实例19:用if语句控制P0 口 8位LED的流水方向#incIude/包含单片机寄存器的头文件sbit Sk P1-4;将S1位 定 义 为P1.4sbit S2=P5;将 S2 位定义为 P1.5函 数 功 能:主函数void main(void)whi le(1)if(S1=0)如 果 按 键S1按下P0=0 x0f;/PO 口高四位 LED 点亮if (S2=0)如 果 按 键S2按下P0=0 xf 0;/PO 口 低四位 LED 点亮/实例2 0:用swtich语句的控制P0 口 8位LED的点亮状态#include/包含单片机寄存器的头文件sbit S1=P14;将 S1 位定义为 P1.4函 数 功 能:延时一段时间void de I ay(void)unsigned int n;f or(n=0;n10000;n+))函数功能:主函数void main(void)(uns igned char i ;i=0;将i初始化为0wh i le(1)if(S1=0)/如 果S 1键按下de I ay 0;/延时一段时间if(S1=0)如果再次检测到S 1键按下i+;/i 自增 1if(i=9)/如 果i=9,重新将其置为1i=1;)switch(i)/使用多分支选择语句break;def ault:/缺省值,关闭所有LEDP0=0 xf f;case1:P0=0 xf e;break;/第一个L E D亮case 2:P0=0 xf d;break;第二个L E D亮case 3:P0=0 xf b;break;/第三个L E D亮case 4:P0=0 xf 7;break;第四个L E D亮case 5:P0=0 xef;break;/第五个L E D亮case 6:P0=0 xdf;break;/第六个L E D亮case 7:P0=0 xbf;break;/第七个L E D亮case 8:P0=0 x7f;/第八个L E D亮/实例2 1:用 fo r 语句控制蜂鸣器鸣笛次数#i nc Iude 包含单片机寄存器的头文件sb it sound=P3-7;/将 sound 位定义为 P3.7函数功能:延时形成1600Hz音频void de lay1600(void)(unsigned char n;f or(n=0;n100;n+)函数功能:延时形成800Hz音频void delay800(void)(unsigned char n;f or(n=0;n200;n+)函数功能:主函数void main(void)(uns i gned i nt i;wh i le(1)(f or(i=0;i830;i+)(sound=0;/P3.7输出低电平de I ay1600();sound=1;/P3.7输出高电平de I ay1600();f or(i=0;i200;i+)sound=0;/P3.7输出低电平de lay800();sound=1;/P3.7输出高电平de lay800();/实例2 2:用whi Ie语句控制LED#incIude/包含单片机寄存器的头文件函数功能:延时约 60ms(3*100*200=60000 us)void delay60ms(void)(unsigned char m,n;f or(m=0;m100;m+)f or(n=0;n200;n+)1函数功能:主函数void main(void)/无限循环i=0;/将i初始化为0whi le(iOxf f)当i小于Oxf f (255)时执行循环体(P0=i;将i送P0 口显示de I ay60ms();延时i+;/i 自增 1/实例2 3:用do-whi Ie语句控制P0 口 8位LED流水点亮#incIude 包含单片机寄存器的头文件函数功能:延时约 60ms(3*100*200=60000 RS)void delay60ms(void)(unsigned char m,n;f or(m=0;m100;m+)f or(n=0;n200;n+)1函数功能:主函数void ma i n(void)(do(P0=0 xf e;第一个 LED 亮de I ay60ms();P0=0 xf d;/第二个 LED 亮de I ay60ms();P0=0 xf b;/第三个 LED 亮de I ay60ms();P0=0 xf 7;/第四个 LED 亮de I ay60ms();P0=0 xef;第五个LED亮de I ay60ms();P0=0 xdf;/第六个 LED 亮de I ay60ms();de I ay60ms();P0=0 xbf;/第七个 LED 亮de I ay60ms();P0=0 x7f;/第八个 LED 亮de I ay60ms();whi le(1);无限循环,使8位LED循环流水点亮/实例2 4:用字符型数组控制P0 口 8位LED流水点亮#i nc Iude 包含单片机寄存器的头文件函数功能:延时约 60ms(3*100*200=60000 ps)void de Iay60ms(void)(unsigned char m,n;f or(m=0;m100;m+)f or(n=0;n200;n+)函数功能:主函数vo i d ma i n(vo i d)uns i gned char i;uns i gned char code Tab =0 xf e,Oxf d,Oxf b,0 xf 7,Oxef,Oxdf,Oxbf,0 x7f;定义无符号字符型数组wh i le(1)(f or(i=0;i8;i+)(P0=Tabi;依次引用数组元素,并将其送P0 口显示de I ay60ms();/调用延时函数)/实例2 5:用 P0 口显示字符串常量#include/包含单片机寄存器的头文件函数功能:延时约 150ms(3*200*250=150 000 us=150msvoid de I ay150ms(void)(unsigned char m,n;f or(m=0;m200;m+)f or(n=0;n250;n+)函数功能:主函数vo i d ma i n(vo i d)unsigned char str =N ow,Temperature is:!;/将字符串赋给字符型全部元素赋值uns i gned char i ;whi le(1)(i=0;/将i初始化为0,从第一个元素开始显示whi le(stri!=0)/只要没有显示到结束标志0(P0=stri;/将 第i个字符送到P0 口显示de I ay150ms();/调用 150ms 延时函数i+;/指向下一个待显字符实例2 6:用P0 口显示指针运算结果#includevo i d ma in(void)unsigned char*p1,*p2;/定义无符号字符型指针变量p1,p2uns i gned char i,j;/定义无符号字符型数据i=25;给i赋初值25j=15;pk&i;/使指针变量指向i ,对指针初始化p2=&j;/使指针变量指向j,对指针初始化P0=*p1+*p2;/*p1+*p2 相当于 i+j,所以 P0=25+15=40=0 x28 则P0=0010 1 0 0 0 B,结 果P0.3、P 0.5引脚L E D熄灭,其余点亮whi le(1)/无限循环,防止程序“跑飞”/实例2 7:用指针数组控制P0 口 8位LED流水点亮#i ncIude函数功能:延时约 150ms(3*200*250=150 000 us=150msvoid de I ay150ms(void)(unsigned char m,n;f or(m=0;m200;m+)f or(n=O;n250;n+)函数功能:主函数vo i d ma i n(vo i d)uns i gned char code Tab=Oxf e,Oxf d,Oxf b,0 xf 7,Oxef,Oxdf,Oxbf,0 x7f;uns i gned char*p =&Tab0,&Tab1,&Tab2,&Tab3,&Tab4,&Tab5,&Tab6,&Tab7;unsigned char i;定义无符号字符型数据whi le(1)f or(i=0;i8;i+)(PO=*pi;de I ay150ms();)/实例2 8:用数组的指针控制P0 口 8位LED流水点亮#include函数功能:延时约 150ms(3*200*250=150 000 RS=1 50msvoid de I ay150ms(void)unsigned char m,n;f or(m=0;m200;m+)f or(n=0;n250;n+)函数功能:主函数vo i d ma i n(vo i d)(uns i gned char i;uns i gned char Tab =0 xF F,OxF E,OxF D,OxF B,0 xF 7,OxEF,OxD F,OxBF,0 x7F,OxBF,OxD F,OxEF,0 xF 7,OxF B,OxF D,OxF E,OxF E,OxF C,OxF B,OxF O,OxEO,OxCO,0 x80,0 x00,0 xE7,OxD B,OxBD,0 x7E,0 x3C,0 x18,0 x00,0 x81,0 xC3,0 xE7,0 x7E,OxBD,OxD B,0 xE7,OxBD,OxD B;/流水灯控制码unsigned char*p;/定义无符号字符型指针p=Tab;将数组首地址存入指针pwhi le(1)(f or(i=0;i32;i+)共3 2个流水灯控制码PO=*(p+i);/*(p+i)的值等于 aide I ay150ms();/调用 150ms 延时函数)实例2 9:用PO、P1 显示整型函数返回值#include函数功能:计算两个无符号整数的和uns i gned i nt sum(int a,i nt b)uns i gned i nt s;s=a+b;return(s);函数功能:主函数void ma in(void)(unsigned z;z=sum(2008,2009);P1=z/256;/取 得z的高8位P0二z%256;取得z的低8位whi le(1)/实例3 0:用有参函数控制P0 口 8位LED流水速度#include函数功能:延时一段时间void delay(unsigned char x)(unsigned char m,n;f or(mz:0;mx;m+)f or(n=0;n200;n+)函数功能:主函数void main(void)(uns i gned char i;uns i gned char codeTab =0 xF E,OxF D,OxF B,0 xF 7,OxEF,OxD F,OxBF,0 x7F);/流水灯控制码whi le(1)(/快速流水点亮LEDf or(i=0;i8;i+)共8个流水灯控制码P0=Tabi;de I ay(100);/延时约 60ms,(3*100*200=60 000 us)/慢速流水点亮LEDf or(i=0;i8;i+)共8个流水灯控制码PO=Tabi;de I ay(250);延时约 150ms,(3*250*200=150 000 ns)实例31:用数组作函数参数控制流水花样#i ncIude函数功能:延时约150msvoid delay(void)(unsigned char m,n;f or(m=0;m200;m+)f or(n=0;n250;n+)函数功能:流水点亮P0 口 8位LEDvo id Ied_f Iow(uns i gned char a8)uns i gned char i;f or(i=0;i8;i+)(P0=a i;delay();)函数功能:主函数vo i d ma in(void)(uns i gned char codeTab =0 xF E,OxF D,OxF B,0 xF 7,OxEF,OxD F,OxBF,0 x7F);/流水灯控制码Ied_f Iow(Tab);/实例32:用指针作函数参数控制P0 口 8 位 LED 流水点亮#include函数功能:延时约150msvoid delay(void)(unsigned char m,n;f or(m=0;m200;m+)f or(n=0;n250;n+)函数功能:流水点亮P0 口 8 位 LEDvoid Ied_f Iow(unsigned char*p)/形参为无符号字符型指针(uns i gned char i;whi le(1)(i=o;将 i 置为o,指向数组第一个元素whi le(*(p+i)!=0)只栗没有指向数组的结束标志(P0=*(p+i);取的指针所指变量(数组元素)的值,送 P 0 Dde I ay();/调用延时函数i+;指向下一个数组元素)函数功能:主函数vo i d ma in(void)unsigned char code Tab =OxF E,OxF D,OxF B,0 xF 7,OxEF,OxD F,OxBF,0 x7F,0 x7F,OxBF,OxD F,OxEF,0 xF 7,OxF B,OxF D,OxF E,OxF F,OxF E,OxF C,OxF B,OxF O,OxEO,OxCO,0 x80,0 x00,0 xE7,OxD B,OxBD,0 x7E,OxF F,OxF F,0 x3C,0 x18,0 x0,0 x81,0 xC3,0 xE7,OxF F,OxF F,0 x7E;流水灯控制码unsigned char*pointer;pointer=Tab;Ied_f low(pointer);/实例3 3:用函数型指针控制P1 口灯花样#i nc I ude/包含5 1单片机寄存器定义的头文件uns i gned char code Tab =OxF E,OxF D,OxF B,0 xF 7,OxEF,OxD F,OxBF,0 x7F;流水灯控制码,该数组被定义为全局变量函数功能:延时约150msvoid delay(void)(unsigned char m,n;f or(m=0;m200;m+)f or(n=0;n250;n+)函数功能:流水灯左移vo i d Ied_f Iow(void)uns i gned char i;f or(i=0;i8;i+)8 位控制码PO=Tabi;delay();)函数功能:主函数vo i d ma i n(vo i d)(void(*p)(void);/定义函数型指针,所指函数无参数,无返回值p=led_f low;将函数的入口地址赋给函数型指针pwh i le(1)(*p)0;/通过函数的指针p 调用函数led_f low()实例3 4:用指针数组作为函数的参数显示多个字符串#i nc I ude/包含5 1 单片机寄存器定义的头文件uns igned char code str1 =Temperature i s tested by D S18B20;C 语言中,字符串是作为字符数组来处理的unsigned char code str2 =N ow temperature is:;/所以,字符串的名字就是字符串的首地址uns igned char code str3 =The Systerm i s designed by Zhang San;unsigned char code str4 =The date is 2008-9-30;unsigned char*p =str1,str2,str3,str4;/定义 p4为指向 4 个字符串的字符型指针数组函数功能:延时约150msvoid delay(void)(unsigned char m,n;f or(m=0;m200;m+)f or(n=0;n250;n+)函数功能:流水点亮P O D 8 位 LEDvoid I ed_di sp I ay(uns igned char*x)/形参必须为指针数组uns i gned char i,j;f or(i=0;i4;i+)有4个字符串要显示(j=0;/指向待显字符串的第0号元素whi le(*(xi+j)!=0)/只 要 第i个字符串的第j号元素不是结束标心(PO=*(xi+j);取得该元素值送到P0 口显示delay();/调用延时函数j+;指向下一个元素)函数功能:主函数void ma in(void)(uns i gned char i ;whi le(1)(f or(i=0;i4;i+)led_display(p);将指针数组名作实际参数传递)实例35:字符函数ctype.h应用举例#i nc I ude/包含51单片机寄存器定义的头文件#i ncIudevo i d ma i n(vo i d)(whi le(1)(P3=isalpha(_)?0 xf 0:0 x0f;条 件 运 算,若 是 英 文 字 母,P3=0 xf 0)/实例3 6:内部函数intr ins.h应用举例#include/包含51单片机寄存器定义的头文件#i nc I ude 包含函数i sa Ipha 0 声明的头文件函数功能:延时约150msvoid delay(void)(unsigned char m,n;f or(m=0;m200;m+)f or(n=O;n250;n+)1函数功能:主函数vo i d ma i n(vo i d)P3=0 xf e;/P3=1111 1110Bwhi le(1)(P3=_crol_(P3,1);/将P3的二进制位循环左移1位后再赋给P3de I ay();/调用延时函数)/实例37:标准函数stdlib.h应用举例#i nc I ude/包含51单片机寄存器定义的头文件#incIude/包含函数isaIpha()声明的头文件函数功能:延时约150msvoid delay(void)(unsigned char m,n;f or(m=0;m200;m+)f or(n=0;n250;n+)函数功能:主函数vo i d ma i n(vo i d)(uns i gned char i;whi le(1)(f or(i=0;i10;i+)/产生 10 个随机数(P3=rand()/160;将产生的随机数缩小160倍后送P3显示de I ay();)实例38:字符串函数string.h应用举例#i nc I ude/包含5 1 单片机寄存器定义的头文件#i nc I ude 包含函数i sa I pha()声明的头文件void ma in(void)(uns i gned char str1 =N ow,The temperature i s:;unsigned char str2 =N ow,The temperature is 36 Centgrade:n;uns i gned char i;i二 strcmp(str1,str2);/比较两个字符串,并将结果存入iif(i=0)/str1=str2P3=0 x00;e I seif (i0)/str1str2P3=0 x0f;whi le(1);防止程序“跑飞”实例39:宏定义应用举例2#i nc I ude/包含5 1单片机寄存器定义的头文件#def ine F (a,b)(a)+(a)*(b)/256+(b)/带参数的宏定义,a 和 b 为形参void main(void)(unsigned char i,j,k;i=40;产30;k=20;P3=F(i,j+k);/i和j+k分别为实参,宏展开时,实参将替代宏定义中的形参whi le(1)/实例4 0:宏定义应用举例2#include#i ncIudevoid main(void)P3_0=0;将P 3.0引脚置低电平,L E D点亮P3_1=0;将P 3.0引脚置低电平,L E D点亮P3_2=0;将P3.0引脚置低电平,L E D点亮P3_3=0;将P 3.0引脚置低电平,L E D点亮P3_4=1;将P3.4引脚置高电平,L E