logo资料库

十天学会单片机实例100.pdf

第1页 / 共187页
第2页 / 共187页
第3页 / 共187页
第4页 / 共187页
第5页 / 共187页
第6页 / 共187页
第7页 / 共187页
第8页 / 共187页
资料共187页,剩余部分请下载后查看
目录
一些芯片的使用 24c02 DS18B20……
目录  目录..................................................................................................................1 函数的使用和熟悉 ............................................................................................3 实例 3:用单片机控制第一个灯亮....................................................................3 实例 4:用单片机控制一个灯闪烁:认识单片机的工作频率.............................4 实例 5:将 P1 口状态分别送入P0、P2、P3 口:认识I/O口的引脚功能..........4 实例 6:使用P3 口流水点亮 8 位LED...............................................................5 实例 7:通过对P3 口地址的操作流水点亮 8 位LED .........................................6 实例 8:用不同数据类型控制灯闪烁时间 .........................................................7 实例 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语句控制蜂鸣器鸣笛次数 ........................................................13 实例 22:用while语句控制LED ......................................................................15 实例 23:用do-while语句控制P0 口 8 位LED流水点亮...................................15 实例 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流水速度.........................................20 实例 31:用数组作函数参数控制流水花样 .....................................................21 实例 32:用指针作函数参数控制P0 口 8 位LED流水点亮 ..............................22 实例 33:用函数型指针控制P1 口灯花样 .......................................................23 实例 34:用指针数组作为函数的参数显示多个字符串 ...................................24 实例 35:字符函数ctype.h应用举例 ...............................................................26 实例 36:内部函数intrins.h应用举例 ..............................................................26 实例 37:标准函数stdlib.h应用举例 ...............................................................26 实例 38:字符串函数string.h应用举例 ...........................................................27 实例 39:宏定义应用举例 2 ...........................................................................28 实例 40:宏定义应用举例 2 ...........................................................................28 1
实例 41:宏定义应用举例 3 ...........................................................................28 中断、定时器 .................................................................................................29 实例 42:用定时器T0 查询方式P2 口 8 位控制LED闪烁 ................................29 实例 43:用定时器T1 查询方式控制单片机发出 1KHz音频............................30 实例 44:将计数器T0 计数的结果送P1 口 8 位LED显示 ................................30 实例 45:用定时器T0 的中断控制 1 位LED闪烁.............................................31 实例 46:用定时器T0 的中断实现长时间定时 ................................................32 实例 47:用定时器T1 中断控制两个LED以不同周期闪烁 ..............................32 实例 48:用计数器T1 的中断控制蜂鸣器发出 1KHz音频 ...............................33 实例 49:用定时器T0 的中断实现"渴望"主题曲的播放...................................34 实例 50-1:输出 50 个矩形脉冲 .....................................................................37 实例 50-2:计数器T0 统计外部脉冲数 ...........................................................38 实例 51-2:定时器T0 的模式 2 测量正脉冲宽度.............................................38 实例 52:用定时器T0 控制输出高低宽度不同的矩形波..................................39 实例 53:用外中断 0 的中断方式进行数据采集..............................................40 实例 54-1:输出负脉宽为 200 微秒的方波.....................................................40 实例 54-2:测量负脉冲宽度...........................................................................41 实例 55:方式 0 控制流水灯循环点亮 ............................................................42 实例 56-1:数据发送程序...............................................................................43 实例 56-2:数据接收程序...............................................................................44 实例 57-1:数据发送程序...............................................................................45 实例 57-2:数据接收程序...............................................................................46 实例 58:单片机向PC发送数据......................................................................47 实例 59:单片机接收PC发出的数据 ..............................................................48 数码管显示.....................................................................................................49 实例 60:用LED数码显示数字 5 ....................................................................49 实例 61:用LED数码显示器循环显示数字 0~9 ..............................................49 实例 62:用数码管慢速动态扫描显示数字"1234"...........................................50 实例 63:用LED数码显示器伪静态显示数字 1234.........................................51 实例 64:用数码管显示动态检测结果 ............................................................51 实例 65:数码秒表设计..................................................................................53 实例 66:数码时钟设计..................................................................................55 实例 67:用LED数码管显示计数器T0 的计数值.............................................58 实例 68:静态显示数字“59” .........................................................................59 键盘控制 ........................................................................................................60 实例 69:无软件消抖的独立式键盘输入实验..................................................60 实例 70:软件消抖的独立式键盘输入实验 .....................................................60 实例 71:CPU控制的独立式键盘扫描实验.....................................................61 实例 72:定时器中断控制的独立式键盘扫描实验 ..........................................64 实例 73:独立式键盘控制的 4 级变速流水灯 .................................................67 实例 74:独立式键盘的按键功能扩展:"以一当四"........................................69 实例 75:独立式键盘调时的数码时钟实验 .....................................................71 实例 76:独立式键盘控制步进电机实验.........................................................75 实例 77:矩阵式键盘按键值的数码管显示实验 ..............................................78 2
108 实例 78:矩阵式键盘按键音...........................................................................81 实例 79:简易电子琴 .....................................................................................82 实例 80:矩阵式键盘实现的电子密码锁.........................................................88 液晶显示LCD .................................................................................................91 实例 81:用LCD显示字符'A' ..........................................................................91 实例 82:用LCD循环右移显示"Welcome to China" .......................................95 实例 83:用LCD显示适时检测结果................................................................98 实例 84:液晶时钟设计................................................................................102 一些芯片的使用*****24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 红外遥控 实例 85:将数据"0x0f"写入AT24C02 再读出送P1 口显示............................108 实例 86:将按键次数写入AT24C02,再读出并用 1602LCD显示.................112 实例 87:对I2C总线上挂接多个AT24C02 的读写操作 .................................119 实例 88:基于AT24C02 的多机通信 读取程序 ..........................................125 实例 88:基于AT24C02 的多机通信 写入程序 ............................................129 实例 90:DS18B20 温度检测及其液晶显示 .................................................140 实例 91:将数据"0xaa"写入X5045 再读出送P1 口显示................................148 实例 92:将流水灯控制码写入X5045 并读出送P1 口显示............................152 实例 93:对SPI总线上挂接多个X5045 的读写操作......................................156 实例 94:基于ADC0832 的数字电压表 ........................................................160 实例 95:用DAC0832 产生锯齿波电压 ........................................................166 实例 96:用P1 口显示红外遥控器的按键值 .................................................166 实例 97:用红外遥控器控制继电器..............................................................169 实例 98:基于DS1302 的日历时钟 ..............................................................171 实例 99:单片机数据发送程序 .....................................................................180 实例 100:电机转速表设计 ..........................................................................181 //模拟霍尔脉冲 .............................................................................................186   函数的使用和熟悉  实例 3:用单片机控制第一个灯亮  #include //包含 51 单片机寄存器定义的头文件 void main(void) { P1=0xfe; //P1=1111 1110B,即 P1.0 输出低电平 } 3
实例 4:用单片机控制一个灯闪烁:认识单片机的工作频率  #include //包含单片机寄存器的头文件 /**************************************** 函数功能:延时一段时间 *****************************************/ void delay(void) //两个 void 意思分别为无需返回值,没有参数传递 { unsigned int i; //定义无符号整数,最大取值范围 65535 for(i=0;i<20000;i++) //做 20000 次空循环 ; //什么也不做,等待一个机器周期 } /******************************************************* 函数功能:主函数 (C 语言规定必须有也只能有 1 个主函数) ********************************************************/ 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 //包含单片机寄存器的头文件 /******************************************************* 函数功能:主函数 (C 语言规定必须有也只能有 1 个主函数) ********************************************************/ void main(void) { while(1) P2=P1; P3=P1; // P1=1111 1111B,熄灭 LED // 将 P1 口状态送入 P0 口 // 将 P1 口状态送入 P2 口 // 将 P1 口状态送入 P3 口 //无限循环 { P1=0xff; P0=P1; 4
} } unsigned char i,j; for(i=0;i<250;i++) } for(j=0;j<250;j++) ; 实例 6:使用 P3 口流水点亮 8 位 LED    #include //包含单片机寄存器的头文件 /**************************************** 函数功能:延时一段时间 *****************************************/ void delay(void) { /******************************************************* 函数功能:主函数 ********************************************************/ void main(void) { while(1) } { delay(); //调用延时函数 delay(); //调用延时函数 P3=0x7f; //第八个灯亮 delay(); //调用延时函数 } P3=0xfe; //第一个灯亮 delay(); //调用延时函数 P3=0xfd; //第二个灯亮 delay(); //调用延时函数 P3=0xfb; //第三个灯亮 delay(); //调用延时函数 P3=0xf7; //第四个灯亮 delay(); //调用延时函数 P3=0xef; //第五个灯亮 P3=0xdf; //第六个灯亮 delay(); //调用延时函数 P3=0xbf; //第七个灯亮 5
unsigned char i,j; for(i=0;i<250;i++) } for(j=0;j<250;j++) ; //利用循环等待若干机器周期,从而延时一段时间 实例 7:通过对 P3 口地址的操作流水点亮 8 位 LED  #include //包含单片机寄存器的头文件 sfr x=0xb0; //P3 口在存储器中的地址是 b0H, 通过 sfr 可定义 8051 内核单 片机 //的所有内部 8 位特殊功能寄存器,对地址 x 的操作也就是对 P1 口的 操作 /**************************************** 函数功能:延时一段时间 *****************************************/ void delay(void) { /***************************************** 函数功能:主函数 ******************************************/ void main(void) { while(1) { delay(); //调用延时函数 delay(); //调用延时函数 delay(); //调用延时函数 } x=0xfe; //第一个灯亮 delay(); //调用延时函数 x=0xfd; //第二个灯亮 delay(); //调用延时函数 x=0xfb; //第三个灯亮 delay(); //调用延时函数 x=0xf7; //第四个灯亮 delay(); //调用延时函数 x=0xef; //第五个灯亮 x=0xdf; //第六个灯亮 delay(); //调用延时函数 x=0xbf; //第七个灯亮 x=0x7f; //第八个灯亮 6
} { ; //空操作 for(i=0;i<200;i++) for(j=0;j<180;j++) 实例 8:用不同数据类型控制灯闪烁时间  #include //包含单片机寄存器的头文件 /****************************************************** 函数功能:用整形数据延时一段时间 ******************************************************/ 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 } /****************************************************** 函数功能:主函数 ******************************************************/ void main(void) { unsigned char i; while(1) for(i=0;i<3;i++) { for(i=0;i<3;i++) P1=0xfe; //P1.0 口的灯点亮 int_delay(); //延时一段较长的时间 P1=0xff; //熄灭 int_delay(); //延时一段较长的时间 } { P1=0xef; //P1.4 口的灯点亮 ; //空操作 7
char_delay(); //延时一段较长的时间 P1=0xff; //熄灭 char_delay(); //延时一段较长的时间 } } } 实例 9:用 P0 口、P1  口分别显示加法和减法运算结果  #include void main(void) { unsigned char m,n; m=43; //即十进制数 2x16+11=43 n=60; //即十进制数 3x16+12=60 P1=m+n; //P1=103=0110 0111B,结果 P1.3、P1.4、P1.7 口的灯被点亮 P0=n-m; //P0=17=0001 0001B,结果 P0.0、P0.4 的灯被熄灭 } 实例 10:用 P0、P1 口显示乘法运算结果  #include //包含单片机寄存器的头文件 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 (H1*16+H0)/256 除以 256 的商 256 的余数 //两边同除以 256,可得 17+192/256=H3*16+H2+ //因此,高 8 位 16 进制数 H3*16+H2 必然等于 17,即 4544 //低 8 位 16 进制数 H1*16+H0 必然等于 192,即 4544 除以 8
分享到:
收藏