51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序

51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序51单片机中用一个按钮控制8个流水灯用移位法做怎么写程序呢?程序运行时,8个流水灯先是灭的状态,按一下按钮,8个流水灯依次亮,再按一下按钮停止跳动,灭的状态这里是一个基本的例子,演示了如何使用51单片机(如AT89C51)编写程序来实现上述功能。在这个例子中,我们使用一个外部中断0(INT0)连接到

51单片机中用一个按钮控制8个流水灯用移位法做怎么写程序呢?   程序运行时,8个流水灯先是灭的状态,按一下按钮,8个流水灯依次亮,再按一下按钮停止跳动,灭的状态   这里是一个基本的例子,演示了如何使用51单片机(如AT89C51)编写程序来实现上述功能。在这个例子中,我们使用一个外部中断0(INT0)连接到按钮,使其在按下时触发。8个流水灯连接到单片机的P1口。使用移位法,我们可以很容易地实现所需的功能。   #include <reg51.h>   // 定义变量和宏   sbit button = P3^2; // 假设按钮连接到P3.2   unsigned char flag = 0; // 用于表示按下按钮次数的标志   unsigned char leds = 0x00; // 存储LED状态的变量   // 延时函数   void delay_ms(unsigned int ms) {   unsigned int i, j;   for (i = ms; i > 0; i–)   for (j = 113; j > 0; j–);   }   // 外部中断0(INT0)服务函数   void int0_isr(void) interrupt 0 {   delay_ms(20); // 消抖延时   if (!button) { // 如果按钮被按下   flag++; // 增加标志值   }   }   void main() {   button = 1; // 设置按钮为输入   IT0 = 1; // 设置INT0触发方式为下降沿   EX0 = 1; // 使能INT0中断   EA = 1; // 使能总中断   while (1) {   switch (flag % 3) {   case 0: // 灭的状态   leds = 0x00;   P1 = leds;   break;   case 1: // 流水灯依次亮   leds = (leds == 0x80) ? 0x01 : (leds << 1);   P1 = leds;   delay_ms(200);   break;   case 2: // 停止跳动   break;   }   }   }   这个程序应该实现了你所要求的功能。当然,根据实际硬件连接,你可能需要对程序中的引脚定义和延时函数进行调整。   这个。。有点简单。   因为我工作中只用到32,51早忘了,所以简单写写。   for(;;){   P1=0x01;   for(int i =0;i<8;i++){   P1=P1<<1;   delay_ms(100);   }   }   }   去买一个开发板,40上下的那种,把例程过一遍,之后有问题先看看例程再来问问题   伸手党都跑来这里问问题了,奇葩   基于51单片机的流水灯【8位,8模式,8255】(仿真)
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序   资料包括:
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序   原理图:
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序   仿真:
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序   程序运行图:
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序
51单片机流水灯左移右移程序汇编_单片机流水灯左右来回移动程序   #include “lcd1602.h”   void delay_uint(uint i)   {   while(i–);   }   /   * 名称 : write_com(uchar com)   * 功能 : 1602命令函数   * 输入 : 输入的命令值   * 输出 : 无   */   void write_com(uchar com)   {   e=0;   rs=0;   rw=0;   P0=com;   delay_uint(20);   e=1;   delay_uint(20);   e=0;   }   /   * 名称 : write_data(uchar dat)   * 功能 : 1602写数据函数   * 输入 : 需要写入1602的数据   * 输出 : 无   */   void write_data(uchar dat)   {   e=0;   rs=1;   rw=0;   P0=dat;   delay_uint(20);   e=1;   delay_uint(20);   e=0;   }   /   * 名称 : write_string(uchar hang,uchar add,uchar *p)   * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示”ab cd ef” ,调用该函数如下   write_string(1,5,”ab cd ef;”)   * 输入 : 行,列,需要输入1602的数据   * 输出 : 无   */   void write_string(uchar hang,uchar add,uchar *p)   {   if(hang==1)   write_com(0x80+add);   else   write_com(0x80+0x40+add);   while(1)   {   if(*p == ‘\0’) break;   write_data(*p);   p++;   }   }   /   * 名称 : init_1602()   * 功能 : 初始化1602液晶   * 输入 : 无   * 输出 : 无   */   void init_1602()   {   write_com(0x38); //数据总线为8位,显示2行,5×7点阵   write_com(0x0c); //开显示,有光标,光标闪烁   write_com(0x06); //光标自动右移   delay_uint(1000); //等待设置完成   }

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/30760.html

(0)
上一篇 2024年 9月 11日
下一篇 2024年 9月 11日

相关推荐

关注微信