单片机最小系统设计.ppt_第1页
单片机最小系统设计.ppt_第2页
单片机最小系统设计.ppt_第3页
单片机最小系统设计.ppt_第4页
单片机最小系统设计.ppt_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机最小系统设计,熟悉单片机基本工作条件;熟悉单片机外 围电路的设计及软件编程方法。,第一节 51单片机基本工作条件,一、电源电路(+5V),第一节 51单片机基本工作条件,二、时钟电路 时钟电路为整个单片机系统产生时间基准。是单片机系统必须的部分。,第一节 51单片机基本工作条件,三、复位电路,复位电路是单片机系统必须的,用来为单片机提供 正确的复位信号。,四、ISP下载电路,第二节 单片机系统设计,一、LED显示电路 1、设计任务:在 P0.0端口上接一个发光二极管 L1,使 L1在不停地一亮一灭,一亮一灭的时间间隔为 0.2秒。,第二节 单片机系统设计,2、源程序 (1)、设计流程图,

2、第二节 单片机系统设计,(2)、汇编源程序 ORG 00H START:CLR P0.0 LCALL DELAY SETB P0.0 LCALL DELAY LJMP START DELAY:MOV R5, #20 ;延时子程序,延时 0.2秒 D1:MOV R6, #20 D2: MOV R7,#248 DJNZ R7, $ DJNZ R6, D2 DJNZ R5, D1 RET END,第二节 单片机系统设计,(3)、C语言 #include sbit L1=P00; void delay02s(void) /延时 0.2秒子程序 unsigned char i,j,k; for(i=20

3、;i0;i-) for(j=20;j0;j-) for(k=248;k0;k-); void main(void) while(1) L1=0; delay02s(); L1=1; delay02s(); ,第二节 单片机系统设计,二、流水灯 1、设计任务: 设计P0口让8个LED间隔1S从右至左依次闪烁。 2、源程序 (1)、汇编语言 ORG 00H START: MOV R2,#8 MOV A,#0FEH SETB C LOOP: MOV P1,A LCALL DELAY RLC A,第二节 单片机系统设计,DJNZ R2, LOOP MOV R2,#8 LOOP1: MOV P1,A L

4、CALL DELAY RRC A DJNZ R2, LOOP1 LJMP START DELAY: MOV R5,#20 ; D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END,第二节 单片机系统设计,(2)、C语言 #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int void mDelay(unsigned int Delay) unsigned int i; for(;Del

5、ay0;Delay-) for(i=0;i124;i+) ; void main() unsigned char OutData=0 xfe; for(;) P0=OutData; OutData=_crol_(OutData,1); /循环左移 mDelay(1000); /*延时1000 毫秒*/ ,第二节 单片机系统设计,三、模拟开关灯 1、设计任务: 监视开关K1(接在P3.7 端口上),用发光二极管L1(接在单片机P0.0 端口上)显示开关状态,如果开关合上,L1 亮,开关打开,L1 熄灭。,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、汇编源程序,ORG 00H

6、 START: JB P3.7, LIG CLR P0.0 SJMP START LIG: SETB P0.0 SJMP START END,第二节 单片机系统设计,4、C语言源程序 #include sbit K1=P37; sbit L1=P00; void main(void) while(1) if(K1=0) L1=0; else L1=1; ,第二节 单片机系统设计,四、多路开关状态指示 1、设计任务: AT89S51 单片机的P0.0P0.3 接四个发光二 极管L1L4,P3.4P3.7 接了四个开关S5 S20,编程将开关的状态反映到发光二极管。 (开关闭合,对应的灯亮,开关断

7、开,对应的灯灭)。,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、汇编源程序 ORG 00H START: JB P3.4, NEXT1 CLR P0.0 SJMP NEX1 NEXT1: SETB P0.0 NEX1: JB P3.5,NEXT2 CLR P0.1 SJMP NEX2 NEXT2: SETB P0.1 NEX2: JB P3.6,NEXT3 CLR P0.2 SJMP NEX3 NEXT3: SETB P0.2 NEX3: JB P3.7,NEXT4 CLR P0.3 SJMP NEX4 NEXT4: SETB P0.3 NEX4: SJMP START

8、END,第二节 单片机系统设计,4、C语言 #include void main(void) while(1) if(P3_4=0) P0_0=0; else P0_0=1; if(P3_5=0) P0_1=0; else P0_1=1; if(P3_6=0) P0_2=0; elseP0_2=1; if(P3_7=0) P0_3=0; elseP0_3=1; ,第二节 单片机系统设计,五、广告灯的设计 1、设计任务: 利用取表的方法,使端口P0 做单一灯的变化:左 移2 次,右移2 次,闪烁2 次(延时的时间0.2秒),第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、汇编源

9、程序 ORG 0 START: MOV DPTR,#TABLE LOOP: CLR A MOVC A, A+DPTR CJNE A,#01H,LOOP1 LJMP START LOOP1: MOV P0, A MOV R3, #20 LCALL DELAY INC DPTR LJMP LOOP DELAY: MOV R4,#20 D1: MOV R5,#248 DJNZ R5,$ DJNZ R4,D1 DJNZ R3,DELAY,第二节 单片机系统设计,RET TABLE: DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 0FEH,0FDH,0

10、FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 07FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 07FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 00H, 0FFH,00H, 0FFH DB 01H END,第二节 单片机系统设计,4、C语言 #include unsigned char code table=0 xfe,0 xfd,0 xfb,0 xf7, 0 xef,0 xdf,0 xbf,0 x7f, 0 xfe,0 xfd,0 xfb,0 xf7, 0 xef,0 xdf,0 x

11、bf,0 x7f, 0 x7f,0 xbf,0 xdf,0 xef, 0 xf7,0 xfb,0 xfd,0 xfe, 0 x7f,0 xbf,0 xdf,0 xef, 0 xf7,0 xfb,0 xfd,0 xfe, 0 x00,0 xff,0 x00,0 xff, 0 x01; unsigned char i; void delay(void),第二节 单片机系统设计, unsigned char m,n,s; for(m=20;m0;m-) for(n=20;n0;n-) for(s=248;s0;s-); void main(void) while(1) if(tablei!=0 x0

12、1) P1=tablei; i+; delay(); else i=0; ,第二节 单片机系统设计,六、按键识别方法 1、设计任务: 每按下一次开关S20,计数值加1,通过AT89S51 单片机的P0 端口的P0.0 到P0.7 显示出其的二进制计数值。 2、电路原理,第二节 单片机系统设计,第二节 单片机系统设计,3、源程序 (1)、汇编语言 ORG 0 START: MOV R1,#00H ;初始化R1为0,表示从0开始计数 MOV A,R1 ; CPL A ;取反指令 MOV P0,A ;送出P1端口由发光二极管显示 REL: JB P3.7,REL ;判断SP1是否按下 LCALL D

13、ELAY10MS ;若按下,则延时10ms左右 JB P3.7,REL ;再判断SP1是否真得按下 INC R1 ;若真得按下,则进行按键处理,使 MOV A,R1 ;计数内容加1,并送出P1端口由 CPL A ;发光二极管显示 MOV P0,A ; JNB P3.7,$ ;等待SP1释放 SJMP REL ;继续对K1按键扫描 DELAY10MS: MOV R6,#20 ;延时10ms子程序 L1: MOV R7,#248 DJNZ R7,$ DJNZ R6,L1 RET END,第二节 单片机系统设计,(2)、C语言,#include unsigned char count; void d

14、elay10ms(void) unsigned char i,j; for(i=250;i0;i-) for(j=248;j0;j-); void main(void) while(1) if(P3_7=0) delay10ms(); if(P3_7=0) ,第二节 单片机系统设计,count+; if(count=256) count=0; P0=count; while(P3_7=0); ,第二节 单片机系统设计,七、流水灯定时器 1、设计任务: 隔1S,通过AT89S51 单片机的P0.0 端口的LED闪亮。 2、电路原理,第二节 单片机系统设计,第二节 单片机系统设计,C程序设计 #i

15、nclude #define uchar unsigned char #define uint unsigned int sbit d1=P00; uchar tt; void main() uchar temp=0 xfe; tt=0; TMOD=0 x10; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET1=1; TR1=1;,第二节 单片机系统设计,while(1) if(tt=20) tt=0; d1=!d1; void ex() interrupt 3 TH1=(65536-50000)/256; TL1=(65536-5

16、0000)%256; tt+; ,第二节 单片机系统设计,八、LED显示 1、设计任务: 利用AT89S51 单片机的P0 端口的P0.0P0.7 连接到一个共阴数码管的ah 的笔段上,数码管的公共端接地。在数码管上循环显示09 数字,时间间隔0.2 秒。,2.系统工作原理 数码管由8个发光二极管构成,可以用来显示数字、字符等,它在家电及工业控制中有着很广泛的应用,例如用来显示温度、数量、重量、日期、时间等,具有显示醒目、直观的有点,如图2.3所示。,图2.3 数码管实物图,【项目实践】,数码管实际上是由7个发光管组成“8”字形构成的,加上小数点就是8个。这些段分别由字母a、b、c、d、e、f

17、、g、dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样。例如:显示一个“3”字,那么应当是a亮、b亮、c亮、d亮、e不亮、f不亮、g亮、dp不亮。数码管的内部结构如图2.4所示,其中COM引脚为公共端,用来控制数码管显示的打开或关闭,即起到“使能”作用。 根据公共端接法的不同,数码管又分为共阴极和共阳极两种结构,分别如图2.4(b)和图 2.4(c)所示。 共阳极就是将8个LED的阳极连接到一起组成公共端COM,接正极,当相应字段为低电平“0”时,可以点亮该字段;当相应字段为高电平“1”时,该字段不亮。 共阴极就是将8个LED的阴极连接到一起组成公共端CO

18、M,接负极,当相应字段为高电平“1”时,可以点亮该字段;当相应字段为低电平“0”时,该字段不亮。,【项目实践】,图2.4 数码管内部结构图,【项目实践】,表2.1 数码管显示数字的段码表,【项目实践】,第二节 单片机系统设计,3、电路原理,第二节 单片机系统设计,#include #define uchar unsigned char #include sbit we=P20; sbit du=P21; unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f; unsigned

19、char dispcount; void delay02s(void) unsigned char i,j,k; for(i=10;i0;i-) for(j=200;j0;j-) for(k=248;k0;k-); void main(void) while(1) for(dispcount=0;dispcount10;dispcount+) we=1; P0=0 x00; we=0; du=1; P0=tabledispcount; du=0; delay02s(); ,第二节 单片机系统设计,九、0-9计数器 1、设计任务: 利用AT89S51 单片机来制作一个手动计数器,在AT89S51

20、 单片机的P3.7 管脚接一个轻触开关,作为手动计数的按钮,用单片机的P0.0P0.7 接一个共阴数码管,作为09 计数的数显示;,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、源程序 (1)、汇编语言 ORG 0 START: MOV R1,#00H ;初始化R1为0, REL: JB P3.7,REL ;判断SP1是否按下 LCALL DELAY ;若按下,则延时10ms左右 JB P3.7,REL ;再判断SP1是否真得按下 MOV A,R1 MOV DPTR,#TABLE setb P2.0 MOV p0,#00h clr p2.0 MOVC A,A+DPTR MO

21、V P0,A INC R1,第二节 单片机系统设计,JNB P3.7,$ ;等待SP1释放 CJNE R1,#10,REL SJMP START ;继续对K1按键扫描 DELAY: MOV R6,#20 ;延时10ms子程序 L1: MOV R7,#248 DJNZ R7,$ DJNZ R6,L1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH END,第二节 单片机系统设计,LCALL DELY10MS JB SP1,WAIT INC Count MOV A,Count CJNE A,#100,NEXT LJMP START

22、DELY10MS: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END,第二节 单片机系统设计,(2)C语言 #include unsigned char count; unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f; sbit d1=P20; void delay10ms(void) unsigned char

23、i,j; for(i=250;i0;i-) for(j=248;j0;j-); void main(void) while(1) if(P3_7=0) delay10ms(); if(P3_7=0),第二节 单片机系统设计,count+; if(count=10) count=0; d1=1; P0=0; d1=0; P0=tablecount; while(P3_7=0); ,第二节 单片机系统设计,十、LED动态显示 1、设计任务: 利用AT89S51 单片机来显示12345678,用单片机的P0.0P0.7 接一个共阴数码管。,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计

24、,3、程序 #include sbit d1=P20; sbit d2=P21; unsigned char code tabledu=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07; unsigned char code tablewe=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; unsigned char dispcount; void delay02s(void) unsigned char i,j,k; for(i=10;i0;i-) for(j=10;j0;j-) for(k=10

25、;k0;k-); ,第二节 单片机系统设计,void main(void) while(1) for(dispcount=0;dispcount8;dispcount+) d1=1; P0=tablewedispcount; d1=0; d2=1; P0=tabledudispcount; d2=0; delay02s(); ,第二节 单片机系统设计,十、44 矩阵式键盘识别 1、设计任务: 用AT89S51 的并行口P1 接44 矩阵键盘,以P1.0P1.3 作输入线,以P1.4P1.7 作输出线;在数码管上显示每个按键的“0F”序号。,第二节 单片机系统设计,2、电路原理,第二节 单片机系

26、统设计,3.程序,第二节 单片机系统设计,十一、 定时计数器T0 作定时应用技术 1、设计任务: 用AT89S51 的定时/计数器T0 产生2 秒钟的定时,每当2 秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2 秒,也就是说,开始L1 指示灯以0.2 秒的速率闪烁,当2 秒定时到来之后,L2 开始以0.2 秒的速率闪烁,如此循环下去。0.2 秒的闪烁速率也由定时/计数器T0 来完成。,第二节 单片机系统设计,2、程序 #include unsigned char tcount2s; unsigned char tcount02s; unsigned char ID; void mai

27、n(void) TMOD=0 x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; while(1); void t0(void) interrupt 1 using 0 tcount2s+; if(tcount2s=40) tcount2s=0; ID+; if(ID=4) ID=0; ,第二节 单片机系统设计,tcount02s+; if(tcount02s=4) tcount02s=0; switch(ID) case 0: P0_0=P0_0; break; case 1: P0_1=P0_1; b

28、reak; case 2: P0_2=P0_2; break; case 3: P0_3=P0_3; break; ,第二节 单片机系统设计,十二、A/D 转换器基本应用 1、设计任务 从ADC0804 的通道4输入05V 之间的模拟量,通过ADC0804 转换成数字量在数码管上以十进制形成显示出来。,第二节 单片机系统设计,2、电路原理:,第二节 单片机系统设计,第二节 单片机系统设计,3、源程序 (1)、汇编语言,第二节 单片机系统设计,(2)、C语言,第二节 单片机系统设计,十一、 1、设计任务:,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、源程序 (1)、汇编语言,第二节 单片机系统设计,(2)、C语言,第二节 单片机系统设计,十一、 1、设计任务:,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、源程序 (1)、汇编语言,第二节 单片机系统设计,(2)、C语言,第二节 单片机系统设计,十一、00-99计数器 1、设计任务: 利用A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论