点亮LED灯(一)

来源:互联网 发布:校园网mac地址修改 编辑:程序博客网 时间:2024/05/02 01:52

想当初都是用汇编来编写单片机的程序,那滋味现在想来都是满满的回忆,还是用C语言写起来爽快啊!

用C写单片机程序,只需要引入头文件<reg51.h>即可,实际上该头文件只是定义了特殊功能寄存器地址。

为了今后使用方便,我们封装一个函数,用来开关LED灯,通过参数来控制操作的P端口,并且引入掩码来操作单个和多个bit位。

本例程能达到逐个打开LED然后逐个关闭的效果。

#include <reg51.h>typedef unsigned char uchar;  typedef unsigned char uint8;  typedef unsigned int uint16; void LedOn(uint8 Px, uint8 mask){uint8 tmp;switch (Px){case 0:tmp = P0 & 0xff;P0 = mask | tmp;break;case 1:tmp = P1 & 0xff;P1 = mask | tmp;break;case 2:tmp = P2 & 0xff;P2 = mask | tmp;break;case 3:tmp = P3 & 0xff;P3 = mask | tmp;break;}}void LedOff(uint8 Px, uint8 mask){uint8 tmp;switch (Px){case 0:tmp = P0;P0 = (~mask) & tmp;break;case 1:tmp = P1;P1 = (~mask) & tmp;break;case 2:tmp = P2;P2 = (~mask) & tmp;break;case 3:tmp = P3;P3 = (~mask) & tmp;break;}}void Delayms(uint16 ms){uint8 i;while(ms--){for(i = 0; i < 120; i++);}}void main(){int i;while (1){for (i = 0; i < 8; i++){LedOn(0, 0x01 << i);Delayms(100);}for (i = 0; i < 8; i++){LedOff(0, 0x01 << i);Delayms(100);}}}


0 0