《单片机c语言实例100.pdf》由会员分享,可在线阅读,更多相关《单片机c语言实例100.pdf(192页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学习单片机100例目录目录.1*函数的使用和熟悉*实例3:用单片机控制第一个灯亮.4实例4:用单片机控制一个灯闪烁:认识单片机的工作频率.4实例5:将P1 口状态分别送入P0、P2、P3 口:认 识I/O 口的引脚功能.5实例6:使 用P3 口流水点亮8位LED.5实例7:通过对P3 口地址的操作流水点亮8位LED.6实例8:用不同数据类型控制灯闪烁时间.7实例9:用POD、Pl 口分别显示加法和减法运算结果.8实 例10:用P0、P1 口显示乘法运算结果.9实 例11:用P l、P0 口显示除法运算结果.9实 例12:用自增运算控制P0 口 8位LED流水花样.10实 例13:用P0 口显示
2、逻辑 与 运算结果.10实 例14:用P0 口显示条件运算结果.11实 例15:用P0 口显示按位 异或 运算结果.11实 例16:用P0显示左移运算结果.11实 例17:万能逻辑电路,实验.11实 例18:用右移运算流水点亮P1 口 8位LED.12实 例19:用if语句控制P0 口 8位LED的流水方向.13实例20:用swtich语句的控制P0 口 8位LED的点亮状态.13实例21:用for语句控制蜂鸣器鸣笛次数.14实例22:用while语句控制LED.16实例23:用do-while语句控制P0 口 8位LED流水点亮.16实例24:用字符型数组控制P0 口 8位LED流水点亮.1
3、7实例25:用P0 口显示字符串常量.18实例26:用P0 口显示指针运算结果.19实例27:用指针数组控制P0 口 8位LED流水点亮.19实例28:用数组的指针控制P0 口 8位LED流水点亮.20实例29:用P 0、P1 口显示整型函数返回值.21实例30:用有参函数控制P0 口 8位LED流水速度.22实例31:用数组作函数参数控制流水花样.22实例32:用指针作函数参数控制P0 口 8位LED流水点亮.23实例33:用函数型指针控制P1 口灯花样.25实例34:用指针数组作为函数的参数显示多个字符串.26实例35:字符函数ctype.h应用举例.27实例36:内部函数intrins.
4、h应用举例.27实例37:标准函数stdlib.h应用举例.28实例38:字符串函数string.h应用举例.29实例39:宏定义应用举例2.29实例40:宏定义应用举例2.30实例41:宏定义应用举例3.30断、定 口 寸 若 号 *中 、定 2g*中 gjjy、定*中断、定时器*实例42:用定时器T 0查询方式P2 8位控制LED闪烁.31实例43:用定时器T 1查询方式控制单片机发出IK H z音频.31实例44:将计数器TO计数的结果送P1 口 8位LED显示.32实例45:用定时器TO的中断控制1位LED闪烁.33实例46:用定时器TO的中断实现长时间定时.34实例47:用定时器T
5、1中断控制两个LED以不同周期闪烁.34实例48:用计数器T 1的中断控制蜂鸣器发出lK H z音频.36实例49:用定时器TO的中断实现 渴望 主题曲的播放.36实例50-1:输出5 0个矩形脉冲.39实例50-2:计数器TO统计外部脉冲数.40实例51-2:定时器TO的模式2测量正脉冲宽度.40实例52:用定时器TO控制输出高低宽度不同的矩形波.41实例53:用外中断0的中断方式进行数据采集.42实例54-1:输出负脉宽为200微秒的方波.43实例54-2:测量负脉冲宽度.43实例55:方式0控制流水灯循环点亮.44实例56-1:数据发送程序.45实例56-2:数据接收程序.47实例57-
6、1:数据发送程序.47实例57-2:数据接收程序.49实例58:单片机向PC发送数据.50实例59:单片机接收PC发出的数据.51显*R马显*显*石马显tnn4tnn4HJ-_._.JnJnJnJ伤伤伤伤伤伤伤仞实实实实实实实实60:用LED数码显示数字5.5261:用LED数码显示器循环显示数字09.5262:用数码管慢速动态扫描显示数字1234”.5363:用LED数码显示器伪静态显示数字1234.5464:用数码管显示动态检测结果.5465:数码秒表设计.5666:数码时钟设计.5867:用LED数码管显示计数器T 0的计数值.62实例68:静态显示数字59”.63*用,制 J *嘉-拓
7、 宁 缶 lj*帝 lj*键盘捽制*实例69:无软件消抖的独立式键盘输入实验.64实例70:软件消抖的独立式键盘输入实验.64实例71:CPU控制的独立式键盘扫描实验.65实例72:定时器中断控制的独立式键盘扫描实验.68实例73:独立式键盘控制的4级变速流水灯.71实例74:独立式键盘的按键功能扩展:以一当四”.73实例75:独立式键盘调时的数码时钟实验.75实例76:独立式键盘控制步进电机实验.79实例77:矩阵式键盘按键值的数码管显示实验.82实例78:矩阵式键盘按键音.85实例79:简易电子琴.86实例80:矩阵式键盘实现的电子密码锁.92*液晶显示 LCD*液晶显示 LCD*液晶显示
8、 LCD*液晶显示 LCD*液晶显示 LCD*液晶显示 LCD*实例81:用LCD显示字符A.95实例82:用LCD循环右移显示Welcome to China.99实例83:用LCD显示适时检测结果.102实例84:液晶时钟设计.106些芯片的使用*24c02.DS18B20 X5045 ADC0832 DAC0832 DS1302句2 夕 卜 */112实例85:将数据OxOf写入AT24C02再读出送P1 口显示.112实例86:将按键次数写入AT24C02,再读出并用1602LCD显示.116实例87:对12c总线上挂接多个AT24C02的读写操作.124实例88:基 于AT24co2
9、的多机通信 读取程序.129实例88:基 于AT24C02的多机通信 写入程序.133实例90:DS18B20温度检测及其液晶显示.144实例91:将数据Oxaa写 入X5045再读出送P1 口显示.153实例92:将流水灯控制码写入X5045并读出送P1 口显示.156实例93:对SPI总线上挂接多个X5045的读写操作.160实例94:基 于ADC0832的数字电压表.165实例95:用DAC0832产生锯齿波电压.170实例96:用P1 口显示红外遥控器的按键值.171实例97:用红外遥控器控制继电器.173实例98:基 于DS1302的日历时钟.176实例99:单片机数据发送程序.18
10、5实 例100:电机转速表设计.186模拟霍尔脉冲.191函数的使用和熟悉*/实例3:用单片机控制第一个灯亮#include 包含51单片机寄存器定义的头文件void main(void)Pl=Oxfe;/P l=llll 1110B,即 P1.0 输出低电平)实例4:用单片机控制一个灯闪烁:认识单片机的工作频率#include 包含单片机寄存器的头文件函数功能:延时一段时间void delay(void)两个void意思分别为无需返回值,没有参数传递unsigned int i;定义无符号整数,最大取值范围65535for(i=0;i20000;i+)做 20000 次空循环;什么也不做,等
11、待一个机器周期)函数功能:主 函 数(C语言规定必须有也只能有1个主函数)void main(void)(while(l)无限循环|Pl=Oxfe;/P l=llll 1110B,Pl.O 输出低电平delay();延时一段时间Pl=Oxff;/P l=llll 1111B,P1.0 输出高电平delay();延时一段时间)实例5:将 Pl 口状态分别送入PO、P2、P3 口:认识I/O 口的引脚功能#include 包含单片机寄存器的头文件函数功能:主 函 数(C 语言规定必须有也只能有1 个主函数)void main(void)(while(l)无限循环(Pl=Oxff;/P l=llll
12、 熄灭 LEDPO=P1;/将 Pl 口状态送入PO 口P2=P1;/将 Pl 口状态送入P2 口P3=P1;/将 Pl 口状态送入P3 口)实例6:使用P3 口流水点亮8 位 LED#include 包含单片机寄存器的头文件函数功能:延时一段时间void delay(void)(unsigned char ij;for(i=0;i250;i+)for(j=0;j250;j+)/)函数功能:主函数void main(void)while(l)P3=0 xfe;第一个灯亮delay();调用延时函数P3=Oxfd;第二个灯亮delay();调用延时函数P3=Oxfb;第三个灯亮delay();调
13、用延时函数P3=Oxf7;第四个灯亮delay();调用延时函数P3=Oxef;第五个灯亮delay();调用延时函数P3=Oxdf;第六个灯亮delay();调用延时函数P3=Oxbf;第七个灯亮delay();调用延时函数P3=0 x7f;第八个灯亮delay();调用延时函数实例7:通过对P3 口地址的操作流水点亮8位 LED#include 包含单片机寄存器的头文件sfr x=OxbO;P3 口在存储器中的地址是b O H,通 过s fr可定义8051内核单片机的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1 口的操作函数功能:延时一段时间void delay(void)(un
14、signed char ij;for(i=0;i250;i+)for(j=0;j250;j+);利用循环等待若干机器周期,从而延时一段时间)函数功能:主函数*void main(void)(while(l)(x=Oxfe;第一 一 个灯亮delay();/调用延时函数x=Oxfd;第二个灯亮delay();调用延时函数x=Oxfb;第三个灯亮delay();调用延时函数x=0 xf7;第四个灯亮delay();调用延时函数x=Oxef;第五个灯亮delay();调用延时函数x=Oxdf;第六个灯亮delay();调用延时函数x=Oxbf;第七个灯亮delay();调用延时函数x=0 x7f;第
15、八个灯亮delay();调用延时函数实例8:用不同数据类型控制灯闪烁时间#include 包含单片机寄存器的头文件/*函数功能:用整形数据延时一段时间*/void int_delay(void)延时一段较长的时间(unsigned int m;定义无符号整形变量,双字节数据,值域为065535for(m=0;m36000;m+);空操作)/*函数功能:用字符型数据延时一段时间*/void char_delay(void)延时段较短的时间unsigned char i,j;定义无符号字符型变量,单字节数据,值域 0255for(i=0;i200;i+)for(j=0;j180;j+);空操作)/
16、*函数功能:主函数*/void main(void)(unsigned char i;while(l)(for(i=0;i3;i+)(Pl=0 xfe;P1.0 口的灯点亮int_delay();延时一段较长的时间Pl=Oxff;熄灭int_delay();延时一段较长的时间)for(i=0;i3;i+)(Pl=0 xef;P1.4 口的灯点亮char_delay();/延时段较长的时间Pl=Oxff;熄灭char_delay();延时一段较长的时间)实例9:用 POD、Pl 口分别显示加法和减法运算结果#includevoid main(void)(unsigned char m,n;m=4
17、3;即十进制数 2x16+11=43n=60;即十进制数 3x16+12=60Pl=m+n;Pl=103=0110 0111B,结果 Pl.3、Pl.4、Pl.7 口的灯被点亮P0=n-m;P0=17=0001 0001B,结果 P0.0、P0.4 的灯被熄灭实例io:用PO、Pl 口显示乘法运算结果#include 包含单片机寄存器的头文件void main(void)(unsigned char m,n;unsigned int s;m=64;n=71;s=m*n;s=64*71=4544,需要16位二进制数表示,高8位送Pl 口,低8位送P0 口由于 4544=17*256+192=H3
18、*16*16*16+H2*16*16+Hl*16+H0两边同除以 256,可得 17+192/256=H3*16+H2+(Hl*16+H0)/256因此,高8位16进制数H3*16+H2必然等于1 7,即4544除以256的商低8位16进制数Hl*16+H0必然等于1 9 2,即4544除以256的余数Pl=s/256;高 8 位送 P1 口,P1=17=11H=OOO1 0001B,P1.0 和 P1.4 口灭,其余亮P0=s%256;低 8 位送 P0 M,P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7 口灭,其余亮)实例11:用 P l、P0 口显示除法运算结果
19、#include 包含单片机寄存器的头文件void main(void)Pl=36/5;求整数P0=(36%5)*10)/5;求小数while(l)无限循环防止程序“跑飞”)实例12:用自增运算控制P0 口 8位 LED流水花样#include 包含单片机寄存器的头文件函数功能:延时一段时间void delay(void)(unsigned int i;for(i=0;i20000;i+)函 数 功 能:主函数void main(void)unsigned char i;for(i=0;i255;i+)注意i的值不能超过255|P0=i;将i的值送PO 口delay。;调用延时函数)实例13:
20、用 P0 口显示逻辑“与“运算结果#include 包含单片机寄存器的头文件void main(void)P0=(40)&(90 xab);将逻辑运算结果送P0 口while(l)设置无限循环,防止程序“跑飞”)实例14:用 P0 口显示条件运算结果#include 包含单片机寄存器的头文件void main(void)(P0=(84)?8:4;将条件运算结果送 P0 口,P0=8=0000 1000Bwhile(l);设置无限循环,防止程序“跑飞”)实例15:用 P0 口显示按位“异或 运算结果#include 包含单片机寄存器的头文件void main(void)(P0=0 xa2A0 x
21、3c;将条件运算结果送 P0 口,P0=8=0000 1000Bwhile(l);设置无限循环,防止程序“跑飞”)实例16:用 P0显示左移运算结果#include 包含单片机寄存器的头文件void main(void)(PO=Ox3b2;将左移运算结果送 P0 口,P0=1110 1100B=0 xecwhile(l);无限循环,防止程序“跑飞”实例17:“万能逻辑电路”实验#include 包含单片机寄存器的头文件sbit F=P1A4;将 F 位定义为 P1.4sbitX=PlA5;将 X 位定义为 P1.5sbit Y=P1A6;将 Y 位定义为 P1.6sbit Z=P1A7;将 Z
22、 位定义为 P1.7void main(void)(while(l)(F=(X)&Y)|Z;将逻辑运算结果赋给F/)实例18:用右移运算流水点亮P1 口 8位LED#include 包含单片机寄存器的头文件函数功能:延时段时间void delay(void)unsigned int n;for(n=0;n函数功能:主函数void main(void)(unsigned char i;while(l)(Pl=Oxff;delay();for(i=0;i8;i+)设置循环次数为8|P1=P11;每次循环P l 的各二进位右移1 位,高位补0delay();调用延时函数)实例19:用if语句控制P0
23、 口 8位LED的流水方向#include 包含单片机寄存器的头文件sbit S1=P1A4;将 S1 位定义为 P1.4sbit S2=P1A5;将 S2 位定义为 P1.5函数功能:主函数void main(void)(while(l)(if(Sl=O)如果按键S1按下PO=OxOf;/P0 口高四位 LED 点亮if(S2=O)如果按键S2按下PO=OxfO;/P0 口低四位 LED 点亮)实例20:用swtich语句的控制P0 口 8位LED的点亮状态#include 包含单片机寄存器的头文件sbit S1=P1A4;将 S1 位定义为 P1.44数功能:延时一段时间void dela
24、y(void)(unsigned int n;for(n=0;n10000;n+)函数功能:主函数void main(void)unsigned char i;i=0;将i 初始化为0while(l)if(Sl=O)如果S I 键按下(delay();延时-一段时间if(Sl=O)如果再次检测到S1键 按 Hi+;i 自增 1if(i=9)如果i=9,重新将其置为1i=l;switch(i)使用多分支选择语句(case 1:PO=Oxfe;第一个 LED 亮break;case 2:PO=Oxfd;第二个 LED 亮break;case 3:P0=0 xfb;第三个 LED 亮break;ca
25、se 4:P0=0 xf7;第四个 LED 亮break;case 5:P0=0 xef;第五个 LED 亮break;case 6:P0=0 xdf;第六个 LED 亮break;case 7:P0=0 xbf;第七个 LED 亮break;case 8:P0=0 x7f;第八个 LED 亮break;default:缺省值,关闭所有LEDPO=Oxff;实例21:用 for语句控制蜂鸣器鸣笛次数#include 包含单片机寄存器的头文件sbit sound=P3A7;将 sound 位定义为 P3.7函数功能:延时形成1600Hz音频void delayl600(void)(unsigne
26、d char n;for(n=0;n100;n+)函数功能:延时形成800Hz音频void delay800(void)(unsigned char n;for(n=0;n200;n+)函数功能:主函数void main(void)(unsigned int i;while(l)(for(i=0;i830;i+)sound=0;P3.7输出低电平delayl600();sound=l;P3.7输出高电平delayl600();for(i=0;i200;i+)(sound=0;/P3.7输出低电平delay800();sound=l;P3.7输出高电平delay800();)实例22:用whil
27、e语句控制LED#include 包含单片机寄存器的头文件函数功能:延时约 60ms(3*100*200=60000 u s)void delay60ms(void)(unsigned char m,n;for(m=0;m100;m+)for(n=0;n200;n+)函数功能:主函数void main(void)(unsigned char i;while(l)无限循环(i=0;将i 初始化为0while(iOxff)当i 小于Oxff(255)时执行循环体(P0=i;将i 送 P0 口显示delay60ms();延时i+;i 自增 1)实例23:用do-while语句控制P0 口 8位LED
28、流水点亮#include 包含单片机寄存器的头文件函数功能:延时约 60ms(3*100*200=60000 u s)void delay60ms(void)unsigned char m,n;for(m=0;m100;m+)for(n=0;n200;n+)函数功能:主函数void main(void)do(PO=Oxfe;第一个 LED 亮delay60ms();PO=Oxfd;第二个 LED 亮delay60ms();PO=Oxfb;第三个LED亮delay60ms();PO=Oxf7;第四个LED亮delay60ms();PO=Oxef;第五个LED亮delay60ms();PO=Oxd
29、f;第六个LED亮delay60ms();delay60ms();PO=Oxbf;第七个LED亮delay60ms();PO=Ox7f;第八个LED亮delay60ms();while(l);无限循环,使8位LED循环流水点亮)实例24:用字符型数组控制P0 口 8 位 LED流水点亮#include 包含单片机寄存器的头文件函数功能:延时约 60ms(3*100*200=60000 u s)void delay60ms(void)(unsigned char m,n;for(m=0;m100;m+)for(n=0;n200;n+)函数功能:主函数void main(void)(unsigne
30、d char i;unsigned char code Tab=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;定义无符号字符型数组while(l)(for(i=0;i8;i+)(PO=Tabi;依次引用数组元素,并将其送P0 口显示delay60ms();调用延时函数)实例25:用 P0 口显示字符串常量#include 包含单片机寄存器的头文件函数功能:延时约 150ms(3*200*250=150 000 u s=150msvoid delayl50ms(void)(unsigned char m,n;for(m=0;m200;m+)for
31、(n=0;n250;n+)函数功能:主函数void main(void)(unsigned char str=Now,Temperature is 将字符串赋给字符型全部元素赋值unsigned char i;while(l)i=0;将i 初始化为0,从第一个元素开始显示while(stri!=0)只要没有显示到结束标志01P0=stri;将第i 个字符送到P0 口显示delayl50ms();调用 150ms 延时函数i+;指向下一个待显字符实例26:用 P0 口显示指针运算结果#includevoid main(void)(unsigned char*pl,*p2;定义无符号字符型指针变量
32、pl,p2unsigned char i,j;定义无符号字符型数据i=25;给i 赋初值25j=15;pl=&i;使指针变量指向i,对指针初始化p2=&j;使指针变量指向j,对指针初始化P0=*pl+*p2;/*pl+*p2 相当于 i+j,所以 P0=25+15=40=0 x28则P0=0010 1000B,结 果 P0.3、P0.5引 脚 LED熄灭,其余点亮while(l);无限循环,防止程序“跑飞”实例27:用指针数组控制P0 口 8位 LED流水点亮#include函数功能:延时约 150ms(3*200*250=150 000 U s=150msvoid delayl50ms(vo
33、id)(unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+)%数功能:上函数void main(void)(unsigned char code Tab=0 xfe,0 xfdz0 xfb,0 xf7,0 xef;0 xdf70 xbfz0 x7f;unsigned char*p=&Tab0,&Tablz&Tab2,&Tab3,&Tab4;&Tab5,&Tab6,&Tab7;unsigned char i;定义无符号字符型数据while(l)(for(i=0;i8;i+)(PO=*pi;delayl50ms();)实例28:用数组的指针控制P0
34、口 8 位 LED流水点亮#include函数功能:延时约 150ms(3*200*250=150 000 u s=150msvoid delayl50ms(void)(unsigned char m,n;for(m=0;m200;m+)for(n=0;n)函数功能:主函数void main(void)(unsigned char i;unsigned char Tab=0 xFF,0 xFEz0 xFD,0 xFB,0 xF7,0 xEF,0 xDFz0 xBF,0 x7F,0 xBF,0 xDF0 xEF,0 xF7QxFB,0 xFD,0 xFE,0 xFE,0 xFC,0 xFB,0
35、xF0,0 xE0,0 xC0,0 x80,0 x00,0 xE7,0 xDB,0 xBD,0 x7E,0 x3C,0 x18,0 x00,0 x81,0 xC3,0 xE7,0 x7E,0 xBD,0 xDB,0 xE7,0 xBD,0 xDB;流水灯控制码unsigned char*p;定义无符号字符型指针p=Tab;将数组首地址存入指针pwhile(l)(for(i=0;i32;i+)共3 2 个流水灯控制码(P0=*(p+i);*(p+i)的值等于 aidelayl50ms();调用 150ms 延时函数实例29:用P 0、P1 口显示整型函数返回值#include2 数功能:计算两个
36、无符号整数的和unsigned int sum(int ajnt b)(unsigned int s;s=a+b;return(s);)函数功能:主函数void main(void)unsigned z;z=sum(2008;2009);Pl=z/256;取得z 的高8 位P0=z%256;取得z 的低8 位while(l)实例30:用有参函数控制P0 口 8位 LED流水速度#include函数功能:延时段时间void delay(unsigned char x)(unsigned char m,n;for(m=0;mx;m+)for(n=0;n200;n+)/)函数功能:主函数void m
37、ain(void)unsigned char i;unsigned char code Tab=0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;流水灯控制码while(l)(快速流水点亮LEDfor(i=0;i8;i+)共8 个流水灯控制码|PO=Tabi;delay(lOO);/延时约 60ms,(3*100*200=60 000 u s)慢速流水点亮LEDfor(i=0;i8;i+)共8 个流水灯控制码(PO=Tabi;delay(250);延时约 150ms,(3*250*200=150 000 u s)实例31:用数组作函数参数控制流水花
38、样#include函数功能:延时约150msvoid delay(void)(unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+)函数功能:流水点亮P0 口 8位LEDvoid led_flow(unsigned char a8)(unsigned char i;for(i=0;i8;i+)(P0=ai;delay();)数 功 能:主函数void main(void)(unsigned char code Tab=0 xFEz0 xFDz0 xFB;0 xF7;0 xEF,0 xDF;0 xBFz0 x7F;流水灯控制码led_flow(Tab
39、);)实例32:用指针作函数参数控制P0 口 8位 LED流水点亮#include函数功能:延时约150msvoid delay(void)(unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+)函数功能:流水点亮P0 口 8 位 LEDvoid led_flow(unsigned char*p)形参为无符号字符型指针(unsigned char i;while(l)(i=0;将i 置 为 0,指向数组第一个元素while(*(p+i)!=0)只要没有指向数组的结束标志PO=*(p+i);取 的 指 针 所 指 变 量(数 组 元 素)的 值,送
40、P0Udelay();调用延时函数i+;指向下一个数组元素)函数功能:主函数void main(void)(unsigned char code Tab=0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F,0 x7F,0 xBF,0 xDF,0 xEF,0 xF7,0 xFB,0 xFD,0 xFE,0 xFF,0 xFE,0 xFC,0 xFB,0 xF0,0 xE0,0 xC0,0 x80,0 x00,0 xE7,0 xDB,0 xBD,0 x7E,0 xFF,0 xFF,0 x3C,0 x18,0 x0,0 x81,0 xC3,0 xE7,0
41、xFF,0 xFF,0 x7E;流水灯控制码unsigned char*pointer;pointer=Tab;led_flow(pointer);)实例33:用函数型指针控制P1 口灯花样#include 包含51单片机寄存器定义的头文件unsigned char code Tab=0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;流水灯控制码,该数组被定义为全局变量函数功能:延时约150msvoid delay(void)unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+)函数功能:流水灯左移vo
42、id led_flow(void)unsigned char i;for(i=0;i8;i+)8 位控制码PO=Tabi;delay();)函数功能:主函数void main(void)void(*pMvoid);定义函数型指针,所指函数无参数,无返回值p=led_flow;将函数的入口地址赋给函数型指针pwhile(l)(*P)0;通过函数的指针p 调用函数led_flow()实例34:用指针数组作为函数的参数显示多个字符串#include 包含51单片机寄存器定义的头文件unsigned char code strl=Temperature is tested by DS18B20;/C
43、语言中,字符串是作为字符数组来处理的unsigned char code str2=Now temperature is:;所以,字符串的名字就是字符串的首地址unsigned char code str3=The Systerm is designed by Zhang San;unsigned char code str4=The date is 2008-9-30;unsigned char*p=strl,rtr2,str3,str4;定 义p为指向4个字符串的字符型指针数组函数功能:延时约150msvoid delay(void)(unsigned char m,n;for(m=0;m
44、200;m+)for(n=0;n250;n+),函数功能:流水点亮P0 口 8位LEDvoid led_display(unsigned char*x)形参必须为指针数组(unsigned char i,j;for(i=0;i4;i+)有4个字符串要显示j=0;指向待显字符串的第。号元素while(*(xi+j)!=(r)只要第i个字符串的第j号元素不是结束标志(PO=*(xi+j);取得该元素值送到P0 L1显示delay();调用延时函数j+;指向下一个元素)函数功能:主函数void main(void)(unsigned char i;while(l)(for(i=0;i4;i+)led
45、_display(p);将指针数组名作实际参数传递)实例35:字符函数ctype.h应用举例#include 包含51单片机寄存器定义的头文件#includevoid main(void)(while(l)(P3=isalphadkOxfOQxOf;条件运算,若,二是英文字母,P3=0 xf0)实例36:内部函数intrins.h应用举例#include 包含51单片机寄存器定义的头文件#include 包含函数isalpha()声明的头文件函数功能:延时约150msvoid delay(void)(unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;
46、n+),)函数功能:主函数void main(void)P3=0 xfe;/P3=llll 1110Bwhile(l)P3=_crol_(P3,l);/将P3的二进制位循环左移1位后再赋给P3delay();调用延时函数)实例37:标准函数stdlib.h应用举例#include 包含51单片机寄存器定义的头文件#include 包含函数isalpha()声明的头文件函数功能:延时约150msvoid delay(void)unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+)函数功能:主函数void main(void)unsigned char
47、 i;while(l)for(i=0;i10;i+)产生 10 个随机数P3=rand()/160;将产生的随机数缩小160倍 后 送P3显示delay();)实例38:字符串函数strings应用举例#include 包含51单片机寄存器定义的头文件#include 包含函数isalpha()声明的头文件void main(void)(unsigned char strl=nNow,The temperature isunsigned char str2=Now,The temperature is 36 Centgrade:*;unsigned char i;i二strcmp(stC,st
48、r2);比较两个字符串,并将结果存入iif(i=0)/strl=str2P3=0 x00;elseif(i0)/strlstr2P3=OxOf;while(l);防止程序“跑飞”)实例39:宏定义应用举例2#include 包含51单片机寄存器定义的头文件#define F(a,b)(a)+(a)*(b)/256+(b)带参数的宏定义,a 和 b 为形参void main(void)(unsigned char i,j,k;i=40;j=30;k=20;P3=F(i,j+k);1和)+1分别为实参,宏展开时,实参将替代宏定义中的形参while(l)实例40:宏定义应用举例2#include#i
49、ncludevoid main(void)(P3_0=0;将P3.0引脚置低电平,LED点亮P3_l=0;将P3.0引脚置低电平,LED点亮P3_2=0;将P3.0引脚置低电平,LED点亮P3_3=0;将P3.0引脚置低电平,LED点亮P3_4=l;将P3.4引脚置高电平,LED熄灭P3_5=l;将P3.5引脚置高电平,LED熄灭P3_6=l;将P3.7引脚置高电平,LED熄灭P3_7=l;将P3.7引脚置高电平,LED熄灭while(l)/实例41:宏定义应用举例3#include 包含51单片机寄存器定义的头文件#define MAX 100 将M AX宏定义为字符串100void mai
50、n(void)(#if MAX80 如果字符串100大 于80P3=OxfO;/P3 口 低四位 LED 点亮#elseP3=0 x0f;否则,P3 口高四位LED点亮#endif 结束本次编译)*中断、定时器*中断、定时器*中断、定时器*中断、定时器*实例42:用定时器TO查询方式P2 8位控制LED闪烁#include/包 含5 1单片机寄存器定义的头文件函数功能:主函数void main(void)(/EA=1;开总中断/ETO=1;定时器TO中断允许TMOD=0 x01;使用定时器TO的模式1TH0=(65536-46083)/256;定时器TO的高8位赋初值TL0=(65536-46