c语言一个按键控制8个流水灯,P1口外接8个LED,通过按键控制,实现左右移动的流水灯…

//用P1口外接8个LED,可以做成一个最常见的流水灯。

//灯光闪烁的时间间隔,可以使用软件延时,也可以使用定时器来控制。

//如果增加一个按键,则还可以控制灯的移动方向。

//电路如下:

0818b9ca8b590ca3270a3433284dd417.png

//图片链接: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进行处理,非常感谢!

上一篇 2021年4月16日
下一篇 2021年4月16日

相关推荐