基于单片机仿真软件 Proteus 的流水灯实验报告 一、实验目的: 1. 熟练掌握单片机仿真软件 Proteus 使用方法和注意事项。 2. 了解简单单片机应用系统的设计方法。 3. 帮助学生养成良好实验习惯。 二、实验内容: 本实验内容是使用单片机仿真软件 Proteus 实现 8 个发光 LED 的流水灯现象,实现两个流水灯情况: 1. 先奇数灯亮,再偶数灯亮。 2. 实现流水灯从两边向中间亮,再从中间到两边亮。 三、实验说明: 依照实验的硬件电路原理,在单片机仿真软件 Proteus 上进行硬件电路的模拟,然后进行实验。在发光二极管两次点亮的间隔中加延时程序,让每次点亮停留一段时间,人眼就可以看到流水的现象。 四、实验环境: 硬件:PC 机; 软件:单片机仿真软件 Proteus。 五、实验原理图: 实验原理图是单片机仿真软件 Proteus 的流水灯实验电路图,展示了 8 个 LED 的连接方式和单片机的控制逻辑。 六、实验参考程序: 实验参考程序是使用 C 语言编写的,使用单片机仿真软件 Proteus 进行编译和模拟。程序的主要内容是控制 8 个 LED 的流水灯现象,包括奇数灯亮、偶数灯亮、流水灯从两边向中间亮和从中间到两边亮等。 #include #include void delay_ms(int n) // 延时 n 毫秒 { int i, j; for (i = 0; i < n; i++) for (j = 0; j < 110; j++); } void main() { int i, num; unsigned char p1; unsigned char p0, p; while (1) { for (i = 0; i < 3; i++) // 间隔 500ms 先奇数亮再偶数亮,循环三次 { P1 = 0xaa; P0 = p1; delay_ms(500); P1 = 0x55; P0 = p1; delay_ms(500); } p1 = 0xfe; num = 3; while (num-- > 0) // 一个灯上下循环三次 { for (i = 0; i < 8; i++) { P0 = p1; delay_ms(100); p1 = _cror_(p1, 1); } } // 两个分别从两边往中间流动三次 p1 = 0xfe; p0 = 0x7f; num = 3; while (num-- > 0) { for (i = 0; i < 4; i++) { p1 = _crol_(p1, 1); p0 = _cror_(p0, 1); p = p1 & p0; delay_ms(100); P1 = p; P0 = p; } } // 再从中间往两边流动三次 p1 = 0xef; p0 = 0xf7; num = 3; while (num-- > 0) { for (i = 0; i < 4; i++) { p1 = _crol_(p1, 1); p0 = _cror_(p0, 1); p = p1 & p0; delay_ms(100); P1 = p; P0 = p; } } // 8 个全部闪烁 3 次 num = 3; while (num-- > 0) { p1 = 0; delay_ms(500); p1 = 1; delay_ms(500); } break; } } 七、实验结论: 通过本实验,我们掌握了单片机仿真软件 Proteus 的使用方法和注意事项,并了解了简单单片机应用系统的设计方法。同时,我们也学习了如何使用 C 语言编写程序控制流水灯现象。
2024-06-16 13:24:16 1.46MB
1
本实验利用4个按键,当KEY0按下时,P0口所接的发光二极管(LED3~LED10)以100ms的时间间隔自上至下循环点亮3圈,当KEY1按下时,以200ms的时间间隔自下至上循环点亮3圈;当KEY2按下时,8个LED闪烁3次,时间间隔为500ms;当KEY3按下时,发光二极管全部点亮3秒后熄灭。平时LED的状态为全部熄灭。
2023-11-04 21:22:30 506KB 51单片机 流水灯 IO控制
1
该程序介绍的是基于stm32f103zet6的流水灯实验程序,包括直接使用库函数操作,使用寄存器操作,以及采用自定义宏操作实现。
2023-04-07 09:51:07 5.76MB 流水灯实验
1
包括proteus仿真图用汇编语言编写的程序
2022-05-11 22:18:16 25KB 单片机实验
1
AT89C51流水灯实验proteus仿真源文件(含C程序源码),包含proteus工程源文件,单片机C语言程序。proteus8.6可正常打开,仿真。
2022-04-20 22:27:01 88KB 流水灯 AT89C51
这个是关于嵌入式流水灯的代码。通过这个代码可以实现你的流水灯活动。
2022-03-25 16:41:14 106KB 流水灯
1
一、创建工程 1.点击创建新工程,输入工程名、安装路径。 原创文章 2获赞 0访问量 102 关注 私信 展开阅读全文 作者:学者-老栋
2022-03-20 10:54:05 41KB te
1
用verilog语言编写的流水灯程序,已经在altera cyclone IV板子是测试成功。程序里用了4个LED灯。流水灯流动的速度可以自己设定。
2021-12-26 15:16:00 3KB 流水灯
1
硬件课程设计流水灯实验报告,附加操作流程和代码。 电子设计实验报告,硬件课程设计报告,花样流水灯。 花样流水灯的原理图,硬件设备,连线图手把手教程附加源码。
2021-12-13 15:19:18 4.4MB 设计报告
1
Spartan 6 FPGA 设计经典流水灯实验VERILOG源码 Xilinx ISE14.6 工程文件 //拨码开关SW3作为开关信号,导航按键UP和DOWN作为LED流动方向控制信号,实现8个LED开关、方向可控的流水灯功能 module sp6( input ext_clk_25m, //外部输入25MHz时钟信号 input ext_rst_n, //外部输入复位信号,低电平有效 input[0:0] switch, //拨码开关SW3输入,ON -- 低电平;OFF -- 高电平 input key_upup,key_down, //up和down两个导航按键输入,未按下为高电平,按下后为低电平 output reg[7:0] led //8个LED指示灯接口 ); //------------------------------------- //按键抖动判断逻辑 wire key; //所有按键值相与的结果,用于按键触发判断 reg[3:0] keyr; //按键值key的缓存寄存器 assign key = key_upup & key_down; always @(posedge ext_clk_25m or negedge ext_rst_n) if (!ext_rst_n) keyr <= 4'b1111; else keyr <= {keyr[2:0],key}; wire key_neg = ~keyr[2] & keyr[3]; //有按键被按下 wire key_pos = keyr[2] & ~keyr[3]; //有按键被释放 //------------------------------------- //定时计数逻辑,用于对按键的消抖判断 reg[19:0] cnt; always @ (posedge ext_clk_25m or negedge ext_rst_n) if (!ext_rst_n) cnt <= 20'd0; else if(key_pos || key_neg) cnt <=20'd0; else if(cnt < 20'd999_999) cnt <= cnt + 1'b1; else cnt <= 20'd0; reg[1:0] key_value[1:0]; always @(posedge ext_clk_25m or negedge ext_rst_n) if (!ext_rst_n) begin key_value[0] <= 2'b11; key_value[1] <= 2'b11; end else if(cnt == 20'd999_999) begin //定时键值采集 key_value[0] <= {key_upup,key_down}; key_value[1] <= key_value[0]; end wire[1:0] key_press = key_value[1] & ~key_value[0]; //消抖后按键值变化标志位 //------------------------------------ //流水灯开启、停止和流动方向控制开关、按键值采集 reg led_en; //LED流水灯工作使能信号,高电平有效 reg led_dir; //LED流水灯方向控制信号,1--从高到低流动,0--从低到高流动 always @ (posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) begin led_en <= 1'b0; led_dir <= 1'b0; end else begin //流水灯开启/停止控制 if(!switch[0]) led_en <= 1'b1; else led_en <= 1'b0; //流水灯方向控制 if(key_press[0]) led_dir <= 1'b0; //从低到高流动 else if(key_press[1]) led_dir <= 1'b1; //从高到低流动 else ; end //------------------------------------ //LED流水灯变化延时计数器 reg[23:0] delay; always @ (posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) delay <= 24'd0; else delay <= dela