51单片机典型应用开发范例大全

合集下载

51单片机C语言编程100例

51单片机C语言编程100例

范文范例学习指导目录实例3:用单片机控制第一个灯亮 (3)实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (3)实例5:将 P1 口状态分别送入P0、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 实例11:用 P1、P0口显示除法运算结果................................9实例12:用自增运算控制P0口 8 位LED流水花样 ........................9 实例13:用 P0口显示逻辑"与"运算结果 ...............................10 实例14:用 P0口显示条件运算结果...................................10 实例15:用 P0口显示按位"异或" 运算结果 .............................10 实例16:用 P0显示左移运算结果.....................................10 实例17:" 万能逻辑电路" 实验 ........................................11实例18:用右移运算流水点亮P1口8 位LED............................11 实例19:用 if 语句控制P0口8 位LED的流水方向 ......................12 实例20:用 swtich 语句的控制P0口8 位LED的点亮状态 ................12 实例21:用 for 语句控制蜂鸣器鸣笛次数..............................14 实例22:用 while 语句控制LED.......................................15 实例23:用 do-while 语句控制P0口8 位LED流水点亮 ..................16 实例24:用字符型数组控制P0口8 位LED流水点亮 .....................16 实例25:用P0口显示字符串常量....................................17 实例26:用 P0 口显示指针运算结果 ...................................18 实例27:用指针数组控制P0口8 位LED流水点亮 .......................18 实例28:用数组的指针控制P0 口8 位LED流水点亮 ....................19实例29:用 P0 、P1口显示整型函数返回值............................20 实例30:用有参函数控制P0口8 位LED流水速度 .......................21 实例31:用数组作函数参数控制流水花样..............................22 实例32:用指针作函数参数控制P0口8 位LED流水点亮 .................23 实例33:用函数型指针控制P1口灯花样 ...............................24 实例34:用指针数组作为函数的参数显示多个字符串....................25 实例35:字符函数ctype.h 应用举例 ..................................26 实例36:内部函数intrins.h 应用举例 ................................27 实例37:标准函数stdlib.h 应用举例 .................................27 实例38:字符串函数string.h 应用举例 ...............................28实例39:宏定义应用举例 2...........................................28 实例40:宏定义应用举例 2...........................................29 实例41:宏定义应用举例 3...........................................29 实例42:用定时器T0查询方式P2口8 位控制 LED闪烁 ..................30 实例43:用定时器T1查询方式控制单片机发出1KHz音频 ................31 实例44:将计数器T0计数的结果送P1口 8 位LED显示 ..................31word 完美整理版范文范例学习指导实例45:用定时器T0的中断控制 1 位LED闪烁 (32)实例46:用定时器T0的中断实现长时间定时 (33)实例47:用定时器T1中断控制两个LED以不同周期闪烁 (34)实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频 (35)实例49:用定时器T0的中断实现"渴望" 主题曲的播放 (35)实例50-1:输出 50 个矩形脉冲 (38)实例50-2:计数器 T0统计外部脉冲数 (39)实例51-2:定时器 T0的模式 2 测量正脉冲宽度 (40)实例52:用定时器T0控制输出高低宽度不同的矩形波 (40)实例53:用外中断0 的中断方式进行数据采集..........................41 实例54-1:输出负脉宽为200 微秒的方波 ..............................42实例54-2:测量负脉冲宽度..........................................43 实例55:方式 0 控制流水灯循环点亮..................................44 实例56-1:数据发送程序............................................45 实例56-2:数据接收程序............................................46 实例57-1:数据发送程序............................................47 实例57-2:数据接收程序............................................48实例58:单片机向PC发送数据 .......................................49 实例59:单片机接收PC发出的数据 ...................................50 实例60:用 LED数码显示数字 5.......................................51 实例61:用 LED数码显示器循环显示数字0~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 实例75:独立式键盘调时的数码时钟实验..............................74 实例76:独立式键盘控制步进电机实验................................78 实例77:矩阵式键盘按键值的数码管显示实验..........................81 实例78:矩阵式键盘按键音..........................................84实例79:简易电子琴................................................85 实例80:矩阵式键盘实现的电子密码锁................................91 实例81:用 LCD显示字符'A' .........................................95 实例82:用 LCD循环右移显示 "Welcome to China" ......................98 实例83:用 LCD显示适时检测结果................................... 102 实例84:液晶时钟设计 (106)word 完美整理版范文范例学习指导实例85:将数据"0x0f" 写入 AT24C02再读出送 P1口显示 (112)实例86:将按键次数写入AT24C02,再读出并用1602LCD显示 (116)实例87:对 I2C 总线上挂接多个AT24C02的读写操作 (124)实例88:基于 AT24C02的多机通信读取程序 (129)实例88:基于 AT24C02的多机通信写入程序 (133)实例90:DS18B20温度检测及其液晶显示 (144)实例91:将数据"0xaa" 写入 X5045再读出送P1口显示 (153)实例92:将流水灯控制码写入X5045并读出送 P1口显示 (157)实例93:对 SPI 总线上挂接多个X5045的读写操作 (161)实例94:基于 ADC0832的数字电压表.................................165 实例95:用 DAC0832产生锯齿波电压.................................171实例96:用 P1口显示红外遥控器的按键值............................172 实例97:用红外遥控器控制继电器...................................174 实例98:基于 DS1302的日历时钟 ....................................177 实例99:单片机数据发送程序.......................................186 实例100:电机转速表设计..........................................187 模拟霍尔脉冲 ......................................................192/* 函数的使用和熟悉 */// 实例 3:用单片机控制第一个灯亮#include<reg51.h> // 包含51 单片机寄存器定义的头文件void main(void){while(1) // 无限循环P1=0xfe; //P1=1111 1110B ,即 P1.0 输出低电平}// 实例 4:用单片机控制一个灯闪烁:认识单片机的工作频率#include<reg51.h> // 包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/void delay(void) // 两个void 意思分别为无需返回值,没有参数传递 { unsigned int i; // 定义无符号整数,最大取值范围65535for(i=0;i<20000;i++) // 做20000 次空循环; // 什么也不做,等待一个机器周期}/*******************************************************函数功能:主函数(C语言规定必须有也只能有1个主函数)word 完美整理版范文范例学习指导********************************************************/void main(void){while(1) // 无限循环{P1=0xfe; //P1=1111 1110B ,P1.0 输出低电平delay(); // 延时一段时间P1=0xff; //P1=1111 1111B ,P1.0 输出高电平delay(); // 延时一段时间}}// 实例 5:将 P1 口状态分别送入P0、P2、P3口:认识 I/O 口的引脚功能#include<reg51.h> // 包含单片机寄存器的头文件/*******************************************************函数功能:主函数(C语言规定必须有也只能有1个主函数)********************************************************/void main(void){while(1) // 无限循环{P1=0xff; // P1=1111 1111, 熄灭 LEDP0=P1; // 将P1 口状态送入P0口P2=P1; // 将P1 口状态送入P2口P3=P1; // 将P1 口状态送入P3口}}// 实例 6:使用 P3 口流水点亮8 位LED#include<reg51.h> // 包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/void delay(void)word 完美整理版范文范例学习指导{unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}/*******************************************************函数功能:主函数********************************************************/void main(void){while(1){P3=0xfe; // 第一个灯亮delay(); // 调用延时函数P3=0xfd; // 第二个灯亮delay(); // 调用延时函数P3=0xfb; // 第三个灯亮delay(); // 调用延时函数P3=0xf7; // 第四个灯亮delay(); // 调用延时函数P3=0xef; // 第五个灯亮delay(); // 调用延时函数P3=0xdf; // 第六个灯亮delay(); // 调用延时函数P3=0xbf; // 第七个灯亮delay(); // 调用延时函数 P3=0x7f; // 第八个灯亮delay(); // 调用延时函数}}// 实例 7:通过对P3口地址的操作流水点亮8 位LED#include<reg51.h> // 包含单片机寄存器的头文件sfr x=0xb0; //P3 口在存储器中的地址是b0H,通过 sfr 可定义 8051 内核单片机// 的所有内部 8 位特殊功能寄存器, 对地址 x 的操作也就是对P1 口的操作/****************************************word 完美整理版范文范例学习指导函数功能:延时一段时间*****************************************/void delay(void){unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++); // 利用循环等待若干机器周期,从而延时一段时间}/*****************************************函数功能:主函数******************************************/void main(void){while(1){x=0xfe; // 第一个灯亮delay(); // 调用延时函数x=0xfd; // 第二个灯亮delay(); // 调用延时函数x=0xfb; // 第三个灯亮delay(); // 调用延时函数x=0xf7; // 第四个灯亮delay(); // 调用延时函数x=0xef; // 第五个灯亮delay(); // 调用延时函数x=0xdf; // 第六个灯亮delay(); // 调用延时函数x=0xbf; // 第七个灯亮delay(); // 调用延时函数x=0x7f; // 第八个灯亮delay(); // 调用延时函数}}// 实例 8:用不同数据类型控制灯闪烁时间#include<reg51.h> // 包含单片机寄存器的头文件word 完美整理版范文范例学习指导函数功能:用整形数据延时一段时间******************************************************/void int_delay(void) // 延时一段较长的时间{unsigned int m; // 定义无符号整形变量,双字节数据,值域为0~65535 for(m=0;m<36000;m++); // 空操作}/******************************************************函数功能:用字符型数据延时一段时间******************************************************/void char_delay(void) // 延时一段较短的时间{unsigned char i,j; // 定义无符号字符型变量,单字节数据,值域0~255 for(i=0;i<200;i++)for(j=0;j<180;j++); // 空操作 }/******************************************************函数功能:主函数******************************************************/void main(void){unsigned char i;while(1){for(i=0;i<3;i++){P1=0xfe; //P1.0 口的灯点亮int_delay(); // 延时一段较长的时间P1=0xff; // 熄灭int_delay(); // 延时一段较长的时间}for(i=0;i<3;i++){P1=0xef; //P1.4 口的灯点亮char_delay(); // 延时一段较长的时间P1=0xff; // 熄灭char_delay(); // 延时一段较长的时间}}word 完美整理版// 实例 9:用 P0口、P1 口分别显示加法和减法运算结果#include<reg51.h>void main(void){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<reg51.h> // 包含单片机寄存器的头文件void main(void){unsigned char m,n;unsigned int 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+H0// 两边同除以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.0 和P1.4 口灭,其余亮P0=s%256; // 低8 位送P0口, P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7口灭,其余亮}// 实例 11:用 P1、P0口显示除法运算结果#include<reg51.h> // 包含单片机寄存器的头文件void main(void){P1=36/5; // 求整数P0=((36%5)*10)/5; // 求小数while(1); // 无限循环防止程序“跑飞”}// 实例 12:用自增运算控制P0口8 位LED流水花样#include<reg51.h> // 包含单片机寄存器的头文件/******************************************************函数功能:延时一段时间******************************************************/ void delay(void){unsigned int i;for(i=0;i<20000;i++);}/****************************************************** 函数功能******************************************************/ void main(void){unsigned char i;for(i=0;i<255;i++) // 注意i 的值不能超过255 {P0=i; // 将i 的值送 P0口delay(); // 调用延时函数}}// 实例 13:用 P0口显示逻辑"与" 运算结果#include<reg51.h> // 包含单片机寄存器的头文件void main(void){P0=(4>0)&&(9>0xab);// 将逻辑运算结果送P0口while(1); // 设置无限循环,防止程序“跑飞”}// 实例 14:用 P0口显示条件运算结果#include<reg51.h> // 包含单片机寄存器的头文件void main(void){P0=(8>4)?8:4;// 将条件运算结果送P0口,P0=8=0000 1000B while(1); // 设置无限循环,防止程序“跑飞”}// 实例 15:用 P0口显示按位 " 异或" 运算结果#include<reg51.h> // 包含单片机寄存器的头文件void main(void){P0=0xa2^0x3c;// 将条件运算结果送P0口,P0=8=0000 1000B while(1); // 设置无限循环,防止程序“跑飞”}// 实例 16:用 P0显示左移运算结果#include<reg51.h> // 包含单片机寄存器的头文件void main(void){P0=0x3b<<2; // 将左移运算结果送P0口,P0=1110 1100B=0xec while(1); // 无限循环,防止程序“跑飞” }// 实例 17:" 万能逻辑电路"实验#include<reg51.h> // 包含单片机寄存器的头文件sbit F=P1^4; // 将F 位定义为 P1.4sbit X=P1^5; // 将X位定义为 P1.5sbit Y=P1^6; // 将Y位定义为 P1.6sbit Z=P1^7; // 将Z 位定义为 P1.7void main(void){while(1){F=((~X)&Y)|Z; // 将逻辑运算结果赋给 F;}}// 实例 18:用右移运算流水点亮P1口8 位LED#include<reg51.h> // 包含单片机寄存器的头文件/*****************************函数功能:延时一段时间*****************************/void delay(void){unsigned int n;for(n=0;n<30000;n++); }/*****************************函数功能:主函数*****************************/void main(void){unsigned char i;while(1){P1=0xff;delay();for(i=0;i<8;i++)// 设置循环次数为8{P1=P1>>1; // 每次循环 P1的各二进位右移 1 位,高位补0 delay(); // 调用延时函数}}}// 实例 19:用 if 语句控制P0口8 位LED的流水方向#include<reg51.h> // 包含单片机寄存器的头文件sbit S1=P1^4; // 将S1位定义为 P1.4sbit S2=P1^5; // 将S2位定义为 P1.5/***************************** 函数功能:主函数*****************************/void main(void){while(1){if(S1==0) // 如果按键S1按下P0=0x0f; //P0 口高四位 LED点亮if(S2==0) // 如果按键S2按下P0=0xf0; //P0 口低四位 LED点亮}}// 实例 20:用 swtich 语句的控制P0口8 位LED的点亮状态#include<reg51.h> // 包含单片机寄存器的头文件sbit S1=P1^4; // 将S1位定义为 P1.4/*****************************函数功能:延时一段时间*****************************/void delay(void){unsigned int n;for(n=0;n<10000;n++);}/*****************************函数功能:主函数*****************************/void main(void){unsigned char i;i=0; // 将i 初始化为 0while(1){if(S1==0) // 如果S1键按下{delay(); // 延时一段时间if(S1==0) // 如果再次检测到S1键按下i++; //i 自增1if(i==9) // 如果 i=9 ,重新将其置为 1i=1;}switch(i) // 使用多分支选择语句{case 1: P0=0xfe; // 第一个 LED亮break;case 2: P0=0xfd; // 第二个 LED亮break;case 3:P0=0xfb; // 第三个 LED亮break;case 4:P0=0xf7; // 第四个 LED亮break;case 5:P0=0xef; // 第五个 LED亮break;case 6:P0=0xdf; // 第六个 LED亮break;case 7:P0=0xbf; // 第七个 LED亮break;case 8:P0=0x7f; // 第八个 LED亮break;default: // 缺省值,关闭所有LEDP0=0xff;}}}范文范例学习指导// 实例 21:用 for 语句控制蜂鸣器鸣笛次数#include<reg51.h> // 包含单片机寄存器的头文件sbit sound=P3^7; // 将sound 位定义为 P3.7/**************************************** 函数功能:延时形成1600Hz音频****************************************/void delay1600(void){unsigned char n;for(n=0;n<100;n++);}/**************************************** 函数功能:延时形成800Hz音频****************************************/void delay800(void){unsigned char n;for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/void main(void){unsigned int i;while(1){for(i=0;i<830;i++){sound=0; //P3.7 输出低电平delay1600();sound=1; //P3.7 输出高电平delay1600();}for(i=0;i<200;i++){sound=0; //P3.7 输出低电平word 完美整理版delay800();sound=1; //P3.7 输出高电平delay800();}}}// 实例 22:用while 语句控制LED#include<reg51.h> // 包含单片机寄存器的头文件/****************************************函数功能:延时约60ms (3*100*200=60000 μs)****************************************/void delay60ms(void){unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/void main(void){unsigned char i;while(1) // 无限循环{i=0; // 将i 初始化为0while(i<0xff) // 当i 小于0xff (255)时执行循环体{P0=i; // 将i 送P0口显示delay60ms(); // 延时i++; //i 自增1}}}word 完美整理版// 实例 23:用 do-while 语句控制P0口8 位LED流水点亮#include<reg51.h> // 包含单片机寄存器的头文件/****************************************函数功能:延时约60ms (3*100*200=60000 μs)****************************************/void delay60ms(void){unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<200;n++); }/****************************************函数功能:主函数****************************************/void main(void){do{P0=0xfe; // 第一个 LED亮delay60ms();P0=0xfd; // 第二个 LED亮delay60ms();P0=0xfb; // 第三个 LED亮delay60ms();P0=0xf7; // 第四个 LED亮delay60ms();P0=0xef; // 第五个 LED亮delay60ms();P0=0xdf; // 第六个 LED亮delay60ms();delay60ms();P0=0xbf; // 第七个 LED亮delay60ms();P0=0x7f; // 第八个 LED亮delay60ms();}while(1); // 无限循环,使8 位LED循环流水点亮}// 实例 24:用字符型数组控制P0口8 位LED流水点亮word 完美整理版#include<reg51.h> // 包含单片机寄存器的头文件/****************************************函数功能:延时约60ms (3*100*200=60000 μs)****************************************/void delay60ms(void){unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/void main(void){unsigned char i;unsigned char code Tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 定义无符号字符型数组while(1){for(i=0;i<8;i++){P0=Tab[i];// 依次引用数组元素,并将其送P0口显示delay60ms();// 调用延时函数}}}// 实例 25:用P0口显示字符串常量#include<reg51.h> // 包含单片机寄存器的头文件/*************************************************函数功能:延时约150ms (3*200*250=150 000 μs=150ms*************************************************/void delay150ms(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}word 完美整理版/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char str[]={"Now,Temperature is :"}; // 将字符串赋给字符型全部元素赋值unsigned char i;while(1){i=0; // 将i 初始化为 0,从第一个元素开始显示while(str[i]!='\0') // 只要没有显示到结束标志'\0'{P0=str[i]; // 将第i 个字符送到P0口显示delay150ms(); // 调用150ms延时函数i++; // 指向下一个待显字符} }}// 实例 26:用 P0 口显示指针运算结果#include<reg51.h>void main(void){unsigned char *p1,*p2; // 定义无符号字符型指针变量p1,p2unsigned char i,j; // 定义无符号字符型数据i=25; // 给i 赋初值 25j=15;p1=&i; // 使指针变量指向i ,对指针初始化p2=&j; // 使指针变量指向j ,对指针初始化P0=*p1+*p2; //*p1+*p2 相当于 i+j, 所以P0=25+15=40=0x28// 则P0=0010 1000B,结果 P0.3、P0.5 引脚 LED熄灭,其余点亮while(1); // 无限循环,防止程序“跑飞”}// 实例 27:用指针数组控制P0口8 位LED流水点亮word 完美整理版#include<reg51.h>/*************************************************函数功能:延时约150ms (3*200*250=150 000 μs=150ms*************************************************/void delay150ms(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char*p[ ]={&Tab[0],&Tab[1],&Tab[2],&Tab[3],&Tab[4],&Tab[5],&Tab[6],&Tab[7]};unsigned char i; // 定义无符号字符型数据while(1){for(i=0;i<8;i++){P0=*p[i];delay150ms(); }}}// 实例 28:用数组的指针控制P0 口8 位LED流水点亮#include<reg51.h>/*************************************************函数功能:延时约150ms (3*200*250=150 000 μs=150ms*************************************************/void delay150ms(void){unsigned char m,n;word 完美整理版for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char i;unsigned char Tab[ ]={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};// 流水灯控制码unsigned char *p; // 定义无符号字符型指针p=Tab; // 将数组首地址存入指针pwhile(1){for(i=0;i<32;i++) // 共32 个流水灯控制码{P0=*(p+i); //* (p+i) 的值等于 a[i]delay150ms(); // 调用 150ms延时函数}}}// 实例 29:用 P0 、P1口显示整型函数返回值#include<reg51.h>/*************************************************函数功能:计算两个无符号整数的和*************************************************/unsigned int sum(int a,int b){unsigned int s;s=a+b;return (s);}/*************************************************函数功能:主函数word 完美整理版*************************************************/void main(void){unsigned z;z=sum(2008,2009);P1=z/256; // 取得 z 的高 8 位P0=z%256; // 取得 z 的低 8 位while(1);}// 实例 30:用有参函数控制P0口8 位LED流水速度#include<reg51.h>/*************************************************函数功能:延时一段时间*************************************************/void delay(unsigned char x){unsigned char m,n;for(m=0;m<x;m++)for(n=0;n<200;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char i;unsigned char codeTab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};// 流水灯控制码while(1){// 快速流水点亮LEDfor(i=0;i<8;i++) // 共8 个流水灯控制码{P0=Tab[i];delay(100); // 延时约 60ms, (3*100*200=60 000 μs)}// 慢速流水点亮LEDword 完美整理版for(i=0;i<8;i++) // 共8 个流水灯控制码{P0=Tab[i];delay(250); // 延时约 150ms, (3*250*200=150 000 μs)}}}// 实例 31:用数组作函数参数控制流水花样#include<reg51.h>/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:流水点亮P0口8 位LED*************************************************/void led_flow(unsigned char a[8]){unsigned char i;for(i=0;i<8;i++){P0=a[i];delay();}}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char codeTab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};// 流水灯控制码 led_flow(Tab);}// 实例 32:用指针作函数参数控制P0口8 位LED流水点亮#include<reg51.h>/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:流水点亮P0口8 位LED*************************************************/void led_flow(unsigned char *p) // 形参为无符号字符型指针{unsigned char i;while(1){i=0; // 将i 置为 0,指向数组第一个元素while(*(p+i)!='\0') // 只要没有指向数组的结束标志{P0=*(p+i);// 取的指针所指变量(数组元素)的值,送P0口delay(); // 调用延时函数i++; // 指向下一个数组元素}} }/*************************************************函数功能:主函数*************************************************/void main(void)word 完美整理版{unsigned char code Tab[ ]={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};// 流水灯控制码 unsigned char *pointer;pointer=Tab;led_flow(pointer);}// 实例 33:用函数型指针控制P1 口灯花样#include<reg51.h> // 包含51 单片机寄存器定义的头文件unsigned char code Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};// 流水灯控制码,该数组被定义为全局变量/**************************************************************函数功能:延时约150ms**************************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/**************************************************************函数功能:流水灯左移**************************************************************/void led_flow(void){unsigned char i;for(i=0;i<8;i++) //8 位控制码{delay(); }}/**************************************************************函数功能:主函数**************************************************************/void main(void){void (*p)(void); // 定义函数型指针,所指函数无参数,无返回值p=led_flow; // 将函数的入口地址赋给函数型指针pwhile(1)(*p)(); // 通过函数的指针p 调用函数led_flow ()}// 实例 34:用指针数组作为函数的参数显示多个字符串#include<reg51.h> // 包含51 单片机寄存器定义的头文件unsigned char code str1[ ]="Temperature is tested by DS18B20";//C 语言中,字符串是作为字符数组来处理的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[ ]={str1,str2,str3,str4}; // 定义p[4] 为指向 4 个字符串的字符型指针数组/**************************************************************函数功能:延时约150ms**************************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/**************************************************************函数功能:流水点亮P0口8 位LED**************************************************************/void led_display(unsigned char *x[ ]) // 形参必须为指针数组{unsigned char i,j;for(i=0;i<4;i++) // 有4 个字符串要显示{j=0; // 指向待显字符串的第0 号元素while(*(x[i]+j)!='\0') // 只要第 i 个字符串的第j 号元素不是结束标志{P0=*(x[i]+j); // 取得该元素值送到P0口显示delay(); // 调用延时函数j++; // 指向下一个元素} }}/**************************************************************函数功能:主函数**************************************************************/void main(void){unsigned char i;while(1){for(i=0;i<4;i++)led_display(p); // 将指针数组名作实际参数传递}}// 实例 35:字符函数ctype.h 应用举例#include<reg51.h> // 包含51 单片机寄存器定义的头文件#include<ctype.h>void main(void){while(1){P3=isalpha('_')?0xf0:0x0f;// 条件运算,若 '_' 是英文字母, P3=0xf0}}// 实例 36:内部函数intrins.h 应用举例#include<reg51.h> // 包含51 单片机寄存器定义的头文件#include<intrins.h> // 包含函数 isalpha ()声明的头文件/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){P3=0xfe; //P3=1111 1110Bwhile(1){P3=_crol_(P3,1);// 将P3的二进制位循环左移 1 位后再赋给P3 delay(); // 调用延时函数}}// 实例 37:标准函数stdlib.h 应用举例#include<reg51.h> // 包含51 单片机寄存器定义的头文件#include<stdlib.h> // 包含函数 isalpha ()声明的头文件/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char i;while(1){for(i=0;i<10;i++) // 产生 10 个随机数{P3=rand()/160; // 将产生的随机数缩小160 倍后送 P3显示delay();}}}// 实例 38:字符串函数string.h 应用举例#include<reg51.h> // 包含51 单片机寄存器定义的头文件#include<string.h> // 包含函数 isalpha ()声明的头文件void main(void){unsigned char str1[ ]="Now, The temperature is :";unsigned char str2[ ]="Now, The temperature is 36 Centgrade:"; unsigned char i;i=strcmp(str1,str2); // 比较两个字符串,并将结果存入iif(i==0) //str1=str2P3=0x00;elseif(i<0) //str1<str2P3=0xf0;else //str1>str2P3=0x0f;while(1); // 防止程序“跑飞”}// 实例 39:宏定义应用举例 2。

51单片机应用程序实例

51单片机应用程序实例

MCS 51单片机应用程序实例2007年10月25日工控吧-;多路开关状态指示1.实验任务如图3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。

〔开关闭合,对应的灯亮,开关断开,对应的灯灭〕。

2.电路原理图图3.13.系统板上硬件连线〔1.把“单片机系统〞区域中的P1.0-P1.3用导线连接到“八路发光二极管指示图4.13.系统板上硬件连线把“单片机系统〞区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块〞区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。

4.程序设计内容我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可到达输出控制的动作。

每次送出的数据是不同,具体的数据如下表1所示P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 说明L8 L7 L6 L5 L4 L3 L2 L11 1 1 1 1 1 1 0 L1亮1 1 1 1 1 1 0 1 L2亮1 1 1 1 1 0 1 1 L3亮1 1 1 1 0 1 1 1 L4亮1 1 1 0 1 1 1 1 L5亮1 1 0 1 1 1 1 1 L6亮1 0 1 1 1 1 1 1 L7亮0 1 1 1 1 1 1 1 L8亮表15.程序框图图4.26.汇编源程序ORG 0START: MOV R2,#8MOV A,#0FEHSETB CLOOP: MOV P1,ALCALL DELAYRLC ADJNZ R2,LOOPMOV R2,#8LOOP1: MOV P1,ALCALL DELAYRRC ADJNZ R2,LOOP1LJMP STARTDELAY: MOV R5,#20 ;D1: MOV R6,#20一键多功能按键识别技术1.实验任务如图9.1所示,开关SP1接在P3.7/RD管脚上,在AT89S51单片机的P1端口接有四个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,当每一次按下开关SP1的时候,L2接在P1.1管脚上的发光二极管在闪烁,再按下开关SP1的时候,L3接在P1.2管脚上的发光二极管在闪烁,再按下开关SP1的时候,L4接在P1.3管脚上的发光二极管在闪烁,再按下开关SP1的时候,又轮到L1在闪烁了,如此轮流下去。

51单片机C语言实例(350例)Proteus仿真和代码都有

51单片机C语言实例(350例)Proteus仿真和代码都有

51单片机C语言实例(350例)Proteus仿真和代码都有51单片机C语言实例(400例)所有实例程序均经测试过,适合新手学习。

1-IO输出-点亮1个LED灯方法1 10-LED循环左移100-24c02记忆开机次数101-24c02存储上次使用中状态102-DS1302 时钟原理103-DS1302可调时钟104-DS1302时钟串口自动更新时间105-1602液晶显示DS1302时钟106-字库ST7920 12864液晶基础显示107-按键 12864显示108-PCF8591 1路AD数码管显示109-PCF8591 4路AD数码管显示11-LED循环右移110-PCF8591 DA输出模拟111-PCF8591 输出锯齿波112-PCF8591 1602液晶显示113-串口通讯114-串口通讯中断应用115-RS485基本通讯原理116-红外接收原理117-红外解码数码管显示118-红外解码1602液晶显示119-红外发射原理12-查表显示LED灯120-红外收发测试121-双红外发射避障原理测试122-1个18B20 温度传感器数码管显示123-1个18b20温度传感器1602液晶显示124-多个18b20温度传感器1602液晶显示125-超温报警测试126-温度可调上下限1602126-温度可调上下限1602显示127-PS2键盘输入1602液晶显示128-双色点阵1种颜色显示测试129-双色点阵2种颜色显示测试13-双灯左移右移闪烁130-双色点阵显示特定图形131-双色点阵交替图形显示132-双色点阵双色交替动态显示133-热敏电阻测试数码管显示134-光敏电阻测试数码管显示135-自动调光测试136-串转并数字芯片测试137-非门数字芯片测试138-电子琴139-实用99分钟倒计时器14-花样灯140-外部频率测试141-定时做普通时钟可调142-1602液晶显示的密码锁143-实用密码锁144-1602液晶显示的计算器145-秒表146-串口测温电脑显示147-交通灯测试148-点阵模拟电梯上行下行149-点阵流动广告模拟15-PWM调光150-综合测试程序151-12位AD_DS1621与12864液晶152-闪烁灯一153-闪烁灯二154-流水灯A155-51单片机12864大液晶屏proteus仿真156-流水灯B157-数码管显示158-12864LCD显示计算器键盘按键实验159-数码管显示(锁存器)16-共阳数码管静态显示160-数码管动态显示161-数码管滚动显示162-数码管字符显示163-独立按键164-矩阵键盘165-矩阵键盘(LCD)166-用DS1302与12864LCD设计的可调式中文电子日历167-定时器的使用(方式1)168-12864LCD图形滚动演示169-用PG12864LCD设计的指针式电子钟17-1个共阳数码管显示变化数字170-定时器的使用(方式2)171-外部中断的使用172-定时器和外部中断173-开关控制12864LCD串行模式显示174-点阵显示175-液晶1602显示176-12864带字库测试程序177-串行12864显示178-遥控键值解码-12864LCD显示179-液晶12864并行18-单个数码管模拟水流180-液晶12864并行2181-串口发送试验182-串口接收试验183-串口接收(1602)184-蜂鸣器发声185-直流电机调速186-蜂鸣器间断发声187-lcd-12864应用188-继电器控制189-直流电机调速19-按键控制单个数码管显示190-步进电机191-存储AT24C02192-PCF8591T AD实验193-PCF8591T芯片DA实验194-温度采集DS18B20195-EEPROM_24C02196-12864LCD显示24C08保存的开机画面197-红外解码198-12864LCD显示EPROM2764保存的开机画面199-时钟DS1302(LCD)2-IO输出-点亮1个LED灯方法220-单个数码管指示逻辑电平200-宏晶看门狗201-SD卡202-秒表203-普通定时器时钟204-彩屏控制205-彩屏图片显示206-12864+DS1302时钟+18B20温度计207-12864测试程序208-12864串行驱动演示209-12864生产厂程序21-8位数码管显示其中之一210-12864中文显示测试211-LCD12864212-12864M液晶显示(有字库)程序(汇编)213-超声波测距LCD12864显示214-红外遥控键值解码12864液晶显示(汇编语言)215-用DS1302与12864LCD设计的可调式中文电子日历216-中文12864217-中文12864LCD显示红外遥控解码实验218-IO端口输出219-IO端口输入22-8位数码管静态显示其中之二220-流水灯221-数码管显示223-独立按键224-独立按键去抖动225-定时器0226-定时器1227-定时器2228-外部中断0电平触发229-外部中断0边沿触发23-8位数码管动态扫描显示230-外部中断1231-矩阵键盘232-液晶LCM1602233-LCD1602动态显示234-EEPROM24c02235-开机次数记忆236-红外解码LCD1602液晶显示237-红外解码数码管显示238-喇叭239-液晶背光控制24-8位数码管动态扫描原理演示240-与电脑串口通信241-步进电机242-字库LCD12864液晶测试243-液晶数码综合显示244-99秒计时245-99倒计时246-抢答器247-PWM调光248-LED点阵249-直流电机调速250-按键计数器251-秒表252-数码管移动253-花样灯254-红绿灯255-音乐播放256-红外收发演示257-普通定时器时钟258-继电器控制259-ps2键盘LCD1602液晶显示26-9累加260-RTC实时时钟DS1302液晶显示261-单线温度传感器18b20262-串口测温263-带停机步进电机正反转264-步进电机正反转265-AD_DA_PCF8591266-液晶AD_DA_PCF8591267-秒手动记数268-功能感受269-流水登27-99累加270-点亮一个二极管271-用单片机控制一个灯闪烁272-将P1口状态送入P0、P2、P3273-P3口流水灯274-通过对P3口地址的操作流水点亮8位LED 275-用不同数据类型控制灯闪烁时间276-用P0口、P1 口分别显示加法和减法运算结果277-用P0、P1口显示乘法运算结果278-用P1、P0口显示除法运算结果279-用自增运算控制P0口8位LED流水花样28-999累加280-用P0口显示逻辑与运算结果281-用P0口显示条件运算结果282-用P0口显示按位异或运算结果283-用P0显示左移运算结果284-万能逻辑电路实验285-用右移运算流水点亮P1口8位LED286-用if语句控制P0口8位LED的流水方向287-用swtich语句的控制P0口8位LED的点亮状态288-用for语句控制蜂鸣器鸣笛次数289-包含单片机寄存器的头文件29-9999累加290-用do-while语句控制P0口8位LED流水点亮291-用字符型数组控制P0口8位LED流水点亮292-用P0口显示字符串常量293-用P0 口显示指针运算结果294-用指针数组控制P0口8位LED流水点亮295-用数组的指针控制P0 口8 位LED流水点亮296-用P0 、P1口显示整型函数返回值297-用有参函数控制P0口8位LED流水速度298-用数组作函数参数控制流水花样299-用数组作函数参数控制流水花样3-IO输出-点亮多个LED灯方法130-9累减300-用函数型指针控制P1口灯花样301-用指针数组作为函数的参数显示多个字符串302-字符函数ctype.h应用举例303-内部函数intrins.h应用举例304-标准函数stdlib.h应用举例305-字符串函数string.h应用举例306-宏定义应用举例307-文件包应用举例308-条件编译应用举例309-用定时器T0查询方式P2口8位控制LED闪烁31-99累减310-用定时器T1查询方式控制单片机发出1KHz音频311-将计数器T0计数的结果送P1口8位LED显示311-用定时器T0的中断控制1位LED闪烁312-用定时器T0的中断实现长时间定时313-用定时器T1中断控制两个LED以不同周期闪烁314-用计数器T1的中断控制蜂鸣器发出1KHz音频315-用定时器T0的中断实现渴望主题曲的播放316-输出50个矩形脉冲317-输出正脉宽为250微秒的方波318-用定时器T0控制输出高低宽度不同的矩形波319-用外中断0的中断方式进行数据采集32-999累减320-输出负脉宽为200微秒的方波321-方式0控制流水灯循环点亮322-数据发送程序323-数据接收程序324-单片机向PC发送数据325-单片机接收PC发出的数据326-用LED数码显示数字5327-用LED数码显示器循环显示数字0~9328-用数码管慢速动态扫描显示数字1234329-用LED数码显示器伪静态显示数字123433-9999累减330-用数码管显示动态检测结果331-数码秒表设计332-数码时钟设计333-用LED数码管显示计数器T0的计数值334-静态显示数字“59”335-无软件消抖的独立式键盘输入实验336-软件消抖的独立式键盘输入实验337-CPU控制的独立式键盘扫描实验338-定时器中断控制的独立式键盘扫描实验339-独立式键盘控制的4级变速流水灯34-显示小数点340-独立式键盘的按键功能扩展:以一当四341-独立式键盘调时的数码时钟实验342-独立式键盘控制步进电机实验343-矩阵式键盘按键值的数码管显示实验344-矩阵式键盘按键音345-简易电子琴346-矩阵式键盘实现的电子密码锁347-用LCD显示字符'A'348-用LCD循环右移显示Welcome to China 349-将数据0x0f写入AT24C02再读出送P1口显示35-数码管消隐350-液晶时钟设计36-数码管递加递减带消隐37-数码管左移38-数码管右移38-数码管右移139-数码管右移24-IO输出-点亮多个LED灯方法240-数码管循环左移41-数码管循环右移41-数码管循环右移142-数码管循环右移243-数码管闪烁44-数码管局部闪烁45-定时器046-定时器147-定时器248-产生1mS方波49-产生200mS方波5-闪烁1个LED50-产生多路不同频率方波51-1个独立按键控制LED52-1个独立按键控制LED状态转换53-2按键加减操作53-2按键加减操作数码管显示54-多位数按键加减(闪烁)54-多位数按键加减(闪烁)数码管显示55-多位数按键加减(不闪烁)55-多位数按键加减(不闪烁)数码管显示56-定时器扫描数码管(不闪烁)57-按键长按短按效果58-抢答器59-独立按键依次输入数据6-不同频率闪烁1个LED灯60-按键从右至左输入61-8位端口检测8独立按键62-矩阵键盘行列扫描63-矩阵键盘反转扫描64-矩阵键盘中断扫描65-矩阵键盘密码锁66-矩阵键盘简易计算器67-外部中断0电平触发68-外部中断1电平触发69-外部中断0下降沿触发7-不同频率闪烁多个LED灯70-外部中断1下降沿触发71-T0外部计数输入72-T1外部计数输入73-看门狗溢出测试74-按键喂狗75-喇叭发声原理76-警车声音77-救护车声音78-喇叭滴答声79-报警发声8-8位LED左移80-消防车警报81-音乐播放82-步进电机转动原理83-步进电机正反转84-步进电机按键控制85-步进电机转速数码管显示86-双步进电机综合控制86-步进电机调速原理87-双步进电机综合控制87-步进电机综合控制87-步进电机调速原理88-直流电机按键控制89-直流电机调速控制9-8位LED右移90-继电器控制原理91-双继电器模拟洗衣机电机控制92-1602液晶静态显示93-1602液晶动态显示94-1602液晶滚动显示95-1602液晶移动显示96-1602液晶按键输入显示97-2402存储1个数据98-24c02存储多个数据99-24c02存储花样流水灯。

51单片机应用开发案例精选

51单片机应用开发案例精选

1.发光二极管流水灯2.交通灯控制器3.单片机演奏音乐4.液晶显示复杂自制图形5.电子万年历6.实时时钟(年月日时分秒,含定时计时)7.液晶显示字符(PC计算发送)8.四路抢答器9.数字化语音存储与回放(低频)10.数字温度传感器11.宽带数控放大器12.超声波测距13.基于单片机的电压表设计14.基于单片机的称重显示仪表设计15.基于单片机的车轮测速系统16.步进电机控制17.控制微型打印机18.简易智能电动车19.多种模型发生器20.相位差测试仪21.简易红外遥控器或红外通信22.PC与单片机通信23.单片机间多机通信24.无线数据传输25.单片机实现PWM信号26.低频信号频谱分析仪27.单片机USB接口28.单片机实现TCP/IP29.单片机读写U盘30.高精度实时时钟芯片的应用31.SD卡读写32.LED数码管点阵显示(支持显示10个汉字)33.低频数字示波器34.频率计35.GPS系统设计(实现GPS模块接口,获取当前定位信息)36.I2C接口(实现串行EEPROM读写)37.键盘扩展(增加16个按键,实现队按键的控制)38.条形码应用51单片机应用开发案例精选第1章51单片机开发基础1.1单片机开发流程1.2开发工具1.3测试方法和工具第2章51单片机开发入门实例2.1点亮发光二极管实例2.2跑马灯实例2.3流水灯实例2.4查0~9平方表实例2.5受控输出实例2.6比较输入数大小实例2.7交通灯控制器实例2.8蜂鸣器发音实例2.9单片机演奏音乐实例2.10软件陷阱实例第3章输入和显示3.1独立式键盘输入实例3.2行列式键盘输入实例3.3扫描方式键盘输入实例3.4定时中断方式键盘输入实例3.5LED静态显示实例3.6LED动态显示实例3.7实时时钟实例3.8简单液晶显示实例3.9液晶显示复杂自制图形实例3.10电子万年历实例第4章数据采集第5章数据通信第6章全球定位系统的设计与开发51单片机应用开发范例大全第1章单片机C语言开发基础1.1 MCS-51单片机硬件基础1.1.1 8051引脚1.1.2 51单片机功能结构1.1.3 中央处理器(CPU)1.1.4 存储器结构1.1.5 定时/计数器1.1.6 并行端口1.1.7 串行端口1.1.8 中断系统1.1.9 总线1.2 Keil mVision21.2.1 Keil mVision2集成开发环境介绍1.2.2 使用Keil mVision2进行开发1.2.3 dScope for Windows的使用1.3 C51基础知识1.3.1 C51控制语句1.3.2 C51函数1.3.3 C51数组和指针1.4 【实例19】P1口控制直流电动机实例第2章单片机接口的扩展2.1 基本器件实现端口扩展实例2.1.1 【实例20】用74LS165实现串口扩展并行输入口2.1.2 【实例21】用74LS164实现串口扩展并行输出口2.1.3 【实例22】P0 I/O扩展并行输入口2.1.4 【实例23】P0 I/O扩展并行输出口2.2 扩展芯片实现端口扩展2.2.1 【实例24】用8243扩展I/O端口2.2.2 【实例25】用8255A扩展I/O口2.2.3 【实例26】用8155扩展I/O口2.3 CPLD实现端口扩展第3章存储器的扩展3.1 外部程序存储器的扩展3.1.1 【实例27】EPROM27xxx程序存储器的扩展3.1.2 【实例28】EEPROM28xxx程序存储器的扩展3.2 外部数据存储器的扩展3.2.1 【实例29】与AT24系列EEPROM接口及驱动程序3.2.2 【实例30】EEPROM(X5045)接口及驱动程序3.2.3 【实例31】铁电存储器接口及驱动程序3.2.4 【实例32】与双口RAM存储器接口及应用实例3.3 FLASH驱动程序第4章输入/输出及显示技术4.1 【实例34】独立键盘控制4.1.1 实例功能4.1.2 典型器件介绍4.1.3 硬件设计4.1.4 程序设计4.1.5 经验总结4.2 【实例35】矩阵式键盘控制4.2.1 实例功能4.2.2 典型器件介绍4.2.3 硬件设计4.2.4 程序设计4.2.5 经验总结4.3 【实例36】改进型I/O端口键盘4.3.1 实例功能4.3.2 硬件设计4.3.3 程序设计4.4 【实例37】PS/2键盘的控制4.4.1 实例功能4.4.2 典型器件介绍4.4.3 硬件设计4.4.4 程序设计4.4.5 经验总结4.5 【实例38】LED显示4.5.1 实例功能4.5.2 硬件设计4.5.3 程序设计4.5.4 经验总结4.6 【实例39】段数码管显示实例4.6.1 实例功能4.6.2 硬件设计4.6.3 程序设计4.6.4 经验总结4.7 【实例40】16×2字符型液晶显示实例4.7.1 实例功能4.7.2 典型器件介绍4.7.3 硬件设计4.7.4 程序设计4.7.5 经验总结4.8 【实例41】点阵型液晶显示实例4.8.1 实例功能4.8.2 典型器件介绍4.8.3 硬件设计4.8.4 程序设计4.8.5 经验总结4.9 【实例42】LCD显示图片实例4.9.1 实例功能4.9.2 典型器件介绍4.9.3 硬件设计4.9.4 程序设计4.9.5 经验总结第5章实用电子制作5.1 【实例43】简易电子琴的设计5.1.1 实例功能5.1.2 典型器件介绍5.1.3 硬件设计5.1.4 程序设计5.1.5 经验总结5.2 【实例44】基于MCS-51单片机的四路抢答器5.2.1 实例功能5.2.2 典型器件介绍5.2.3 硬件设计5.2.4 程序设计5.2.5 经验总结5.3 【实例45】电子调光灯的制作5.3.1 实例功能5.3.2 典型器件介绍5.3.3 硬件设计5.3.4 程序设计5.3.5 经验总结5.4 【实例46】数码管时钟的制作5.4.1 实例功能5.4.2 典型器件介绍5.4.3 硬件设计5.4.4 程序设计5.4.5 经验总结5.5 【实例47】LCD时钟的制作5.5.1实例功能5.5.2典型器件介绍5.5.3硬件设计5.5.4程序设计5.5.5经验总结5.6 【实例48】数字化语音存储与回放5.6.1 实例功能5.6.2 典型器件介绍5.6.3 硬件设计5.6.4 程序设计5.6.5 经验总结5.7 【实例49】电子标签设计5.7.1 实例功能5.7.2 典型器件介绍5.7.3 硬件设计5.7.4 程序设计5.7.5 经验总结第6章传感控制技术6.1 【实例50】指纹识别模块6.1.1 指纹识别传感器原理6.1.2 硬件设计6.1.3 程序设计6.1.4 实例实现过程6.1.5 经验总结6.2 【实例51】数字温度传感器6.2.1 数字温度传感器原理6.2.2 硬件设计6.2.3 程序设计6.2.4 实例实现过程6.2.5 经验总结6.3 【实例52】宽带数控放大器6.3.1 宽带数控放大器设计原理6.3.2 硬件设计6.3.3 程序设计6.3.4 实例实现过程6.3.5 经验总结第7章智能仪表与测试技术7.1 【实例53】超声波测距7.1.1 实例功能7.1.2 典型器件介绍7.1.3 硬件设计7.1.4 程序设计7.1.5 经验总结7.2 【实例54】数字气压计7.2.1 实例功能7.2.2 典型器件介绍7.2.3 硬件设计7.2.4 程序设计7.2.5 经验总结7.3 【实例55】基于单片机的电压表设计7.3.1 实例功能7.3.2 电压表设计原理7.3.3 硬件设计7.3.4 程序设计7.3.5 经验总结7.4 【实例56】基于单片机的称重显示仪表设计7.4.1 实例功能7.4.2 典型器件介绍7.4.3 硬件设计7.4.4 程序设计7.4.5 经验总结7.5 【实例57】基于单片机的车轮测速系统7.5.1 实例功能7.5.2 典型器件介绍7.5.3 硬件设计7.5.4 程序设计7.5.5 经验总结第8章电气传动及控制技术8.1 【实例58】电源切换控制8.1.1 实例功能8.1.2 典型器件介绍8.1.3 硬件设计8.1.4 程序设计8.1.5 经验总结8.2 【实例59】步进电机控制8.2.1 实例功能8.2.2 典型器件介绍8.2.3 硬件设计8.2.4 程序设计8.2.5 经验总结8.3 【实例60】单片机控制自动门系统8.3.1 实例功能8.3.2 典型器件介绍8.3.3 硬件设计8.3.4 程序设计8.3.5 经验总结8.4 【实例61】控制微型打印机8.4.1 实例功能8.4.2 典型器件介绍8.4.3 硬件设计8.4.4 程序设计8.4.5 经验总结8.5 【实例62】单片机控制的EPSON微型打印头8.5.1 实例功能8.5.2 典型器件介绍8.5.3 硬件设计8.5.4 程序设计8.5.5 经验总结8.6 【实例63】简易智能电动车8.6.1 实例功能8.6.2 典型器件介绍8.6.3 硬件设计8.6.4 程序设计8.6.5 经验总结8.7 【实例64】洗衣机控制器8.7.1 实例功能8.7.2 典型器件介绍8.7.3 硬件设计8.7.4 程序设计8.7.5 经验总结第9章单片机数据处理9.1 【实例65】串行A/D转换9.1.1 实例功能9.1.2 典型器件介绍9.1.3 硬件设计9.1.4 程序设计9.1.5 经验总结9.2 【实例66】并行A/D转换9.2.1 实例功能9.2.2 典型器件介绍9.2.3 硬件设计9.2.4 程序设计9.2.5 经验总结9.3 【实例67】模拟比较器实现A/D转换9.3.1 实例功能9.3.2 典型器件介绍9.3.3 硬件设计9.3.4 程序设计9.3.5 经验总结9.4 【实例68】串行D/A转换9.4.1 实例功能9.4.2 典型器件介绍9.4.3 硬件设计9.4.4 程序设计9.4.5 经验总结9.5 【实例69】并行电压型D/A转换9.5.1 实例功能9.5.2 典型器件介绍9.5.3 硬件设计9.5.4 程序设计9.5.5 经验总结9.6 【实例70】并行电流型D/A转换9.6.1 实例功能9.6.2 典型器件介绍9.6.3 硬件设计9.6.4 程序设计9.6.5 经验总结9.7 【实例71】I2C接口的A/D转换9.7.1 实例功能9.7.2 典型器件介绍9.7.3 硬件设计9.7.4 程序设计9.7.5 经验总结9.8 【实例72】I2C接口的D/A转换9.8.1 实例功能9.8.2 典型器件介绍9.8.3 硬件设计9.8.4 程序设计9.8.5 经验总结第10章单片机通信技术10.1 【实例73】单片机间通信10.1.1 实例功能10.1.2 典型器件介绍10.1.3 硬件设计10.1.4 程序设计10.1.5 经验总结10.2 【实例74】单片机间多机通信方法之一10.2.1 主从通信介绍10.2.2 实例功能10.2.3 硬件设计10.2.4 程序设计10.2.5 经验总结10.3 【实例75】单片机间多机通信方法之二10.3.1 实例功能10.3.2 程序设计10.3.3 经验总结10.4 【实例76】PC与单片机通信10.4.1 实例功能10.4.2 典型器件介绍10.4.3 硬件设计10.4.4 程序设计10.4.5 经验总结10.5 【实例77】红外通信接口10.5.1 实例功能10.5.2 典型器件介绍10.5.3 硬件设计10.5.4 程序设计10.5.5 经验总结10.6 【实例78】无线数据传输模块10.6.1 实例功能10.6.2 典型器件介绍10.6.3 硬件设计10.6.4 程序设计10.6.5 经验总结第11章单片机实现信号与算法11.1 【实例79】单片机实现PWM信号输出11.1.1 实例功能11.1.2 典型器件介绍11.1.3 硬件设计11.1.4 程序设计11.1.5 经验总结11.2 【实例80】实现基于单片机的低频信号发生器11.2.1 实例功能11.2.2 典型器件介绍11.2.3 硬件设计11.2.4 程序代码11.2.5 经验总结11.3 【实例81】软件滤波方法11.3.1 实例功能11.3.2 软件滤波方法介绍11.3.3 程序设计11.3.4 经验总结11.4 【实例82】FSK信号解码接收11.4.1 实例功能11.4.2 FSK原理11.4.3 程序设计11.4.4 经验总结11.5 【实例83】单片机浮点数运算实现11.5.1 实例功能11.5.2 单片机浮点数运算实现原理11.5.3 程序设计11.5.4 经验总结11.6 【实例84】神经网络在单片机中的实现11.6.1 实例功能11.6.2 神经网络简介11.6.3 程序设计11.6.4 经验总结11.7 【实例85】信号数据的FFT变换11.7.1 实例功能11.7.2 FFT变换介绍11.7.3 程序设计11.7.4 经验总结第12章单片机的总线与网络技术12.1 【实例86】I2C总线接口的软件实现12.1.1 实例功能12.1.2 典型器件介绍12.1.3 程序设计12.1.4 经验总结12.2 【实例87】SPI总线接口的软件实现12.2.1 实例功能12.2.2 典型器件介绍12.2.3 硬件设计12.2.4 经验总结12.3 【实例88】1-WIRE总线接口的软件实现12.3.1 1-WIRE总线通信原理12.3.2 硬件设计12.3.3 程序设计12.3.4 经验总结12.4 【实例89】单片机外挂CAN总线接口12.4.1 CAN总线介绍12.4.2 CAN总线接口12.4.3 程序设计12.4.4 经验总结12.5 【实例90】单片机外挂USB总线接口12.5.1 USB总线原理12.5.2 与单片机的硬件接口12.5.3 程序设计12.5.4 经验总结12.6 【实例91】单片机实现以太网接口12.6.1 以太网接口芯片12.6.2 程序设计12.6.3 经验总结12.7 【实例92】单片机控制GPRS传输12.7.1 典型器件介绍12.7.2 硬件设计12.7.3 程序设计12.7.4 经验总结12.8 【实例93】单片机实现TCP/IP协议12.8.1 TCP/IP原理12.8.2 程序设计12.8.3 经验总结第13章典型器件及应用技术13.1 【实例94】读写U盘13.1.1 实例功能13.1.2 典型器件介绍13.1.3 硬件设计13.1.4 程序设计13.1.5 经验总结13.2 【实例95】非接触IC卡读写13.2.1 实例功能13.2.2 典型器件介绍13.2.3 硬件设计13.2.4 程序设计13.2.5 经验总结13.3 【实例96】SD卡读写13.3.1 实例功能13.3.2 典型器件介绍13.3.3 硬件设计13.3.4 程序设计13.3.5 经验总结13.4 【实例97】高精度实时时钟芯片的应用13.4.1 实例功能13.4.2 典型器件介绍13.4.3 硬件电路设计13.4.4 程序设计13.4.5 经验总结第14章综合应用实例14.1 【实例98】智能手机充电器设计14.1.1 智能手机电池充电器的结构组成14.1.2 智能手机电池充电器的硬件电路设计14.1.3 智能手机电池充电器的软件设计14.1.4 经验总结14.2 【实例99】单片机控制门禁系统14.2.1 门禁系统的结构组成14.2.2 门禁系统的硬件电路设计14.2.3 门禁系统的软件设计14.2.4 经验总结14.3 【实例100】电机保护器的设计14.3.1 电机保护器的结构组成14.3.2 电机保护器的硬件电路设计14.3.3 电机保护器的软件设计14.3.4 设计中的几个关键问题14.3.5 经验总结附录1 8051的指令列表附录2 PS/2键盘键值和符号对照表51单片机应用开发实战手册第1章 MCS-51单片机基础1.1 概述1.2 MCS-51单片机硬件结构1.2.1 MCS-51单片机的基本组成1.2.2 AT89S52单片机的引脚图及各引脚功能说明1.3 MCS-51单片机的复位1.4 MCS-51的存储系统1.4.1 MCS-51程序存储器1.4.2 MCS-51数据存储器1.4.3 特殊功能寄存器(SFR)1.5 MCS-51的中断系统1.5.1 MCS-51的中断源1.5.2 MCS-51的中断请求标志1.5.3 MCS-51的中断控制1.5.4 MCS-51的中断处理过程第2章51单片机软硬件开发环境2.1 硬件开发环境的建立2.1.1 Protel 99SE2.1.2 开发工具的选择2.1.3 硬件开发所需仪器2.2 软件开发环境的建立2.2.1 系统概述2.2.2 Keil C51单片机软件开发系统的整体结构2.2.3 Keil C51 的使用2.3 Keil C51+ Proteus 实现单片机的软件仿真……第3章单片机应用系统设计的必备知识第4章简单应用系统设计案例——I/O使用第5章简单应用系统设计案例——定时器和中断使用第6章简单应用系统设计——串行通信类第7章简单应用系统设计——控制类第8章综合应用系统设计案例——基础篇第9章综合应用系统设计案例——提高篇第10章综合应用系统设计案例——实践篇。

51单片机典型开发实例大全

51单片机典型开发实例大全
提供电子技术最新最实用设计方案
——单片机 C51 编程规范
typedef unsigned char INT8U; // 无符号 8 位整型变量 //
typedef signed char INT8S; // 有符号 8 位整型变量 //
1 单片机 C51 编程规范- 前言
typedef unsigned int INT16U; // 无符号 16 位整型变量 //
uCOSII 工作核心原理是:近似地让最高优先级的就绪任务处于运行状态。
——uCOS-II 在 51 单片机上的移 植
引言:随着各种应用电子系统的复杂化和系统实时性需求的提高,并伴 随应用软件朝着系统化方向发展的加速,在 16 位/32 位单片机中广泛使用了 嵌入式实时操作系统。然而实际使用中却存在着大量 8 位单片机,从经济性 考虑,对某些应用场合,在 8 位 MCU 上使用操作系统是可行的。从学习操作 系统角度,uC/OS- II for 51 即简单又全面,学习成本低廉,值得推广。
********************************************************** */
6.3 函数注释
6.3.1 函数头部注释
一般情况源程序有效注释量在 30%左右。 注释语言必须准确、易懂、简洁。

函数头部注释应包括函数名称、函数功能、入口参数、出口参 数等内容。如有必要还可增加作者、创建日期、修改记录(备注) 等相关项目。
7.2 函数定义
*函数若没有入口参数或者出口参数,应用 void 明确申明。 *函数名称与出口参数类型定义间应该空一格且只空一格。 *函数名称与括号()之间无空格。
uCOSII 包括任务调度、时间管理、内存管理、资源管理(信号量、邮箱、 消息队列)四大部分,没有文件系统、网络接口、输入输出界面。它的移植 只与 4 个文件相关:汇编文件(OS_CPU_A.ASM)、处理器相关 C 文件(OS_CPU.H、

51单片机应用程序实例

51单片机应用程序实例
图 9.1 3.系统板上硬件连线 (1. 把“单片机系统”区域中的 P3.7/RD 端口连接到“独立式键盘”区域中的 SP1 端口上; (2. 把“单片机系统”区域中的 P1.0-P1.4 端口用 8 芯排线连接到“八路发光二 极管指示模块”区域中的“L1-L8”端口上;要求,P1.0 连接到 L1,P1.1 连接到 L2,
广告灯的左移右移
1. 实验任务
做单一灯的左移右移,硬件电路如图 4.1 所示,八个发光二极管 L1-L8 分别接在单 片机的 P1.0-P1.7 接口上,输出“0”时,发光二极管亮,开始时 P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0 亮,重复循环。
2. 电路原理图
图 4.1
每次送出的数据是不同,具体的数据如下表 1 所示
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 L8 L7 L6 L5 L4 L3 L2 1111111 1111110 1111101 1111011
P1.0 L1 0 1 1 1
说明
L1 亮 L2 亮 L3 亮 L4 亮
1110111 1 1101111 1 1011111 1 0111111 1
一键多功能按键识别技术
1.实验任务 如图 9.1 所示,开关 SP1 接在 P3.7/RD 管脚上,在 AT89S51 单片机的 P1 端口接有四 个发光二极管,上电的时候,L1 接在 P1.0 管脚上的发光二极管在闪烁,当每一次按 下开关 SP1 的时候,L2 接在 P1.1 管脚上的发光二极管在闪烁,再按下开关 SP1 的时 候,L3 接在 P1.2 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候,L4 接在 P1.3 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候,又轮到 L1 在闪烁了,如此轮 流下去。 2.电路原理图

(课程2)51单片机高级应用实例,教程

(课程2)51单片机高级应用实例,教程
图 3.1- 4 固定地址里写数据的时序
当然也连续写数据的模式,具体的命令详解和写入模式的介绍请参考 TM1628.pdf,这里由于篇幅和重复就不再细说。那么,这些指令如何驱动 led 灯 和数码管呢?我们结合着我们的电路图来一起分析一下。
1.1.2 硬件连接原理
首先看小灯的部分原理图,如图 3.1- 5 所示:
1. #include <reg51.h> #include"TM1628.h"
加头文件,我们前面的章节讲解过加头文件的方法,前面是编译器自带的头 文件所以用<>,后面是我们自己编写的头文件,我们用””。
2. /*写入单字节函数*/ void TM_w_BYTE(unsigned char TM_w_data) {
#define TM_DIS_control 0x70 #define TM_ADD_command 0xc0 接下来是定义了几个命令,参见图 3.1- 6 可知,在 STB 下降沿后由 DIO 输入 的第一个字节作为一条指令。经过译码,取最高 B7、B6 两位比特位以区别不同 的指令,0x40,B7、B6 位是 01,是数据命令设置;0x80,B7、B6 位是 10,是 显示控制命令设置;0xc0,B7、B6 位是 11,是地址命令设置。 #define TM_SGM_LUM 0x8e 0x8e,是开显示命令,在设置好灯的位选段选之后,要开显示,即发送此命 令,详细指令的分析如图 3.1- 9 所示。此处的作用是设置显示开关并控制小灯的 亮暗程度,我们程序的设置是设置显示开,脉冲为 13/16,读者可自行设置脉冲 来观察小灯的亮暗程度。
2. sbit DIO =P3^4; sbit CLK =P3^3; sbit STB =P3^2;

c51单片机编程应用100例

c51单片机编程应用100例
.................................................................................................................... 1 ************************************************************函数的使 用和熟悉*************** ************************************************/ ......................................4 实例 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:用 P0 口、P1 口分别显示加法和减法运算结果 ........................................8 实例 10:用 P0、P1 口显示乘法运算结果 ................................................................9 实例 11:用 P1、P0 口显示除法运算结果 ................................................................9 实例 12:用自增运算控制 P0 口 8 位 LED 流水花样 ..............................................10 实例 13:用 P0 口显示逻辑"与"运算结果 ...............................................................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 流水点亮 ..........................................17 实例 25: 用 P0 口显示字符串常量 ........................................................................18 实例 26:用 P0 口显示指针运算结果 .....................................................................19 实例 27:用指针数组控制 P0 口 8 位 LED 流水点亮 ..............................................19 实例 28:用数组的指针控制 P0 口 8 位 LED 流水点亮 ........................................20 实例 29:用 P0 、P1 口显示整型函数返回值 ........................................................21 实例 30:用有参函数控制 P0 口 8 位 LED 流水速度 ..............................................22 实例 31:用数组作函数参数控制流水花样 ............................................................23 实例 32:用指针作函数参数控制 P0 口 8 位 LED 流水点亮 ..................................23 实例 33:用函数型指针控制 P1 口灯花样 ..............................................................25 实例 34:用指针数组作为函数的参数显示多个字符串 ........................................26 实例 35:字符函数 ctype.h 应用举例 ......................................................................27 实例 36:内部函数 intrins.h 应用举例 .....................................................................27 实例 37:标准函数 stdlib.h 应用举例 ......................................................................28 实例 38:字符串函数 string.h 应用举例 ..................................................................29 实例 39:宏定义应用举例 2 .....................................................................................29
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档