proteus单片机.ppt
《proteus单片机.ppt》由会员分享,可在线阅读,更多相关《proteus单片机.ppt(321页珍藏版)》请在课桌文档上搜索。
1、第7章 基于PROTEUS ISIS的 单片机电路仿真,7.1 单片机最小系统实训7.2 模拟汽车转向灯控制实训7.3 基于LED数码管的简易秒表设计实训7.4 电子广告牌实训7.5 数码管动态显示实训7.6 中断扫描方式的矩阵式键盘设计实训,7.7 模拟交通灯控制实训7.8 液晶显示控制实训7.9 A/D转换接口技术实训7.10 D/A转换接口技术实训7.11 双机通信技术实训7.12 单片机课程设计,7.1 单片机最小系统实训本实训通过51单片机控制一个简单的LED灯,实现闪烁功能,并将程序编译下载到单片机中,从而使单片机工作起来。单片机最小系统实训图如图7.1.1所示,所用元件清单如表7
2、.1.1所示。,图7.1.1 单片机最小系统实训图,程序代码为:#include sbit P1_0=P10;void delay(unsigned char i);void main()while(1)P1_0=0;delay(255);P1_0=1;,delay(255);void delay(unsigned char i)unsigned char j,k;for(k=0;ki;k+)for(j=0;j255;j+);,在KEIL软件中输入上述代码,编译后产生十六进制文件7-1-1.hex,双击AT89C51,将弹出如图7.1.2所示的对话框。在图7.1.2中添加十六进制文件7-1-1
3、.hex,点击“OK”即可。最后进行仿真,可发现LED灯按要求实现了闪烁功能。,图7.1.2 添加十六进制文件,7.2 模拟汽车转向灯控制实训安装在汽车不同位置的信号灯是汽车驾驶员之间及驾驶员向行人传递汽车行驶状况的工具,一般包括转向灯、刹车灯、倒车灯等。其中转向灯包括左转灯和右转灯,其状态表示的意义如表7.2.1所示。,本实训利用PROTEUS模拟汽车转向灯控制,其中开关S0、S1模拟驾驶员发出命令,若开关状态为0,则表示开关断开,反之闭合。其实训图如图7.2.1所示,所用元件清单如表7.2.2所示。,图7.2.1 模拟汽车转向灯控制实训图,在上述电路图中,开关S0、S1模拟驾驶员命令,发光
4、二极管D1、D2模拟左转灯和右转灯,两者之间的关系如表7.2.1所示。利用开关S0、S1的状态即可控制D1和D2的状态。程序代码为:,#include sbit P1_0=P10;sbit P1_1=P11;sbit P3_0=P30;sbit P3_1=P31;void delay(unsigned char i);void main(),bit left,right;while(1)P3_0=1;P3_1=1;left=P3_0;right=P3_1;switch(P3),case 0 xfc:P1_0=1,P1_1=1;break;case 0 xfd:P1_0=0,P1_1=1;bre
5、ak;case 0 xfe:P1_0=1,P1_1=0;break;case 0 xff:P1_0=0,P1_1=0;break;delay(255);P1_0=1;P1_1=1;delay(255);,void delay(unsigned char i)unsigned char j,k;for(k=0;ki;k+)for(j=0;j255;j+);,在KEIL软件中输入上述代码,编译后产生十六进制文件7-2-1.hex,双击AT89C51,将弹出如图7.2.2所示的对话框。在图7.2.2中添加十六进制文件7-2-1.hex,点击“OK”即可。最后进行仿真,可实现表7.2.1的所有功能。,
6、图7.2.2 添加十六进制文件,7.3 基于LED数码管的简易秒表设计实训利用51单片机控制1个LED数码管,依次循环显示09,显示间隔时间为1 s,即可实现一位数的简易秒表。基于LED数码管的简易秒表设计实训图如图7.3.1所示,所用元件清单如表7.3.1所示。,图7.3.1 基于LED数码管的简易秒表设计实训,在上述电路图中,利用单片机的P2口控制一个共阳极LED数码管,向P2口输出相应字型码即可显示数字09。对于共阳极数码管,当连接段控制端的I/O引脚输出低电平时,相应段的发光管点亮。程序代码为:,#includeunsigned char led=0 xc0,0 xf9,0 xa4,0
7、 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/定义数组led存放数字09的字型码void delay1s()/采用定时器1实现1s的延时 unsigned char i;for(i=0;i20;i+)/设置循环次数为20,TH1=0 x3c;/设置定时器初值为3CBOH TL1=0 xb0;TR1=1;/启动定时器T1 while(!TF1);/查询计数是否溢出,即50 ms时间到 则TF1=1 TF1=0;/将溢出标志位TF1清零,void main()/主函数 unsigned char i;TMOD=0 x10;/设置定时器1在工作方式1 while
8、(1),for(i=0;i10;i+)P2=ledi;/字型码送段控制口P1 delay1s();/延时1 s,在KEIL软件中输入上述代码,编译后产生十六进制文件7-3-1.hex,双击AT89C51,将弹出如图7.3.2所示的对话框。在图7.3.2中添加十六进制文件7-3-1.hex,点击“OK”即可。最后进行仿真,可实现每隔1s依次循环显示数字09。,图7.3.2 添加十六进制文件,7.4 电子广告牌实训利用51单片机控制1个88 LED点阵显示模块,依次循环显示09,显示间隔时间为1 s,实现一位数的简易秒表。电子广告牌实训图如图7.4.1所示,所用元件清单如表7.4.1所示。,图7.
9、4.1 电子广告牌实训图,LED点阵显示是把很多LED按矩阵方式排列在一起,通过对各LED发光与不发光的控制来完成各种字符或图形的显示。88 LED点阵分别由8行和8列来控制。在图7.3.1中,用单片机的P1口控制点阵屏的8行,用P0口控制点阵屏的8列。,实际应用中,P0口用于控制列线,需串联一个300 左右的限流电阻。同时,为了提高单片机端口带负载的能力,通常在端口和外接负载之间增加一个缓冲驱动器。图7.4.1中P1口通过74LS245与点阵连接,既保证了点阵的亮度,又能保护单片机的引脚。其程序代码为:,#includevoid delay(unsigned char i)unsigned
10、char k,j;for(k=0;ki;k+)for(j=0;j255;j+);,void delay1ms()/软件实现延时1ms unsigned char i;for(i=0;i0 x10;i+);void main(),unsigned char code led=0 x00,0 x18,0 x24,0 x24,0 x24,0 x24,0 x18,0 x00,/0 0 x08,0 x18,0 x28,0 x08,0 x08,0 x08,0 x3e,0 x00,/1 0 x00,0 x18,0 x24,0 x24,0 x08,0 x10,0 x3c,0 x00,/2 0 x00,0 x1
11、8,0 x24,0 x04,0 x18,0 x04,0 x24,0 x18,/3 0 x00,0 x08,0 x10,0 x28,0 x48,0 x3e,0 x08,0 x00,/4 0 x00,0 x2c,0 x20,0 x28,0 x04,0 x24,0 x18,0 x00,/5 0 x08,0 x10,0 x20,0 x38,0 x24,0 x24,0 x18,0 x00,/6,0 x00,0 x3c,0 x04,0 x08,0 x10,0 x10,0 x10,0 x00,/7 0 x00,0 x18,0 x24,0 x24,0 x18,0 x24,0 x24,0 x18,/8 0 x0
12、0,0 x18,0 x24,0 x24,0 x1c,0 x04,0 x24,0 x18;/9 unsigned char w;unsigned int j,k,l,m;while(1),for(j=0;j10;j+)/字符个数控制变量 for(k=0;k1000;k+)/每个字符扫描1000次,控制每 个字符的显示时间 w=0 x01;/行变量指向第一行 l=j*8;for(m=0;m8;m+),P1=0 x00;/关闭行,防止出现显示残留 P0=ledl;/列数据取反后值送至P0口 P1=w;/打开行 delay1ms();w=1;/逐行扫描,l+;/指向数组中下一个显示码,在KEIL软件中
13、输入上述代码,编译后产生十六进制文件7-4-1.hex,双击AT89C51,将弹出如图7.4.2所示的对话框。在图7.4.2中添加十六进制文件7-4-1.hex,点击“OK”即可。最后进行仿真,可实现每隔1 s依次循环显示09。,图7.4.2 添加十六进制文件,如果要在88点阵上显示的图形如图7.4.3所示,程序该如何修改?请读者自行实现此功能。,图7.4.3 显示汉字字符,7.5 数码管动态显示实训本节利用数码管动态显示自己的生日(修定生日为1980年7月8日),实训图如图7.5.1所示,所用元件清单如表7.5.1所示。,图7.5.1 数码管动态显示实训,在上述电路图中,六位数码管的位选端由
14、P2.0P2.5控制,段选端由P1口控制,P1口通过74LS245与数码管的段选端连接,既能保证数码管的亮度,又能保护单片机引脚。其程序代码为:,#includevoiddelay1ms()unsigned char i;TMOD=0 x20;TH1=6;TL1=6;TR1=1;for(i=0;i4;i+),while(!TF1);TF1=0;void disp()unsigned char led=0 x80,0 xc0,0 xc0,0 xf8,0 xc0,0 x80;unsigned char i,w;,w=0 x01;for(i=0;i6;i+)P2=w;w=1;P1=ledi;dela
15、y1ms();,voidmain()while(1)disp();,在KEIL软件中输入上述代码,编译后产生十六进制文件7-5-1.hex,双击AT89C51,将弹出如图7.5.2所示的对话框。在图7.5.2中添加十六进制文件7-5-1.hex,点击“OK”即可。最后进行仿真,可显示如图7.5.3所示的生日。,图7.5.2 添加十六进制文件,图7.5.3 显示生日图,7.6 中断扫描方式的矩阵式键盘设计实训采用中断扫描方式设计44矩阵键盘,当某个键被按下时,LED数码管显示相应按键的键值。中断扫描方式的矩阵式键盘实训图如图7.6.1所示,所用元件清单如表7.6.1所示。,图7.6.1 中断扫描
16、方式的矩阵式键盘实训图,44矩阵式键盘的4根行线连接到P0口的低四位,4根列线连接到P0口的高四位。按照矩阵式键盘的扫描方法可知,P0.0P0.3为扫描输入线,P0.4P0.7为键输出线。图7.6.1中的与门用于产生按键中断,其输入端与各行线相连,再通过上拉电阻接至+5V电源,输出端接至外部中断0的输入端P3.2。LED数码管由单片机的P1口控制。,具体工作过程如下:当键盘没有键按下时,与门各输入端均为高电平,与门输出端也保持高电平;当有键被按下时,与门输入端有低电平,相应地与门输出端变为低电平,从而控制P3.2向CPU申请中断,若CPU开放外部中断,则会响应中断请求,转去执行键盘扫描程序并获
17、得对应键值,最终通过LED数码管显示。,其程序代码为:#include#define uchar unsigned char void display(uchar num);void delay10ms();uchar code led=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e;,void main()P1=0 xff;TMOD=0 x10;/T1在工作方式1IE=0 x87;/开中断总允许位和外部中断0允许位IT0=1;/设置外部0中断下降沿触
18、发while(1),P0=0 xef;P0=0 xdf;P0=0 xbf;P0=0 x7f;void display(uchar num)P1=lednum;,voiddelay10ms()TH1=0 xd8;TL1=0 xf0;TR1=1;while(!TF1);TF1=0;,voidinth()interrupt 0/外部中断0uchar temp,key;P0=0 xef;/扫描第一行temp=P0;/P0状态送给变量temptemp=temp/与操作屏蔽低四位if(temp!=0 x0f)/P0高四位有低电位进入,delay10ms();/延时10 mstemp=P0;/P0状态送给变
19、量temptemp=temp/判断后的P0状态送给变量temp switch(temp),case 0 xee:key=0;break;/键值为0的按键按下case 0 xed:key=4;break;/键值为1的按键按下 case 0 xeb:key=8;break;/键值为2的按键按下case 0 xe7:key=12;break;/键值为3的按键按下 while(temp!=0 x0f)/等待按键释放,即P0高四位恢复 高电位,结束循环,temp=P0;temp=temp/显示键值,P0=0 xdf;/扫描第一行temp=P0;/P0状态送给变量temptemp=tempif(temp!
20、=0 x0f),temp=P0;switch(temp)case 0 xde:key=1;break;case 0 xdd:key=5;break;case 0 xdb:key=9;break;case 0 xd7:key=13;break;,while(temp!=0 x0f)/等待按键释放temp=P0;temp=temp/显示键值,P0=0 xbf;/扫描第一行temp=P0;/P0状态送给变量temptemp=temp,temp=temp,while(temp!=0 x0f)/等待按键释放temp=P0;temp=temp/显示键值,P0=0 x7f;/扫描第一行temp=P0;/P0
21、状态送给变量temptemp=tempif(temp!=0 x0f),temp=P0;switch(temp)case 0 x7e:key=3;break;case 0 x7d:key=7;break;case 0 x7b:key=11;break;case 0 x77:key=15;break;,while(temp!=0 x0f)/等待按键释放temp=P0;temp=temp/显示键值,在KEIL软件中输入上述代码,编译后产生十六进制文件7-6-1.hex,双击AT89C51,将弹出如图7.6.2所示的对话框。在图7.6.2中添加十六进制文件7-6-1.hex,点击“OK”即可。最后进行
22、仿真,若按键S0按下,数码管显示的数字为“0”;若按键S1按下,数码管显示的数字为“1”;若按键S2按下,数码管显示的数字为“2”,以此类推,若按键S15按下,数码管显示的数字为“F”。,图7.6.2 添加十六进制文件,7.7 模拟交通灯控制实训(1)正常情况下双方向轮流点亮信号灯。信号灯的状态如表7.7.1所示。(2)有紧急车辆通过时,A、B方向均亮红灯。本实训主要是定时控制东南西北四个方向上的12盏交通信号灯,并且出现紧急情况时,能及时调整交通灯指示状态。,观察表7.7.1不难发现,在不考虑左转弯行驶车辆的情况下,东、西两个方向的信号灯的显示状态是一样的,所以对应两个方向上的6个发光二极管
23、只用P1口的3根I/O口线控制即可。同理,南、北方向上的6个发光二极管可用P1口的另外3根I/O口线控制。当I/O口线输出高电平时,对应的交通灯灭;反之,当I/O口线输出低电平时,对应的交通灯亮。各控制口线的分配以及控制状态如表7.7.2所示。,根据上述分析,模拟交通灯控制实训图如图7.7.1所示,所用元件清单如表7.7.3所示。,表7.7.3 模拟交通灯控制实训元件清单,图7.7.1 模拟交通灯控制实训图,按键S1模拟紧急情况发生,当S1为高电平(不按按键)时表示正常情况,S1为低电平(按下按键)时表示紧急情况。S1按键接至(P3.2)脚可实现外部中断0中断申请,实现A、B方向双向红灯显示。
24、,其程序代码为:#includeunsigned char t0,t1;void delay0_5s()for(t0=0;t010;t0+)TH1=0 x3c;TL1=0 xb0;TR1=1;while(!TF1);TF1=0;,void delay_t1(unsigned char t)for(t1=0;t1t;t1+)delay0_5s();void int_0()interrupt 0,unsigned char i,j,k,l,m;i=P1;j=t0;k=t1;l=TH1;m=TH0;P1=0 xdb;delay_t1(20);,P1=i;t0=j;t1=k;TH1=1;TH0=m;v
25、oid main(),unsigned char k;TMOD=0 x10;EA=1;EX0=1;IT0=1;while(1)P1=0 xf3;delay_t1(10);for(k=0;k3;k+),P1=0 xf3;delay0_5s();P1=0 xfb;delay0_5s();P1=0 xeb;delay_t1(4);P1=0 xde;delay_t1(10);for(k=0;k3;k+),P1=0 xde;delay0_5s();P1=0 xdf;delay0_5s();P1=0 xdd;delay_t1(4);,在KEIL软件中输入上述代码,编译后产生十六进制文件7-7-1.hex,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- proteus 单片机

链接地址:https://www.desk33.com/p-242193.html