实验1: 最简单的八路跑马灯
本例实验主要用到了延时子程序,clr ,lcall ,ajmp 指令, 通过轮流点亮p1.0 …..P1.7 实现效果。用户可以通过此程序的学习, 初步掌握单片机的IO 端口操作。
练习1: 怎样把延时的时间改为更短, 或者更长?
练习2: 怎样用P0,P2,P3端口来操作?
练习3: 怎样实现不同的跑马花样?
相关原理图:
程序运行照片:
接线方法: 用一条8PIN 的数据排线把CPU 部份的P1口(JP44)连接到八路指示灯部份的JP32 接线图以及运行瞬间的照片(可以看到8路指示灯轮流点亮)
程序流程图:
汇编语言参考程序:
org 0000h ;开始
ajmp loop
org 0080h ;到0030h 处避开00-30的敏感地址
loop:
mov p1,#0ffh ;关闭所有灯
clr p1.0 ;点亮灯p1.0
lcall delay ;延时一段时间?
clr p1.1 ;点亮灯p1.1
lcall delay
clr p1.2 ;点亮灯p1.2
lcall delay
clr p1.3 ;点亮灯p1.3
lcall delay
clr p1.4 ;点亮灯p1.4
lcall delay
clr p1.5 ;点亮灯p1.5
lcall delay
clr p1.6 ;点亮灯p1.6
lcall delay
clr p1.7 ;点亮灯p1.7
lcall delay
AJMP LOOP ;到最开始loop 处重新运行
delay: mov r5,#20 ;延时。
d1: mov r6,#40
d2: mov r7,#248
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
c 语言参考程序:
#include //头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
#define LED P1 //宏定义,将P1口定义为LED
uchar led_value[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00}; //定义一数组,内存放跑马灯数据
uchar *p=led_value; //定义指针,指向跑马灯数组首地址
void delay() //延迟函数,与跑马灯跳动频率有关
{
uchar ii,jj;
for(ii=0;ii
for(jj=0;jj
}
void run_led() //跑马灯运行函数
{
while(*p!=0x00)
{
LED=*p; //将数组中数据取出赋给P1口 p++; //预取下一数据
delay(); //延迟
}
p=led_value;
}
char code SST516[3] _at_ 0x003b; //仿真器保留 main() //主函数
{
while(1)
run_led(); //上电即运行跑马灯程序
}
实验1: 最简单的八路跑马灯
本例实验主要用到了延时子程序,clr ,lcall ,ajmp 指令, 通过轮流点亮p1.0 …..P1.7 实现效果。用户可以通过此程序的学习, 初步掌握单片机的IO 端口操作。
练习1: 怎样把延时的时间改为更短, 或者更长?
练习2: 怎样用P0,P2,P3端口来操作?
练习3: 怎样实现不同的跑马花样?
相关原理图:
程序运行照片:
接线方法: 用一条8PIN 的数据排线把CPU 部份的P1口(JP44)连接到八路指示灯部份的JP32 接线图以及运行瞬间的照片(可以看到8路指示灯轮流点亮)
程序流程图:
汇编语言参考程序:
org 0000h ;开始
ajmp loop
org 0080h ;到0030h 处避开00-30的敏感地址
loop:
mov p1,#0ffh ;关闭所有灯
clr p1.0 ;点亮灯p1.0
lcall delay ;延时一段时间?
clr p1.1 ;点亮灯p1.1
lcall delay
clr p1.2 ;点亮灯p1.2
lcall delay
clr p1.3 ;点亮灯p1.3
lcall delay
clr p1.4 ;点亮灯p1.4
lcall delay
clr p1.5 ;点亮灯p1.5
lcall delay
clr p1.6 ;点亮灯p1.6
lcall delay
clr p1.7 ;点亮灯p1.7
lcall delay
AJMP LOOP ;到最开始loop 处重新运行
delay: mov r5,#20 ;延时。
d1: mov r6,#40
d2: mov r7,#248
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
c 语言参考程序:
#include //头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
#define LED P1 //宏定义,将P1口定义为LED
uchar led_value[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00}; //定义一数组,内存放跑马灯数据
uchar *p=led_value; //定义指针,指向跑马灯数组首地址
void delay() //延迟函数,与跑马灯跳动频率有关
{
uchar ii,jj;
for(ii=0;ii
for(jj=0;jj
}
void run_led() //跑马灯运行函数
{
while(*p!=0x00)
{
LED=*p; //将数组中数据取出赋给P1口 p++; //预取下一数据
delay(); //延迟
}
p=led_value;
}
char code SST516[3] _at_ 0x003b; //仿真器保留 main() //主函数
{
while(1)
run_led(); //上电即运行跑马灯程序
}