c语言利用中断系统控制流水灯,P1口外接8个LED,通过按键控制,实现左右移动的流水灯...

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

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言实现 74HC165 驱动 8 个 LED 灯循环点亮的步骤如下: 1. 配置引脚方向。将 74HC165 的时钟引脚(CLK)、串行数据引脚(SER)和输出使能引脚(OE)连到微控制器的引脚上,并将这三个引脚的方向设为输出方向;将 8 个 LED 灯的引脚连到 74HC165 的 8 个输出引脚上,并将这 8 个引脚的方向设为输出方向。 2. 初始化 74HC165。将 CLK 引脚和 SER 引脚都拉高电平,然后将 OE 引脚拉低电平,使 74HC165 开始工作。 3. 在一个循环中不断改变输入信号的值,并将其输入到 74HC165 的串行数据引脚上。 4. 读取 74HC165 的并行输出数据,来控制 LED 灯的亮灭状态。 下面是一个简单的汇编语言实现示例,实现 8 个 LED 灯的循环点亮: ```assembly .equ DATA_PIN = 0 ; 定义数据引脚的编号为0 .equ CLK_PIN = 1 ; 定义时钟引脚的编号为1 .equ OE_PIN = 2 ; 定义输出使能引脚的编号为2 .equ LED_PORT = PORTB ; 定义 LED 灯的引脚所在的端为 PORTB .org 0x0000 ; 程序地址 reset: ; 配置引脚方向 sbi DDRB, DATA_PIN ; 将数据引脚方向设为输出方向 sbi DDRB, CLK_PIN ; 将时钟引脚方向设为输出方向 sbi DDRB, OE_PIN ; 将输出使能引脚方向设为输出方向 sbi DDRD, 0 ; 将 LED 引脚方向设为输出方向 ; 初始化 74HC165 sbi PORTB, CLK_PIN ; 将时钟引脚拉高电平 sbi PORTB, DATA_PIN ; 将数据引脚拉高电平 cbi PORTB, OE_PIN ; 将输出使能引脚拉低电平 loop: ; 循环移位,改变输入信号的值 rol r16 ; 将数据寄存器 r16 的值左移一位,并将最高位填充到最低位 out PORTB, r16 ; 将数据寄存器 r16 的值输出到数据引脚 ; 产生一个上升沿,时钟信号 sbi PORTB, CLK_PIN ; 将时钟引脚拉高电平 cbi PORTB, CLK_PIN ; 将时钟引脚拉低电平 ; 读取并行输出数据,控制 LED 灯的亮灭状态 in r16, PIND ; 将 LED 引脚的状态读取到数据寄存器 r16 中 eor r16, 0xFF ; 将数据寄存器 r16 的值与 0xFF 做异或运算,反转所有位的状态 out LED_PORT, r16 ; 将数据寄存器 r16 的值输出到 LED 灯所在的端 rjmp loop ; 跳转到 loop 标签,开始下一轮循环 ``` 需要注意的是,以上代码仅仅是一个简单的示例,实际应用中需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值