1.简洁代码
单片机程序阅读一般都是先从主函数开始,上一讲的程序写法在主函数中显得不简洁,影响人阅读代码的效率。有时我们只需要知道一条语句代表什么意思即可,所以我们把延时部分封装为一个函数,在主函数里调用函数名表示此处语句延时1秒,这样可读性就强的多,也简洁地多,读者也可以先了解一下《手把手教你学51单片机》文档中的4.6节先。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include sbit LED2 = P0^0; sbit ADDR2 = P1^2; sbit ADDR1 = P1^1; sbit ADDR0 = P1^0; sbit ENLED = P1^4; sbit ADDR3 = P1^3;
void delay()//延时功能封装为一个函数 { unsigned int i,j;//定义两个用来完成延时功能的变量 for(i=0;i<19601;i++)//延时1s { for(j=5;j>0;j--); } }
void main() { ADDR3 = 1;//使能三八译码器 ENLED = 0;//
ADDR2 = 1;//************************** ADDR1 = 1;//让三八译码器的IO6输出低电平 ADDR0 = 0;//**************************
while (1) { LED2=0;//点亮最右端的灯 delay();//延时1s LED2=1;//熄灭最右端的灯 delay();//延时1s } } |
这个原理很简单,我们用一张图表示就知道什么叫函数封装调用了
这里只不过是把变量i和变量j放在了“void delay()”中定义,实现的功能和上一讲的代码都是一样的。不过笔者用软件仿真发现这样写会花掉CPU调用函数的4微秒时间,为了方便阅读牺牲这4微秒是必须的,但我们不需在后面加例如“LED2=0;”或“i=0;”等这些语句也可以离奇的解决上一讲所说的灯跳变与秒表计时数字跳变不同步的诡异现象。
我们比较推荐用函数封装来模块化编程,因为这样比较符合编程思想也是我们必须要使用的编程技巧。
2.建议
本节的代码虽然不多,但是我们也要养成从主函数开始阅读代码的习惯,而不是一开始就从头往下看代码。比如映入我们第一眼帘的是“void delay()”函数,这时我们不应该进入函数体去阅读里面的内容,而是马上找到“void main()”进入阅读研究里面的代码,当看到“delay();”时有了注释我们就有了对这个函数的第一印象,这时再去查看这个函数的内容。
常见步骤如下:
一定要在编译之后才能按F12。虽然在代码量少的时候看不出这种方法的优势,但当我们阅读别人的代码时,代码量一般比较多,用此方法则能快速了解别人所写程序的层层意思,关于这个习惯,大家学到后面的程序就能领悟了。
上一篇:51单片机-延时1秒
下一篇:51单片机-函数传参调用
设计资源 培训 开发板 精华推荐
- LTC6262HMS SAR ADC 驱动器、运算放大器的典型应用
- 【模拟乘法器】AD835四象限250MHz乘法器
- ST1S41 4 A 降压开关稳压器的典型应用
- ADP2503-5.0-EVALZ,ADP2503 评估板,5V DC 至 DC 无线单路输出电源
- LT6654BMPS6-1.25 八路 DAC 电压基准的典型应用
- SiC461 4.5 至 60 V 输入、10A microBUCK DC/DC 转换器的典型应用
- AN54,采用 LTC1148 4.5-6.5V、3.3V/2A 恒频降压转换器的应用电路
- 用于电源管理的 3.3V、1 节、碱性电池充电器
- ZXLD1615 带内部开关的可调式 DC-DC 升压转换器的典型应用
- 8路光耦隔离继电器驱动模块