单片机交通灯矩阵键盘等实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一单片机仿真软件使用(排序) 一.实验目的
1.掌握wave软件的使用方法
2.掌握单步调试方法
二.实验内容
编写一段汇编程序,将70H,71H,72H单元无符号数排序(由大到小)三.编程
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
;CLR C ;标志位清零.
MOV 70H,#09FH ;随机赋初始值
MOV 71H,#0F2H
MOV 72H,#032H
MOV A, 70H
SUBB A, 71H ;(70H)<(71H),Cy=1,否则Cy=0
JNC LOOP1 ;Cy=0,跳转
MOV A, 70H ;Cy=1,交换(70H),(71H)
XCH A, 71H
MOV 70H,A
LOOP1: MOV A, 70H ;
SUBB A, 72H ;(70H)<(72H),Cy=1,否则Cy=0
JNC LOOP2 ;Cy=0,跳转
MOV A, 70H ;Cy=1,交换(70H)(72H)
XCH A, 72H
MOV 70H,A
LOOP2: MOV A, 71H ;
SUBB A, 72H ;(71H)<(72H),Cy=1,否则Cy=0
JNC LOOP3 ;Cy=0,跳转
MOV A, 71H ;Cy=1,交换m(71H),(72H)
XCH A, 72H
MOV 71H,A
LOOP3: END
四.仿真效果图
实验二流水灯
一.实验目的
1.掌握proteus软件使用
2.掌握汇编程序仿真调试方法
二.实验内容
设计一个流水灯,并用仿真软件仿真。
三.编程
ORG 0000H
SJMP START
ORG 0030H
START:
JB P3.3,$
JNB P3.2,$
MOV A,#0FEH ;A中先装入LED1亮的数据(二进制的11111110)
MOV P1,A ;将A的数据送P1口
MOV R0,#7 ;将数据再移动7次就完成一个8位流水过程
LOOP: RL A ;将A中的数据左移一位
MOV P1,A ;把A移动过的数据送p1口显示
ACALL DELAY ;调用延时子程序
DJNZ R0,LOOP ;没有移动够7次继续移动
AJMP START ;移动完7次后跳到开始重来,以达到循环流动效果
DELAY: MOV R0,#255 ;延时一段时间
D1: MOV R1,#255
DJNZ R1,$
DJNZ R0,D1
RET ;子程序返回
END ;程序结束
四.仿真图
实验三交通灯
一.实验目的
通过对模拟交通灯控制系统的制作,掌握定时器和中断系统的综合应用,进一步熟
练软,硬件联调方法。
二.实验内容
设计并实现单片机交通灯控制系统
三.编程
ORG 80H
SJMP START
ORG 0030H
START:MOV P1,#21H ;红1绿2亮
LCALL YS1MIN ;延时
MOV P1,#11H ;红1黄2亮
LCALL YS5S ;延时
MOV P1,#0CH ;红2绿1亮
LCALL YS1MIN ;延时
MOV P1,#0AH ;红2黄1亮
LCALL YS5S ;延时
LJMP START ;跳回,循环
YS1MIN:MOV R7,#30 ;延时子程序
LOOP1:LCALL YS1S
DJNZ R7,LOOP1
RET
YS5S: MOV R7,#5
LOOP2:LCALL YS1S
DJNZ R7,LOOP2
RET
YS1S: MOV R5,#0FAH
LOOPA:MOV R6,#0FAH
LOOPB:NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6, LOOPB
DJNZ R5, LOOPA
RET
END
四.仿真图
实验三方波发生器
一、实验内容
单片机的晶振频率为12兆赫兹,要求在P2.0引脚上输出周期为2毫秒的方波
二、实验目的
1掌握proteus软件使用
2掌握汇编程序仿真调试方法
三、程序清单
ORG 0000H
SJMP START
ORG 001BH
SJMP T1INT
START: MOV SP,#60H
MOV TMOD,#10H
MOV TH1,#0FCH
MOV TL1,#18H 四、仿真图
五、矩阵键盘
二、实验目的
1 掌握proteus软件使用
2 掌握汇编程序仿真调试方法
三、实验内容
设计一个矩阵键盘能实现计算功能
四、程序清单
#include
#define uchar unsigned char
#define uint unsigned int
uchar num,a,b,c,d,x,key,k,q;
void delayms(uint);
uchar qingling(uchar);
uchar qingling1(uchar);
void display(uchar a,uchar b,uchar c,uchar d,uchar key)
{
uchar u;
if(d==1) //按下等于号之后进行计算
{
switch(c)
{
case 1:
P0=a+b;
break;
case 2:
P0=a-b;
break;
case 3:
P0=a*b;
break;
case 4:
P0=a/b;
break;
}
}
else
P0=key;
u=P0/10; //简易16进制转换10进制
if(P0<10)
P0=P0;
else
P0=P0+6*u;
}
uchar qingling() //清零子函数
{
a=0;
b=0;
c=0;