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;i
3、0;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,#8MOV A,#0FEHSETB C LOOP: MOV P1,ALCALL DELAYRLC A,第二节 单片机系统设计,DJNZ R2, LOOP MOV R2,#8 LOOP1: MOV P1,A LCALL D
4、ELAY 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(;Delay0
5、;Delay-) for(i=0;i124;i+) ; void main() unsigned char OutData=0xfe; for(;) P0=OutData; OutData=_crol_(OutData,1); /循环左移 mDelay(1000); /*延时1000 毫秒*/ ,第二节 单片机系统设计,三、模拟开关灯 1、设计任务: 监视开关K1(接在P3.7 端口上),用发光二极管L1(接在单片机P0.0 端口上)显示开关状态,如果开关合上,L1 亮,开关打开,L1 熄灭。,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、汇编源程序,ORG 00H STA
6、RT: JB P3.7, LIGCLR P0.0SJMP START LIG: SETB P0.0SJMP STARTEND,第二节 单片机系统设计,4、C语言源程序 #include sbit K1=P37; sbit L1=P00; void main(void) while(1) if(K1=0)L1=0; elseL1=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 END,第二节 单片
8、机系统设计,4、C语言 #include void main(void) while(1) if(P3_4=0)P0_0=0; elseP0_0=1; if(P3_5=0)P0_1=0; elseP0_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、汇编源程序ORG 0 START:
9、MOV DPTR,#TABLELOOP: CLR AMOVC A, A+DPTRCJNE A,#01H,LOOP1LJMP START LOOP1: MOV P0, AMOV R3, #20LCALL DELAYINC DPTRLJMP LOOP DELAY: MOV R4,#20 D1: MOV R5,#248DJNZ R5,$ DJNZ R4,D1DJNZ R3,DELAY,第二节 单片机系统设计,RET TABLE: DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH
10、,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=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0
11、xfd,0xfe, 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe, 0x00,0xff,0x00,0xff, 0x01; 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!=0x01) P1=tablei; i+; delay(); else i=0; ,第二节 单片机系统设计,六、按键识别方法 1、设计任
12、务:每按下一次开关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 DELAY10MS ;若按下,则延时10ms左右 JB P3.7,REL ;再判断SP1是否真得按下 INC R1 ;若真得按下,则
13、进行按键处理,使 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 delay10ms(void) unsigned char i,j; for(i=250;i0;i-) for(j=248;j0;j
14、-); 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程序设计 #include #define uchar unsigned char #define uint unsigned int sbit
15、d1=P00; uchar tt; void main() uchar temp=0xfe;tt=0;TMOD=0x10;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-50000)%256; tt+; ,第二节 单片机系统设计,八、LED显示 1、设计任务: 利用AT89S51 单片机的P0 端口的P0.0P0.7 连接到一
16、个共阴数码管的ah 的笔段上,数码管的公共端接地。在数码管上循环显示09 数字,时间间隔0.2 秒。,2.系统工作原理数码管由8个发光二极管构成,可以用来显示数字、字符等,它在家电及工业控制中有着很广泛的应用,例如用来显示温度、数量、重量、日期、时间等,具有显示醒目、直观的有点,如图2.3所示。,图2.3 数码管实物图,【项目实践】,数码管实际上是由7个发光管组成“8”字形构成的,加上小数点就是8个。这些段分别由字母a、b、c、d、e、f、g、dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样。例如:显示一个“3”字,那么应当是a亮、b亮、c亮、d亮、e不亮
17、、f不亮、g亮、dp不亮。数码管的内部结构如图2.4所示,其中COM引脚为公共端,用来控制数码管显示的打开或关闭,即起到“使能”作用。根据公共端接法的不同,数码管又分为共阴极和共阳极两种结构,分别如图2.4(b)和图 2.4(c)所示。共阳极就是将8个LED的阳极连接到一起组成公共端COM,接正极,当相应字段为低电平“0”时,可以点亮该字段;当相应字段为高电平“1”时,该字段不亮。共阴极就是将8个LED的阴极连接到一起组成公共端COM,接负极,当相应字段为高电平“1”时,可以点亮该字段;当相应字段为低电平“0”时,该字段不亮。,【项目实践】,图2.4 数码管内部结构图,【项目实践】,表2.1
18、数码管显示数字的段码表,【项目实践】,第二节 单片机系统设计,3、电路原理,第二节 单片机系统设计,#include #define uchar unsigned char #include sbit we=P20; sbit du=P21; unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f; unsigned char dispcount; void delay02s(void) unsigned char i,j,k; for(i=10;i0;i-) for(j=200;j0;j-) fo
19、r(k=248;k0;k-); void main(void) while(1)for(dispcount=0;dispcount10;dispcount+) we=1;P0=0x00;we=0;du=1;P0=tabledispcount;du=0;delay02s(); ,第二节 单片机系统设计,九、0-9计数器 1、设计任务: 利用AT89S51 单片机来制作一个手动计数器,在AT89S51 单片机的P3.7 管脚接一个轻触开关,作为手动计数的按钮,用单片机的P0.0P0.7 接一个共阴数码管,作为09 计数的数显示;,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、源
20、程序 (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,R1MOV DPTR,#TABLEsetb P2.0MOV p0,#00hclr p2.0MOVC A,A+DPTRMOV P0,AINC R1,第二节 单片机系统设计,JNB P3.7,$ ;等待SP1释放 CJNE R1,#10,REL SJMP START ;继续对K1按键扫描 DELAY: MOV R6,#20 ;延时10ms子程
21、序 L1: MOV R7,#248DJNZ R7,$DJNZ R6,L1RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DHDB 7DH,07H,7FH,6FHEND,第二节 单片机系统设计,LCALL DELY10MS JB SP1,WAIT INC Count MOV A,Count CJNE A,#100,NEXT LJMP START 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,
22、第二节 单片机系统设计,(2)C语言 #include unsigned char count; unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f; sbit d1=P20; void delay10ms(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=1
23、0)count=0; d1=1;P0=0;d1=0;P0=tablecount;while(P3_7=0); ,第二节 单片机系统设计,十、LED动态显示 1、设计任务: 利用AT89S51 单片机来显示12345678,用单片机的P0.0P0.7 接一个共阴数码管。,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、程序 #include sbit d1=P20; sbit d2=P21; unsigned char code tabledu=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07; unsigned char code tablew
24、e=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; unsigned char dispcount; void delay02s(void) unsigned char i,j,k; for(i=10;i0;i-) for(j=10;j0;j-) for(k=10;k0;k-); ,第二节 单片机系统设计,void main(void) while(1)for(dispcount=0;dispcount8;dispcount+) d1=1;P0=tablewedispcount;d1=0;d2=1;P0=tabledudispcount;d2=0;delay0
25、2s(); ,第二节 单片机系统设计,十、44 矩阵式键盘识别 1、设计任务:用AT89S51 的并行口P1 接44 矩阵键盘,以P1.0P1.3 作输入线,以P1.4P1.7 作输出线;在数码管上显示每个按键的“0F”序号。,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3.程序,第二节 单片机系统设计,十一、 定时计数器T0 作定时应用技术 1、设计任务:用AT89S51 的定时/计数器T0 产生2 秒钟的定时,每当2 秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2 秒,也就是说,开始L1 指示灯以0.2 秒的速率闪烁,当2 秒定时到来之后,L2 开始以0.2 秒
26、的速率闪烁,如此循环下去。0.2 秒的闪烁速率也由定时/计数器T0 来完成。,第二节 单片机系统设计,2、程序 #include unsigned char tcount2s; unsigned char tcount02s; unsigned char ID; void main(void) TMOD=0x01; 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) tcou
27、nt2s=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; break; case 2: P0_2=P0_2; break; case 3: P0_3=P0_3; break; ,第二节 单片机系统设计,十二、A/D 转换器基本应用1、设计任务从ADC0804 的通道4输入05V 之间的模拟量,通过ADC0804 转换成数字量在数码管上以十进制形成显示出来。,第二节 单片机系统设计,2
28、、电路原理:,第二节 单片机系统设计,第二节 单片机系统设计,3、源程序 (1)、汇编语言,第二节 单片机系统设计,(2)、C语言,第二节 单片机系统设计,十一、 1、设计任务:,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、源程序 (1)、汇编语言,第二节 单片机系统设计,(2)、C语言,第二节 单片机系统设计,十一、 1、设计任务:,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、源程序 (1)、汇编语言,第二节 单片机系统设计,(2)、C语言,第二节 单片机系统设计,十一、00-99计数器 1、设计任务: 利用AT89S51 单片机来制作一个手动计数
29、器,在AT89S51 单片机的P3.7 管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0P2.7 接一个共阴数码管,作为0099 计数的个位数显示,用单片机 的P0.0P0.7 接一个共阴数码管,作为0099 计数的十位数显示;,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、源程序 (1)、汇编语言,第二节 单片机系统设计,(2)、C语言,第二节 单片机系统设计,十一、00-99计数器 1、设计任务: 利用AT89S51 单片机来制作一个手动计数器,在AT89S51 单片机的P3.7 管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0P2.7 接一个共阴数
30、码管,作为0099 计数的个位数显示,用单片机 的P0.0P0.7 接一个共阴数码管,作为0099 计数的十位数显示;,第二节 单片机系统设计,2、电路原理,第二节 单片机系统设计,3、源程序 (1)、汇编语言,第二节 单片机系统设计,(2)、C语言,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片
31、机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,第二节 单片机系统设计,