51单片机入门:流水灯实现详解(宏定义、函数定义、延时函数等)
创作时间:
作者:
@小白创作中心
51单片机入门:流水灯实现详解(宏定义、函数定义、延时函数等)
引用
CSDN
1.
https://m.blog.csdn.net/Dasis/article/details/145451738
本篇文章将详细介绍如何使用51单片机实现LED流水灯效果。通过学习宏定义、函数定义、延时函数等编程基础,结合Keil开发环境的Debug功能,帮助读者掌握单片机编程的基本技能。
1. 宏定义
宏定义是C语言中一种常用的代码简化手段,使用#define关键字进行定义。例如:
#define uchar unsigned char
注意宏定义后面不能加分号,因为它不是语句,而是预处理指令。通过宏定义,我们可以用uchar直接替换unsigned char,使代码更加简洁。
2. 函数的定义
函数是将多条语句集合在一起,完成特定功能的代码块。函数分为标准函数库和用户自定义函数两类。
- 标准函数库:由Keil编译器提供,无需用户定义。
- 自定义函数:用户根据需要编写的函数,必须在使用前先定义。自定义函数的一般格式如下:
函数类型 函数名 (形式参数表)
{
局部变量定义
函数体语句
}
3. 延时函数
延时函数是单片机编程中常用的函数之一,用于实现软件延时。例如:
void delay(unsigned int z)
{
unsigned int x, y;
for(x = z; x > 0; x--) //只控制下面一句,无需花括号
for(y = 114; y > 0; y--); //嵌套循环
}
通过调用delay(100)可以实现100毫秒的延时。需要注意的是,这种方式会耗费CPU时间,因此在实际应用中应尽量避免使用软件延时,转而采用定时器等硬件延时方法。
4. 标准库函数中的循环移位函数
51单片机的标准库函数中提供了循环移位函数,位于intrins.h头文件中。常用的循环移位函数有:
_crol_:字符型循环左移_cror_:字符型循环右移
这些函数专门用于处理char类型数据,适用于51单片机的8位IO口操作。例如:
#include <intrins.h>
void test_crol (void)
{
unsigned char a;
unsigned char b;
a = 0xFE; //1111 1110
b = _crol_(a,1); //b now is 0xFD 二进制为1111 1101,左移一位,最高位移动到最低位
}
5. 循环移位函数与左移和右移运算符的区别
循环移位函数与普通的位移运算符(<<和>>)在处理方式上有所不同:
- 循环左移:最高位移至最低位
- 左移运算符:最高位移除,最低位补0
例如:
#include <intrins.h>
void test_crol (void)
{
unsigned char a;
unsigned char b;
a = 0xFE; //1111 1110
b = _crol_(a,1); //b now is 0xFD 二进制为1111 1101
}
使用左移运算符:
a = 0xFE; //1111 1110
b = a << 1; //b now is 0xFC 二进制为1111 1100,左移一位,使用0填充最低位
6. Keil中Debug的用法
通过Keil的Debug功能,可以实时监控程序运行状态,观察IO口的变化。以下是使用Debug功能实现流水灯效果的示例代码:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp; //LED灯相关变量
//毫秒级延时函数定义
void delay(uint z)
{
uint x, y;
for(x = z; x > 0; x--) //只控制下面一句,无需花括号
for(y = 114; y > 0; y--); //嵌套循环
}
void main()
{
temp = 0xFE; //1111 1110
P1 = temp;
delay(100);
while(1)
{
temp = _crol_(temp, 1);
P1 = temp;
delay(100);
}
}
使用Debug功能时,需要注意以下几点:
- 开启Debug之前需要修改晶振频率为实际使用频率
- 在Debug之前需要先点击“Rebuild”
- 可以通过“Watch1”位置添加需要监控的变量,并设置显示的进制
- 左上角的“重置”按钮可以将程序重置到起始位置
- 通过左侧双击可以设置断点
7. 单片机小精灵
单片机小精灵是一个实用的编程工具,可以生成延时函数代码,并支持多种功能。为了使串口波特率更加精准,建议使用11.05926MHz的晶振。
热门推荐
寄大件行李、家具、家电,哪家物流公司更便宜?
宽带欠费怎么办?拨打10000快速解决
乙女游戏崛起:从日本小众品类到中国百亿市场
王祖刚发明速干环保墨水,实现安全书写新突破
虎皮鹦鹉补钙神器大揭秘:墨鱼骨、保健砂、钙磷粉哪个更靠谱?
海南省肿瘤医院开启无痛舒适化诊疗新模式 让治病不必“忍一忍”
七大趋势塑造2024前端开发:AI、SSR竞争与无障碍性受关注
六大实用策略助力前端开发者突破技能瓶颈
大米变红、豆腐发粘要警惕,这样储存更安全
餐饮店如何靠特色菜品成网红打卡地
餐饮企业精益管理:提升运营效率的秘密武器
雨游阳朔如意峰:缆车穿云雾,栈道踏仙境
2024年三季度GDP排行:内蒙古增速居首,粤苏鲁总量领先
浙江GDP总量破8万亿元,民营经济贡献近七成,数字经济增势强劲
营养师推荐:科学实证的肠胃调理一日三餐全方案
冬季养胃首选三宝:山药南瓜白萝卜,附食谱详解
孕妈肚皮硬邦邦?原因在这里
减少腹部脂肪,试试“冲刺间歇训练”
菜单设计心理学:让餐厅营业额翻倍的秘密武器
黄芪有1个黄金搭档,帮助疏通血管,清除血栓斑块,改善高血脂
血氧监测技术:提升医疗诊断准确性的关键工具
一文读懂血氧仪:从原理到使用,这些要点需掌握
血氧仪不是肺炎诊断金标准,需结合其他检查手段
iOS防骚扰全攻略:系统功能、第三方应用和最新语音留言
安图大泉河(魔界)漂流游玩攻略:门票价格、营业时间、景点介绍及周边配套全攻略
科学充电指南:延长手机电池寿命的最佳方法与技巧
缅甸电信诈骗问题探析:背后的原因与未来展望
分享几道常见的肉质细嫩、口感鲜美的蛏子肉烹制方法
微信如何礼貌拒绝相亲对象?教你优雅说“不”,不伤感情!
艺术类专业的就业前景怎么样