void main() {
temp=0xfe; //赋初值11111110
P1=temp; //先点亮第一个发光二极管 while(1) //大循环
{
for(i=7;i>0;i--) //控制亮点从低位往高位移动7次 {
delay(500); //延时500毫秒
temp=_crol_(temp,1); //将temp循环左移一位后再赋给temp
P1=temp; //将移位后的值赋给P1口,从低位到高位逐个点亮发光二极管
}
for(j=7;j>0;j--) //控制亮点从高位往低位移动7次 {
delay(500); //延时500毫秒
temp=_cror_(temp,1); //将temp循环右移一位后再赋给temp
P1=temp; //将移位后的值赋给P1口,从高位到地位逐个点亮发光二极管
}
}
}
void delay(int z) { }
(2)生成目标代码文件
在KEIL软件中,编译C语言源程序,生成目标代码文件,本例中为
unsigned int x,y;
for(x=z;x>0;x--) //延时z毫秒
for(y=110;y>0;y--);
pingpang.hex。
2.2.3 步骤三:PROTEUS仿真
加载目标代码文件,双击编辑窗口的AT89C51器件,在弹出属性编辑对话框Program File一栏中单击打开按钮
,出现文件浏览对话框,找到pingpang.hex
,启动仿真,仿真运
文件,单击“打开”按钮,完成添加文件。单击按钮
行片段如图5-15所示。通过AT89C52单片机控制8个发光二极管,实现亮点由低位到高位再由高位到低位来回流动的乒乓球效果。
图5-15流水灯乒乓效果运行片段
2.4 扩展练习
此子情境中流水灯在同一时刻只显示一盏灯,现在完成同时亮着两个灯流动的效果。
子情境三:数码管动态扫描
3.1子情境内容:利用动态扫描让四位数码管稳定的显示1234。 3.2 子情境目标:
(1)掌握单片机控制四位数码管的动态扫描技术,包括程序设计和电 路设计,本任务的效果是让四位数码管稳定的显示1234。
(2)用PROTEUS进行电路设计和实时仿真 3.3 知识点链接
(1)数码管动态扫描 (动态扫描的定义以及与静态显示的区别) 动态显示的特点是将所有位数码管的段选线s一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
(2)总线的应用 元器件与总线的连线
P0口的接线采用总线方式,详细如图5-17所示。 ① 选择总线按钮
② 绘制总线:与普通电线的绘制方法一样,选择合适的起点、终点单击。 如果终点在空白处,左键双击结束连线。
画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线。此时我们需要自己决定走线路径,只需在想要拐点处单击鼠标左键即可。在画斜线时,需要关闭线路自动路径功能才好绘制。
Proteus的线路自动路径功能简称WAR,当选中两个连接点后,WAR将选择一个合适的路径连线。WAR可通过使用标准工具栏里的“WAR”命令按钮闭或打开,也可以在菜单栏的“Tools”下找到这个图标。
③ 给与总线连接的导线贴标签PART LABELS
与P0口相连的线标签名依次为P00—P06,本电路中的P0口的上拉电阻通过总线与P0口相连,数码管也是通过总线与P0口相连,这些都需要标注,以表明正确的电气连接。单击绘图工具栏中的导线标签按钮
,使之处于选中状态。
来关
将鼠标置于图形编辑窗口的欲标标签的导线上,跟着鼠标的指针就会出现一个
“×”号,表明找到了可以标注的导线,单击鼠标左键,弹出编辑导线标签窗口,如图5-16所示。
在“string”栏中,输入标签名称(如p00),单击“OK”按钮,结束对该导线的标签标定。同理,可以标注其它导线的标签,如图5-16所示。
注意,在标定导线标签的过程中,相互接通的导线必须标注相同的标签名。
图5-16编辑导线标签窗口
3.4 任务步骤
3.4.1 步骤一:PROTEUS电路设计,单片机控制四位共阴极数码管动态扫描显示的原理图如图5-17所示。
图5-17 四位共阴极数码管动态扫描显示的原理图
1、选取元器件
①单片机:AT89C52
②带公共端的排阻:RESPACK-8 ③四位共阴极数码管:7SEG-MPX4-CC
2、放置元器件、放置电源和地、连线、元器件属性设置
数码管动态扫描显示的原理图如图5-17所示,整个电路设计操作都在ISIS