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】(仿真)
资料包括:
原理图:
仿真:
程序运行图:
#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/29030.html