《单片机实训》PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
流水灯的原理图
C1
10u
6MHZ C2
10u 19 CRYSTAL
U1
XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
18
XTAL2
29 30 31
PSEN ALE EA
RN1
1 2 3 4 5 6 7 8 300 16 15 14 13 12 11 10 9 1 2 3 4 5 6 7 8 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
R1 1k
R2
1k
R3
1k
串口秒表
#include<reg51.h> unsigned char t0,t1;//定义全局变量,用来保存延时时间循环次数 void delay0_5s1(){//延时 for(t0=0;t0<0x0a;t0++){//采用全局变量t0作为循环控制变量 TH1=0x3c;//设置定时初值 TL1=0xb0; TR1=1;//启动T1 while(!TF1);//查询计数是否溢出 TF1=0;}}//定时时间到 void delay_t1(unsigned char t) { for(t1=0;t1<t;t1++)//采用t1作为循环控制变量 delay0_5s1();} void int_0() interrupt 0 {//紧急情况中断 unsigned char i,j,k,l,m; i=P1; //保护现象 j=t0; k=t1; l=TH1; m=TL0; P1=0xdb; //两个方向都是红灯 delay_t1(20);//延时10s P1=i;//恢复现象 t0=j; t1=k; TH1=l; TL1=m;} void int_1() interrupt 2 { //特殊情况中断 unsigned char i,j,k,l,m; EA=0;//关中断 i=P1;//保护现象 j=t0; k=t1; l=TH1; m=TL1; EA=1;//开中断 P1=0xf3; //A路放行 delay_t1(10); EA=0;//关中断
单片机实训
单片机最小系统
单片机以高性能、高速度、体积小、价格低 廉、稳定可靠而得到广泛应用,是工业控制、 设计智能化仪器仪表的首选微控制器,也是 测控、监控的重要组成部分。 单片机最小系统主要包括时钟电路和复位电 路。 用流水灯的程序验证单片机最小系统
流水灯的程序
while(1){ unsigned char i,w; TMOD=0x10; //设置T1工作方式1 w=0x01; //显示码初值 for(i=0;i<8;i++){ P1=~w;//w取反后送P1口,点亮相应的流水灯 w<<=1;//点亮灯的位置移动左移 delay0_2s(); } w=0x80;//显示码 for(i=0;i<8;i++){ P1=~w;//取反 w>>=1;//右移 delay0_2s();//延时 } } }
交通灯的程序
P1=i;//恢复现象 t0=j; t1=k; TH1=l; TL1=m; EA=1;}
//开中断
void main(){ //主函数 unsigned char k; TMOD=0x10;//T1在工作方式1 EA=1; //开总中断允许位 EX0=1;//开外部中断0中断允许位 IT0=1;//设置外部中断0为下降沿触发 EX1=1;//开外部中断1中断允许位 IT1=1;//设置外部中断1为下降沿触发 while(1) { P1=0xf3;//A绿灯,B红灯,延时55s delay_t1(10); for(k=0;k<3;k++){//A绿灯闪烁3次 P1=0xf3; delay0_5s1();//延时0.5s P1=0xfb; delay0_5s1();} P1=0xeb;//A黄灯,B红灯,延时2S delay_t1(4); P1=0xde; //A红灯,B绿灯,延时55S delay_t1(10); for(k=0;k<3;k++){ //B绿灯闪烁3次 P1=0xde; delay0_5s1(); //延时0.5S P1=0xdf; delay0_5s1();}//延时0.5S P1=0xdd; //A红灯,B黄灯,延时2S delay_t1(4);}}
1 2
&
1D 4
18
XTAL2
9
RST
29 30 31
PSEN ALE EA
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
U3
9 8 R SRG8 1 2 3 4 5 6 7 8 300 6 10 11 12 13 74LS164
P2=0x01; //选p2.0控制的数码管 P1=led[sec/10]; //显示秒个位 delay(10); P2=0x02; //选p2.1控制的数码管 P1=led[sec%10]; //显示秒十位 delay(10); temp=~P3; //读入p3口引脚状态并取反 temp=temp&0x2c; //屏蔽掉无关位,保留三位按键 状态 if(temp!=0){ //判断有无按键按 下 if(temp==0x04) //按键暂停键 TR0=0; //停止计数 if(temp==0x08) //按下启动键 TR0=1; //开始计数 if(temp==0x20) //按下清零键 {TR0=0;sec=0;msec=0;}}}}
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
秒表
设计两位LED数码管显示00-99,计满清零
#include <REGX51.H> unsigned char msec,sec; //定义msec为50ms计数变量,sec为 秒变量 void delay(unsigned char i){//延时函数 unsigned char j,k; for(k=0;k<i;k++) for(j=0;j<255;j++);} void T0_INT(void) interrupt 1{ //定时器0中断类型号为1 TH0=0x3c; //50ms定时初值 TL0=0xb0; msec++; //中断次数增1 if(msec==20){ //中断次数到20次吗? msec=0; //是,1s计时到,50ms计数变量清零 sec++; //秒变量增1 if(sec==100){ //到100s吗? sec=0;}}} //是,秒变量清零 void main(){ //主函数
秒表的程序
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定 义数字0~9字型显示码 unsigned char temp; TMOD=0x01; //定时器0工作方式1 TH0=0x3C; //定时初值50ms TL0=0xb0; EA=1; TR0=1; //开总中断 ET0=1; //开定时器0中断 P3=0xff; //p3口做输入 while(1){
RN2
16 15 14 13 12 11 10 9
C1/-> 3
1 2
&
1D 4 5
交通信号灯顺序控制
设计一个十字路口交通信号灯的顺序控制器 绿灯亮,放行20s 黄灯亮,警告5s 红灯亮,禁止25s S0键按下时,A路放行,B路禁行 S1键按下时,A路禁行,B路放行
#include <REGX51.H> void delay0_2s() { unsigned char i; for(i=0;i<10;i++)//设置10次循环次数 { TH1=0x3c;// 定时器初值 TL1=0xb0; TR1=1; //启动T1 while(!TF1);//查询计数是否溢出 TF1=0; //定时时间到 } } void main()//主函数 {
用串行口显示00-99,每隔一秒发送一次,循 环反复; 程序采用查询方式编写
串口秒表的程序
பைடு நூலகம்
#include <REGX51.H> unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80 ,0x90}; unsigned char msec,sec; void delay(); void time0() interrupt 1 { TH0=0x3c; TL0=0xb0; msec++; if(msec==20) { msec=0; sec++; if(sec==100)sec=0; } } void main() { TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1;
18
XTAL2
R1
10K 9 RST
C4
10uF
U2 RN1
1 2 3 4 5 6 7 8 330 16 15 14 13 12 11 10 9 10 9 8 7 6 5 4 3 2 1 11 12 13 14 15 16 17 18 19 20 LED-BARGRAPH-GRN
29 30 31
PSEN ALE EA
串口秒表的原理图
U2
9 8 R SRG8 C1/-> 3 1 2 3 4 5 6 7 8 300 5 6 10 11 12 74LS164 13
RN1
16 15 14 13 12 11 10 9
U1
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
秒表的原理图
U3
18 17 16 15 14 13 12 11 B0 B1 B2 B3 B4 B5 B6 B7 A0 A1 A2 A3 A4 A5 A6 A7 CE AB/BA 74LS245 2 3 4 5 6 7 8 9 19 1 9 RST
U1
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
SCON=0; //可不写 TR0=1; while(1) { SBUF=led[sec%10]; while(TI==0); TI=0; SBUF=led[sec/10]; while(TI==0); TI=0; delay(); } } void delay() { unsigned char j,k; for(j=0;j<50;j++) for(k=0;k<200;k++); }