Us_tini_an_ 2021-10-13 20:11 采纳率: 0%
浏览 105

用C语言对流水灯进行中断设计

img


这个是单片机实验的中断程序的设计,需要用C语言进行编写,对于这个中断,在上课的讲解不是很全面,所有求教学

  • 写回答

1条回答 默认 最新

  • 炸弹气旋 2023-05-30 09:00
    关注

    下面是在没有开发板的情况下手撸的一个含有中断的流水灯示例程序,其中包括中断服务函数,和主函数

    
    #include <REG52.H>
    
    unsigned char led = 0xFE;  // 初始LED状态为11111110
    
    void delay(unsigned int t)  // 延时函数
    {
        unsigned int i, j;
        for (i = 0; i < t; i++)
            for (j = 0; j < 125; j++);
    }
    
    void LED() interrupt 0  // 中断服务函数
    {
        if (led == 0x7F)  // 如果已经到达最后一个LED
            led = 0xFE;  // 则重新从第一个LED开始
        else
            led = (led << 1) | 0x01;  // 否则向左移动一个LED
    
        P1 = led;  // 更新LED状态
    
        delay(500);  // 延时一段时间,以便观察效果
    }
    
    void main()
    {
        EA = 1;  // 全局中断使能
        EX0 = 1;  // 外部中断0使能
        IT0 = 1;  // 外部中断0设置为下降沿触发
    
        while (1);  // 等待中断
    }
    
     此代码默认为51单片机,若使用其他的单片机还需配置相关LED的GPIO引脚等操作,不过大体流程如此。
    

    首先使用了外部中断0来触发LED流水灯的移动。当用户按下外部中断0所连接的按键时,处理器将暂停当前工作并执行中断服务函数LED(),在该函数中实现LED流水灯的移动。当LED流水灯移动到最后一个LED时,LED状态重新设置为初始状态,从第一个LED开始向左移动,到此板子上的led就实现了流水灯的效果。
    码字幸苦,望采纳!!!!

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 10月13日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同