delay_ms(1000); // 延时1000ms
LED_Data = ((LED_Data >> 1)|0x80); //先计算后输出P6 ,LED_Data右移一位,使得LED显示往右移动,然后在最高位加1,点亮最左边的LED灯
if( LED_Data == 0XFF ) // 检查LED_Data是否等于0xFF,即所有LED灯都被点亮
{
LED_Data = 0XFE;
while( LED_Data != 0XFF )
{
LED_Data = ( (LED_Data<<1) +1 ); //向左移位
P6 = LED_Data; // 将LED_Data的值输出到P6端口,更新LED的状态
delay_ms(1000); // 延时1000ms
}
LED_Data = 0x7F;
}
P6 = LED_Data; // 将LED_Data的值输出到P6端口,更新LED的状态
/---------------------------------------------------------------------------------------------------------花式3:-----------------------------------------------------------------------------------------/
if (KEY1 == 0) // 判断按键有没有按下
{
delay_ms(10); // 消抖,等待10毫秒
if (KEY1 == 0) // 再次判断按键是否仍然被按下,确保按键按下有效
{
i++; // 增加按键计数
if (i > 8) // 当超过8次按键后,重置
i = 1;
LED_Data = ~(0x80 >> (i - 1)); // 每次点亮一个灯
P6 = LED_Data; // 更新LED状态
printf("第%d轮按键按下\r", i); // 打印消息到串口
while (KEY1 == 0); // 等待按键释放,防止多次触发按键事件
}
}
/---------------------------------------------------------------------------------------------------------完整程序:-----------------------------------------------------------------------------------------/
Ps:实验程序改写自[冲哥]:
注意事项:STC-ISP中晶振频率调为24MHZ,否则LED灯闪烁时间不定,按照下述图片勾选,实现程序自动下载:
五、调试过程
依据视频教程,将STC32G128K实验箱与电脑连接,正确设置STC-ISP下载器,调试程序。
1.根据输出报告,判断错误位置和错误形式:
2.相关LED灯不按照理想方式亮灭:程序出现逻辑错误,梳理逻辑。
3.使用Keil的程序调试功能。
点击Options for Target选项卡
选择Debug选项
勾选Use Simulator
点击该图标
或者Ctrl+F5启动调试操作
进入调试窗口
六、实验心得
本次LED流水灯实验主要涉及单片机GPIO口的控制、移位操作和延时函数的应用。实验过程中,分三种花式实现了流水灯的顺序点亮、熄灭,以及按键交互。这不仅巩固了对单片机基础知识的掌握,也提升了实践操作能力。
首先,通过对GPIO口的控制,实现了对8个LED灯的精确管理。这使得对单片机与外部设备的交互有了更深入的理解。移位操作在实验中扮演了关键角色,直接关系到流水灯的点亮效果。通过移位操作,顺利实现了LED灯从左到右的移动显示,使得灯光效果更具动态性。同时,移位操作的运用也展现了它在计算机科学中的广泛应用,不仅限于此类实验,在数据处理和算法设计中同样重要。
在此过程中,软件延时函数的合理使用起到了至关重要的作用。尽管软件延时的原理较为简单,但在实际开发中,适当的延时设计能够大幅提升程序的用户体验。通过调节延时时间,流水灯的节奏得以更好地呈现,使整个实验效果更加直观。
此外,按键消抖的处理是实验中的一大亮点。由于机械按键的物理特性,在实际操作中不可避免地会出现抖动现象。通过加入按键消抖的处理方法,成功解决了这一问题,确保了系统的稳定性和可靠性。这也提醒在实际硬件开发中,硬件的物理特性对软件设计有着重要影响,需要软硬件结合来提高系统的性能。
调试阶段是整个实验的关键环节。借助Keil调试工具,进行了多次调试,逐步找出并修正了程序中的逻辑错误。通过对输出结果的分析,明确了问题所在,积累了调试程序的经验。这个过程也让体会到,理论知识与实践操作的结合是提高编程能力的关键。最终,实验顺利完成,对单片机与硬件外设的互动有了更全面的认识,增强了对单片机编程和调试的信心。