郭天祥单片机编程100例程序及随笔1——LED灯编程

2019-04-15 12:24发布

1.一个待解决问题:    sbit led1 = P1^0;中,led1指的是第一个发光二极管,这是谁给它命名的?为什么单片机能找得到这个灯?2.三个知识点:    2.1 P1口可以接led灯;点亮二极管 led1 = 0;加的是低电平。    2.2 延时函数。i,j定义为unsigned int类型,j那一段代码不变为110,需要延时多少ms,xms的值就设为多少,比如要延时500ms,i=500。其中j=110,网上的说法是一个for循环语句执行110次的时间为1ms,这个只是近似值,与单片机晶振和指令周期有关。void delay(unsigned int xms) {     unsigned int i,j;     for(i=xms;i>0;i--)         for(j=110;j>0;j--); }    2.3单片机_crol_函数。来自#include 文件库。aa = _crol_(aa,1);代表字符左移,用在小灯上可体现为——第一个小灯亮后,使用该函数,第一个小灯灭,第二个小灯亮。此外,第一个小灯是字符的低位。

3.led灯相关练习程序如下(网上下载的版本中有一些错误,自己编改正过来了):    
点亮一个发光二极管 #include sbit led1 = P1^0; void main() { led1 = 0; } 点亮P1口的若干二极管 #include void main() { P1 = 0xaa; whlie(1); } 间隔1S亮灭闪动led灯 #include sbit led1 = P1^0; unsigned int i,j; void main() { while(1) { led1 = 0;//light the led1 for(i=1000;i>0;i--) for(j=110;j>0;j--) led1 = 1; for(i=1000;i>0;i--) for(j=110;j>0;j--) } } 间隔500ms闪动led灯,并采用调用函数的形式调用延时函数 #include sbit led1 = P1^0; #define uint unsigned int void delay(); void main() { while(1) { led1 = 0;//light the led1; delay(); led1 = 1; delay(); } } void delay() { uint i,j; for(i = 500;i>0;i--) for(j = 110;j>0;j--); } 编写程序使得led灯以亮200ms灭800ms的方式闪动,并采用调用延时函数的方法 #include #define uint unsigned int sbit led1 = P1^0; void delay(uint xms); void main() { while(1) { led1 = 0; delay(200); led1 = 1; delay(800); } } void delay(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } 利用C51自带库_crol_(),以间隔500ms,实现流水灯控制 #include #include #define uint unsigned int #define uchar unsigned char uchar = aa; void delay(); void main() { aa = 0xfe; whlie(1) { P1 = aa; delay(); aa = _crol_(aa,1); } } void delay() { uint i,j; for(i=500;i>0;i--) for(j=110;j>0;j--); }