完成自己生日(8位)的电路设计、编程和仿真
一、电路设计
1.1 将所需元器件加入到对象选择器
(1)添加AT89C51
弹出“Pick Devices”页面,在“Keywords”输入AT89C51,结果显示在“Result”中,在“Result”栏中的列表项中,双击“AT89C51”。将“AT89C51”添加至对象选择器窗口。
(2)添加LED显示器
在“Keywords”栏中重新输入 7SEG,双击“7SEG-MPX8-CA-BLUE”,则可将“7SEG-MPX8-CA-BLUE”(8位共阴7段LED显示器)添加至对象选择器窗口。
(3)添加电阻
在“Category”栏中选中“Resistors”,在“Sub-category”栏中选中“Generic”。在“Result”中双击“RES”,则可将“RES”(电阻)添加至对象选择器窗口。单机“OK”按钮,结束对象选择。
经过以上操作,在对象选择器窗口中,已经有了AT89C51、7SEG-MPX8-CC-BLUE 、RES 三个元器件对象,若单击可以进行预览实物图。注意显示屏的选择,与后面的代码是对应的。
1.2 放置元器件至图形编辑窗口
在对象选择器窗口中,选中7SEG-MPX8-CC-BLUE,将鼠标置于图形编辑窗口该对象的预放置位置、单击鼠标左键,该对象被完全放置。同理将其余元器件放置到图形编辑窗口中。
由于电阻R1-R8的型号和电阻值均相同,因此可利用复制功能。如此反复进行复制。此时,电阻名的标识,系统自动加以区分。
1.3 放置总线以及元器件之间的连接
画总线的时候为了和一般的导线区分,一般画斜线来表示分支线。注意,在标定导线的过程中,相互接通的导线必须标注相同的标签名。
至此,电路设计部分结束。
二、核心程序编写
2.1解析代码含义
注意!例子我使用的是共阴极
在这里声明一下:文中“//”后表示注释
打开软件keil C51,点击“project”-“new uvision project”来进行新建工程,将try.asm文件添加到工程中。编写如下代码:
ORG 0000H//ORG是个用于定位的伪指令。
AJMP MAIN//短跳转指令
ORG 0080H
MAIN:
CLR P2.0//就是将该IO口清零的意思,置为低电平(这里是指P2.0)
MOV P1,#06H//赋值,对应图片上的数字“1”
LCALL DELAY//跳转语句,指跳转到DELAY
MOV P1,#0H//赋值
SETB P2.0//就是将该IO口置一
//1
CLR P2.1//这里就指图上的P2.1管脚了,也就是从左往右数的第二个数字
MOV P1,#6FH
LCALL DELAY
MOV P1,#0H
SETB P2.1
//2
CLR P2.2
MOV P1,#6FH
LCALL DELAY
MOV P1,#0H
SETB P2.2
//3
CLR P2.3
MOV P1,#0FFH
LCALL DELAY
MOV P1,#0H
SETB P2.3
//4
CLR P2.4
MOV P1,#06H
LCALL DELAY
MOV P1,#0H
SETB P2.4
//5
CLR P2.5
MOV P1,#86H
LCALL DELAY
MOV P1,#0H
SETB P2.5
//6
CLR P2.6
MOV P1,#3FH
LCALL DELAY
MOV P1,#0H
SETB P2.6
//7
CLR P2.7
MOV P1,#7DH
LCALL DELAY
SETB P2.7
MOV P1,#0H
//8
AJMP MAIN//(注意!这里要开始讲延时了)
DELAY: MOV R7,#2//给R7赋值2
LOOP1: MOV R6,#25//这行叫LOOP1,给R6赋值25
LOOP2: DJNZ R6,LOOP2//先将工作寄存器Rn中的数减“1”,判断结果是否为
DJNZ R7,LOOP1//“0”,不为“0”程序就跳转到行标为逗号后面的地方执行,
RET//(这里有LOOP1和LOOP2)为“0”就不转移,继续执行下一条指令。
END//上面三行的注释要一起看
编写完代码后,设置生成try.HEX机器码文件。至此,代码编写部分结束。
三、进行电路仿真
打开Proteus,选中at89c51按下键盘的“ctrl+e”将try.hex文件导入仿真软件中。
点击下方菜单栏的第一个按钮开始仿真。
可见到结果如下:
最后,此篇文章只是简单解释了一部分代码的含义,以及部分简单的运行过程。
link这里是较为全面的,共阴共阳级、显示加与不加小数点的代码,仅供参考。
link这里是联调方法