//用P1口外接8个LED,可以做成一个最常见的流水灯。
//灯光闪烁的时间间隔,可以使用软件延时,也可以使用定时器来控制。
//如果增加一个按键,则还可以控制灯的移动方向。
//电路如下:

//图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/88bc05255ad6470b8644f9b4.html
//系统中,定时和按键,都采用了中断方式。即采用定时器0中断来控制延时时间,用外部中断0进行方向控制;
//通过按下按键,可以使左移、右移交替显示。
//为了练习C语言使用中断系统,控制软件采用C语言编制。
//程序如下:
//——————————————-
#include
#include
unsigned char i = 0, temp;
unsigned char bdata j; //在位寻址区定义字节变量
sbit j0 = j ^ 0; //定义位变量
//——————————————-
void main(void)
{
TMOD = 0x01; //设定T0定时方式1
TH0 = (65536 – 10000) / 256; //定时
TL0 = (65536 – 10000) % 256;
TR0 = 1;
ET0 = 1; //允许T0中断
PT0 = 1; //设定T0为高优先级
IT0 = 1; //外部中断输入下降沿有效
EX0 = 1; //允许X0中断
EA = 1; //开放总中断
temp = 0xfe; P1 = temp; while(1);}//——————————————-void T0_int(void) interrupt 1 //每隔10ms执行一次{ TH0 = (65536 – 10000) / 256; //定时 TL0 = (65536 – 10000) % 256; i++; if(i >= 100) { i = 0; if(j0 == 0) temp = _crol_(temp, 1); if(j0 == 1) temp = _cror_(temp, 1); P1 = temp;} }//——————————————-void X0_int(void) interrupt 0 using 1{ unsigned char k; j0 = ~j0; //改变运动方向 for(k = 200; k > 0; k–); //延时一会再退出,以避免抖动}//===========================================================下面是用汇编语言编写的控制程序,效果与C语言相同。 ORG 0000H SJMP START ORG 0003H SJMP X0_INT ORG 000BH SJMP T0_INT;——————————————-START: MOV TMOD, #01H MOV TH0, #(65536 – 50000) / 256; //定时 MOV TL0, #(65536 – 50000) MOD 256; //定时 SETB TR0 SETB ET0 SETB IT0 SETB EX0 SETB PT0 SETB EA MOV R3, #20 MOV R2, #7FH MOV P1, R2 SJMP $;——————————————-X0_INT: CPL F0 JNB P3.2, $ ;等待按键释放 RETI;——————————————-T0_INT: MOV TL0, #(65536 – 50000) MOD 256; //定时 MOV TH0, #(65536 – 50000) / 256; //定时 DJNZ R3, T0_END MOV R3, #20 MOV A, R2 JNB F0, DDD RL A SJMP EEEDDD: RR AEEE: MOV R2, A MOV P1, AT0_END: RETI;——————————————- END//===========================================================
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113149 人正在系统学习中 相关资源:专业LED灯光动画制作软件(安装后直接用!)_setup安装包-Delphi工具…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!