51单片机C程序架构 51单片机c程序设计100例子_51单片机C程序架构

51单片机C语言编程100例.doc

.目 录

实例3用单片机控制第一个灯亮3

实例4用单片机控制一个灯闪烁认识单片机的工作频率3

实例5将 P1口状态分别送入P0、P2、P3口认识I/O口的引脚功能3

实例6使用P3口流水点亮8位LED3

实例7通过对P3口地址的操作流水点亮8位LED3

实例8用不同数据类型控制灯闪烁时间3

实例9用P0口、P1 口分别显示加法和减法运算结果3

实例10用P0、P1口显示乘法运算结果3

实例11用P1、P0口显示除法运算结果3

实例12用自增运算控制P0口8位LED流水花样3

实例13用P0口显示逻辑与运算结果3

实例14用P0口显示条件运算结果3

实例15用P0口显示按位异或运算结果3

实例16用P0显示左移运算结果3

实例17万能逻辑电路实验3

实例18用右移运算流水点亮P1口8位LED3

实例19用if语句控制P0口8位LED的流水方向3

实例20用swtich语句的控制P0口8位LED的点亮状态3

实例21用for语句控制蜂鸣器鸣笛次数3

实例22用while语句控制LED3

实例23用do-while语句控制P0口8位LED流水点亮3

实例24用字符型数组控制P0口8位LED流水点亮3

实例25 用P0口显示字符串常量3

实例26用P0 口显示指针运算结果3

实例27用指针数组控制P0口8位LED流水点亮3

实例28用数组的指针控制P0 口8 位LED流水点亮3

实例29用P0 、P1口显示整型函数返回值3

实例30用有参函数控制P0口8位LED流水速度3

实例31用数组作函数参数控制流水花样3

实例32用指针作函数参数控制P0口8位LED流水点亮3

实例33用函数型指针控制P1口灯花样3

实例34用指针数组作为函数的参数显示多个字符串3

实例35字符函数ctype.h应用举例3

实例36内部函数intrins.h应用举例3

实例37标准函数stdlib.h应用举例3

实例38字符串函数string.h应用举例3

实例39宏定义应用举例23

实例40宏定义应用举例23

实例41宏定义应用举例33

实例42用定时器T0查询方式P2口8位控制LED闪烁3

实例43用定时器T1查询方式控制单片机发出1KHz音频3

实例44将计数器T0计数的结果送P1口8位LED显示3

实例45用定时器T0的中断控制1位LED闪烁3

实例46用定时器T0的中断实现长时间定时3

实例47用定时器T1中断控制两个LED以不同周期闪烁3

实例48用计数器T1的中断控制蜂鸣器发出1KHz音频3

实例49用定时器T0的中断实现渴望主题曲的播放3

实例50-1输出50个矩形脉冲3

实例50-2计数器T0统计外部脉冲数3

实例51-2定时器T0的模式2测量正脉冲宽度3

实例52用定时器T0控制输出高低宽度不同的矩形波3

实例53用外中断0的中断方式进行数据采集3

实例54-1输出负脉宽为200微秒的方波3

实例54-2测量负脉冲宽度3

实例55方式0控制流水灯循环点亮3

实例56-1数据发送程序3

实例56-2数据接收程序3

实例57-1数据发送程序3

实例57-2数据接收程序3

实例58单片机向PC发送数据3

实例59单片机接收PC发出的数据3

实例60用LED数码显示数字53

实例61用LED数码显示器循环显示数字093

实例62用数码管慢速动态扫描显示数字12343

实例63用LED数码显示器伪静态显示数字12343

实例64用数码管显示动态检测结果3

实例65数码秒表设计3

实例66数码时钟设计3

实例67用LED数码管显示计数器T0的计数值3

实例68静态显示数字“59”3

实例69无软件消抖的独立式键盘输入实验3

实例70软件消抖的独立式键盘输入实验3

实例71CPU控制的独立式键盘扫描实验3

实例72定时器中断控制的独立式键盘扫描实验3

实例73独立式键盘控制的4级变速流水灯3

实例74独立式键盘的按键功能扩展以一当四3

实例75独立式键盘调时的数码时钟实验3

实例76独立式键盘控制步进电机实验3

实例77矩阵式键盘按键值的数码管显示实验3

实例78矩阵式键盘按键音3

实例79简易电子琴3

实例80矩阵式键盘实现的电子密码锁3

实例81用LCD显示字符A3

实例82用LCD循环右移显示Welcome to China3

实例83用LCD显示适时检测结果3

实例84液晶时钟设计3

实例85将数据0 x0f写入AT24C02再读出送P1口显示3

实例86将按键次数写入AT24C02,再读出并用1602LCD显示3

实例87对I2C总线上挂接多个AT24C02的读写操作3

实例88基于AT24C02的多机通信 读取程序3

实例88基于AT24C02的多机通信 写入程序3

实例90DS18B20温度检测及其液晶显示3

实例91将数据0 xaa写入X5045再读出送P1口显示3

实例92将流水灯控制码写入X5045并读出送P1口显示3

实例93对SPI总线上挂接多个X5045的读写操作3

实例94基于ADC0832的数字电压表3

实例95用DAC0832产生锯齿波电压3

实例96用P1口显示红外遥控器的按键值3

实例97用红外遥控器控制继电器3

实例98基于DS1302的日历时钟3

实例99单片机数据发送程序3

实例100电机转速表设计3模拟霍尔脉冲3/函数的使用和熟悉/

实例3用单片机控制第一个灯亮includereg51.h 包含51单片机寄存器定义的头文件void mainvoid while1 无限循环P10 xfe; P11111 1110B,即P1.0输出低电平

实例4用单片机控制一个灯闪烁认识单片机的工作频率includereg51.h 包含单片机寄存器的头文件/函数功能延时一段时间*/void delayvoid 两个void意思分别为无需返回值,没有参数传递 unsigned int i; 定义无符号整数,最大取值范围65535 fori0;i20000;i 做20000次空循环 ; 什么也不做,等待一个机器周期/*函数功能主函数 (C语言规定必须有也只能有1个主函数)/void mainvoid while1 无限循环 P10 xfe; P11111 1110B, P1.0输出低电平 delay; 延时一段时间 P10 xff; P11111 1111B, P1.0输出高电平 delay; 延时一段时间

实例5将 P1口状态分别送入P0、P2、P3口认识I/O口的引脚功能includereg51.h 包含单片机寄存器的头文件/*函数功能主函数 (C语言规定必须有也只能有1个主函数)/void mainvoid while1 无限循环 P10 xff; P11111 1111, 熄灭LED P0P1; 将 P1口状态送入P0口P2P1; 将 P1口状态送入P2口 P3P1; 将 P1口状态送入P3口

实例6使用P3口流水点亮8位LED includereg51.h 包含单片机寄存器的头文件/函数功能延时一段时间*/void delayvoid unsigned char i,j; fori0;i250;i forj0;j250;j ;/*函数功能主函数 /void mainvoid while1 P30 xfe; 第一个灯亮 delay; 调用延时函数 P30 xfd; 第二个灯亮 delay; 调用延时函数P30 xfb; 第三个灯亮 delay; 调用延时函数P30 xf7; 第四个灯亮 delay; 调用延时函数P30 xef; 第五个灯亮 delay; 调用延时函数P30 xdf; 第六个灯亮 delay; 调用延时函数P30 xbf; 第七个灯亮 delay; 调用延时函数P30 x7f; 第八个灯亮 delay; 调用延时函数

实例7通过对P3口地址的操作流水点亮8位LEDincludereg51.h 包含单片机寄存器的头文件sfr x0 xb0; P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机 的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作/函数功能延时一段时间*/void delayvoid unsigned char i,j; fori0;i250;i forj0;j250;j ; 利用循环等待若干机器周期,从而延时一段时间 /*函数功能主函数 /void mainvoid while1 x0 xfe; 第一个灯亮 delay; 调用延时函数 x0 xfd; 第二个灯亮 delay; 调用延时函数 x0 xfb; 第三个灯亮 delay; 调用延时函数 x0 xf7; 第四个灯亮 delay; 调用延时函数x0 xef; 第五个灯亮 delay; 调用延时函数x0 xdf; 第六个灯亮 delay; 调用延时函数x0 xbf; 第七个灯亮 delay; 调用延时函数x0 x7f; 第八个灯亮 delay; 调用延时函数

实例8用不同数据类型控制灯闪烁时间includereg51.h 包含单片机寄存器的头文件/函数功能用整形数据延时一段时间/void int_delayvoid 延时一段较长的时间 unsigned int m; 定义无符号整形变量,双字节数据,值域为065535 form0;m36000;m ; 空操作 /函数功能用字符型数据延时一段时间/void char_delayvoid 延时一段较短的时间 unsigned char i,j; 定义无符号字符型变量,单字节数据,值域0255fori0;i200;i forj0;j180;j ; 空操作/函数功能主函数/void mainvoid unsigned char i; while1 fori0;i3;i P10 xfe; P1.0口的灯点亮 int_delay; 延时一段较长的时间 P10 xff; 熄灭 int_delay; 延时一段较长的时间 fori0;i3;i P10 xef; P1.4口的灯点亮 char_delay; 延时一段较长的时间 P10 xff; 熄灭 char_delay; 延时一段较长的时间

实例9用P0口、P1口分别显示加法和减法运算结果includereg51.hvoid mainvoid unsigned char m,n; m43; 即十进制数2x161143 n60; 即十进制数3x161260 P1mn; P11030110 0111,结果P1.3、P1.4、P1.7 口的灯被点亮 P0n-m; P0170001 0001,结果P0.0、P0.4的灯被熄灭

实例10用P0、P1口显示乘法运算结果includereg51.h 包含单片机寄存器的头文件void mainvoid unsigned char m,n; unsigned int s; m64; n71; smn; s64714544,需要16位二进制数表示,高8位送P1口,低8位送P0口 由于454417256192H3161616H21616H116H0两边同除以256,可得17192/256H316H2(H116H0)/256因此,高8位16进制数H316H2必然等于17,即4544除以256的商低8位16进制数H116H0必然等于192,即4544除以256的余数 P1s/256; 高8位送P1口 ,P11711H0001 0001B, P1.0和P1.4口灭,其余亮 P0s256; 低8位送P0口 , P3192c0H1100 0000B,P3.1,P3.6,P3.7口灭,其余亮

实例11用P1、P0口显示除法运算结果includereg51.h 包含单片机寄存器的头文件void mainvoid P136/5; 求整数 P036510/5; 求小数 while1 ; 无限循环防止程序“跑飞”

实例12用自增运算控制P0口8位LED流水花样includereg51.h 包含单片机寄存器的头文件/函数功能延时一段时间/void delayvoid unsigned int i; fori0;i20000;i ;/函数功能主函数/void mainvoid unsigned char i; fori0;i255;i 注意i的值不能超过255 P0i; 将i的值送P0口 delay; 调用延时函数

实例13用P0口显示逻辑与运算结果includereg51.h 包含单片机寄存器的头文件void mainvoid P04090 xab;将逻辑运算结果送P0口 while1 ; 设置无限循环,防止程序“跑飞”

实例14用P0口显示条件运算结果includereg51.h 包含单片机寄存器的头文件void mainvoid P08484;将条件运算结果送P0口,P080000 1000B while1 ; 设置无限循环,防止程序“跑飞”

实例15用P0口显示按位异或运算结果includereg51.h 包含单片机寄存器的头文件void mainvoid P00 xa20 x3c;将条件运算结果送P0口,P080000 1000B while1 ; 设置无限循环,防止程序“跑飞”

实例16用P0显示左移运算结果includereg51.h 包含单片机寄存器的头文件void mainvoid P00 x3b2; 将左移运算结果送P0口,P01110 1100B0 xec while1 ; 无限循环,防止程序“跑飞”

实例17万能逻辑电路实验includereg51.h 包含单片机寄存器的头文件sbit FP14; 将F位定义为 P1.4sbit XP15; 将X位定义为 P1.5sbit YP16; 将Y位定义为 P1.6sbit ZP17; 将Z位定义为 P1.7void mainvoid while1 FX 将逻辑运算结果赋给F ;

实例18用右移运算流水点亮P1口8位LEDincludereg51.h 包含单片机寄存器的头文件/函数功能延时一段时间/void delayvoid unsigned int n; forn0;n30000;n ;/函数功能主函数/void mainvoid unsigned char i; while1 P10 xff;delay;fori0;i8;i设置循环次数为8 P1P11; 每次循环P1的各二进位右移1位,高位补0delay; 调用延时函数

实例19用if语句控制P0口8位LED的流水方向includereg51.h 包含单片机寄存器的头文件sbit S1P14; 将S1位定义为P1.4sbit S2P15; 将S2位定义为P1.5/函数功能主函数/void mainvoid while1 ifS10 如果按键S1按下 P00 x0f; P0口高四位LED点亮 ifS20 如果按键S2按下 P00 xf0; P0口低四位LED点亮

实例20用swtich语句的控制P0口8位LED的点亮状态includereg51.h 包含单片机寄存器的头文件sbit S1P14; 将S1位定义为P1.4/函数功能延时一段时间/void delayvoid unsigned int n; forn0;n10000;n ;/函数功能主函数/void mainvoid unsigned char i;i0; 将i初始化为0while1 ifS10 如果S1键按下 delay; 延时一段时间 ifS10 如果再次检测到S1键按下 i; i自增1 ifi9 如果i9,重新将其置为1 i1; switchi 使用多分支选择语句 case 1 P00 xfe; 第一个LED亮break;case 2 P00 xfd; 第二个LED亮 break;case 3P00 xfb; 第三个LED亮 break;case 4P00 xf7; 第四个LED亮 break;case 5P00 xef; 第五个LED亮 break;case 6P00 xdf; 第六个LED亮 break;case 7P00 xbf; 第七个LED亮 break;case 8P00 x7f; 第八个LED亮 break;default 缺省值,关闭所有LED P00 xff;

实例21用for语句控制蜂鸣器鸣笛次数includereg51.h 包含单片机寄存器的头文件sbit soundP37; 将sound位定义为P3.7/函数功能延时形成1600Hz音频/void delay1600void unsigned char n; forn0;n100;n ;/函数功能延时形成800Hz音频/void delay800void unsigned char n; forn0;n200;n ;/函数功能主函数/void mainvoid unsigned int i;while1 fori0;i830;i sound0; P3.7输出低电平 delay1600; sound1; P3.7输出高电平 delay1600; fori0;i200;i sound0; P3.7输出低电平 delay800; sound1; P3.7输出高电平 delay800;

实例22用while语句控制LEDincludereg51.h 包含单片机寄存器的头文件/函数功能延时约60ms 310020060000s/void delay60msvoid unsigned char m,n; form0;m100;m forn0;n200;n ;/函数功能主函数/void mainvoid unsigned char i;while1 无限循环 i0; 将i初始化为0 whilei0 xff 当i小于0 xff(255时执行循环体 P0i; 将i送P0口显示 delay60ms; 延时 i; i自增1

实例23用do-while语句控制P0口8位LED流水点亮includereg51.h 包含单片机寄存器的头文件/函数功能延时约60ms 310020060000s/void delay60msvoid unsigned char m,n; form0;m100;m forn0;n200;n ;/函数功能主函数/void mainvoid do P00 xfe; 第一个LED亮delay60ms; P00 xfd; 第二个LED亮delay60ms;P00 xfb; 第三个LED亮delay60ms;P00 xf7; 第四个LED亮delay60ms;P00 xef; 第五个LED亮delay60ms;P00 xdf; 第六个LED亮delay60ms;delay60ms;P00 xbf; 第七个LED亮delay60ms;P00 x7f; 第八个LED亮 delay60ms; while1; 无限循环,使8位LED循环流水点亮

实例24用字符型数组控制P0口8位LED流水点亮includereg51.h 包含单片机寄存器的头文件/函数功能延时约60ms 310020060000s/void delay60msvoid unsigned char m,n; form0;m100;m forn0;n200;n ;/函数功能主函数/void mainvoid unsigned char i; unsigned char code Tab 0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; 定义无符号字符型数组 while1 fori0;i8;i P0Tabi;依次引用数组元素,并将其送P0口显示 delay60ms;调用延时函数

实例25 用P0口显示字符串常量includereg51.h 包含单片机寄存器的头文件/*函数功能延时约150ms 3*200*250150 000s150ms*/void delay150msvoid unsigned char m,n; form0;m200;m forn0;n250;n ;/*函数功能主函数*/void mainvoid unsigned char strNow,Temperature is ; 将字符串赋给字符型全部元素赋值 unsigned char i; while1 i0; 将i初始化为0,从第一个元素开始显示 whilestri0 只要没有显示到结束标志0