单片机C程序
- 格式:doc
- 大小:62.00 KB
- 文档页数:16
开关控制灯亮1:#include <AT89X51.H>unsigned char temp;void main(void){while(1){temp=P1>>4;temp=temp | 0xf0;P1=temp;}}与上同上面简洁好多四个开关控制四个灯2 :#include <reg51.h>sbit L1=P1^0;sbit L2=P1^1;sbit L3=P1^2;sbit L4=P1^3;sbit K1=P1^4;sbit K2=P1^5;sbit K3=P1^6;sbit K4=P1^7;void main(void){while(1){if(K1==0){L1=0;}else{L1=1;}if(K2==0){L2=0;}else{L2=1;}if(K3==0){L3=0;}else{L3=1;}if(K4==0){L4=0;}else{L4=1;}}}3:单个灯闪亮#include<reg52.h>//52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{unsigned int i; //定义一个int型变量while(1){i=50000; //变量赋初值为led1=0; //点亮灯while(i--); //延时i=50000;led1=1; //熄灭灯while(i--);}}4:固定灯亮按定义的亮#include<reg52.h>//52单片机头文件void main() //主函数{P1=0xc5; //将单片机P1口的个口由高到低分别赋值为while(1); //程序停止在这里,在后面会讲到为什么这样写。
}5:分时点亮灯流水灯#include<reg52.h>//52单片机头文件void main() //主函数{unsigned int i; //定义一个int型变量while(1){i=50000; //变量赋初值为P1=0xfe; //点亮第一个灯while(i--); //延时i=50000; //变量赋初值为P1=0xfd; //点亮第二个灯while(i--); //延时i=50000; //变量赋初值为P1=0xfb; //点亮第三个灯while(i--); //延时i=50000; //变量赋初值为P1=0xf7; //点亮第四个灯while(i--); //延时i=50000; //变量赋初值为P1=0xef; //点亮第五个灯while(i--); //延时i=50000; //变量赋初值为P1=0xdf; //点亮第六个灯while(i--); //延时i=50000; //变量赋初值为P1=0xbf; //点亮第七个灯while(i--); //延时i=50000; //变量赋初值为P1=0x7f; //点亮第八个灯while(i--); //延时}}6:/*******************************************************************//* 间隔ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;个全部闪烁次;关闭发光管,程序停止。
*//*********************************************************/#include<reg52.h>//52单片机头文件#include<intrins.h>//包含有左右循环移位子函数的库#define uint unsigned int//宏定义#define uchar unsigned char//宏定义void delay(uint z) //延时函数,z的取值为这个函数的延时ms 数,如delay(200);大约延时ms.{ //delay(500);大约延时ms.uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main() //主函数{uchar a,i,j;for(j=0;j<3;j++) //寄偶交替{P1=0x55; //点亮小灯delay(300); //延时毫秒P1=0xaa;delay(300); //延时毫秒}for(j=0;j<3;j++) //流水灯{a=0xfe;for(i=0;i<8;i++){P1=a; //点亮小灯delay(300); //延时毫秒a=_crol_(a,1);}}P1=0xff;for(j=0;j<3;j++) //从两边往中间流{P1=0x7e; //点亮小灯delay(300); //延时毫秒P1=0xbd;delay(300); //延时毫秒P1=0xdb; //点亮小灯delay(300); //延时毫秒P1=0xe7;delay(300); //延时毫秒}P1=0xff;for(j=0;j<3;j++) //从中间往两边流{P1=0xe7; //点亮小灯delay(300); //延时毫秒P1=0xdb;delay(300); //延时毫秒P1=0xbd; //点亮小灯delay(300); //延时毫秒P1=0x7e;delay(300); //延时毫秒}P1=0xff;for(j=0;j<6;j++) //全部闪烁{P1=~P1; //点亮小灯delay(300); //延时毫秒}P1=0xff;while(1);}7:/****************************************************** *************//* 间隔ms第一次一个管亮流动一次,第二次两个管亮流动,依次到个管亮,然后重复整个过程。
*//*********************************************************/#include<reg52.h>//52单片机头文件#include<intrins.h>//包含有左右循环移位子函数的库#define uint unsigned int//宏定义#define uchar unsigned char//宏定义void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时ms.{ //delay(500);大约延时ms.uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main() //主函数{uchar a,i,j;while(1) //大循环{a=0xfe; //赋初值for(j=0;j<8;j++){for(i=0;i<8-j;i++) //左移{P1=a; //点亮小灯delay(200); //延时毫秒a=_crol_(a,1); //将a变量循环左移一位}a=_crol_(a,j); //补齐,方便下面的左移一位P1=0xff; //全部关闭a=a<<1; //左移一位让多一个灯点亮}}}8:/*******************************************************************//* 8个发光管间隔ms由上至下,再由下至上,再重复一次,然后全部熄灭再以ms间隔全部闪烁次。
重复此过程*//****************************************************** ***/#include<reg52.h>//52单片机头文件#include<intrins.h>//包含有左右循环移位子函数的库#define uint unsigned int//宏定义#define uchar unsigned char//宏定义void delay(uint z) //延时函数,z的取值为这个函数的延时ms 数,如delay(200);大约延时ms.{ //delay(500);大约延时ms.uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main() //主函数{uchar a,i,j;while(1) //大循环{for(j=0;j<2;j++){a=0xfe; //赋初值for(i=0;i<8;i++) //左移{P1=a; //点亮小灯delay(200); //延时毫秒a=_crol_(a,1); //将a变量循环左移一位}a=0x7f;for(i=0;i<8;i++) //右移{P1=a; //点亮小灯delay(200); //延时毫秒a=_cror_(a,1); //将a变量循环右移一位}}P1=0xff; //全部熄灭for(j=0;j<10;j++){delay(300); //延时P1=~P1; //全部取反次,既闪烁次}}}9:/*******************************************************************//* 用个发光管演示出位二进制数累加过程。
*//*********************************************************/#include<reg52.h>//52单片机头文件#include<intrins.h>//包含有左右循环移位子函数的库#define uint unsigned int//宏定义#define uchar unsigned char//宏定义void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时ms.{ //delay(500);大约延时ms.uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main() //主函数{uchar a;while(1) //大循环{a++;P1=~a;delay(200);}}10:/*******************************************************************//* 8个发光管来回流动,每个管亮ms,流动时让蜂鸣器发出"滴滴"声。
*//*********************************************************/#include<reg52.h>//52单片机头文件#include<intrins.h>//包含有左右循环移位子函数的库#define uint unsigned int//宏定义#define uchar unsigned char//宏定义sbit beep=P2^3;void delay(uint z) //延时函数,z的取值为这个函数的延时ms 数,如delay(200);大约延时ms.{ //delay(500);大约延时ms.uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main() //主函数{uchar a,i;while(1) //大循环{a=0xfe; //赋初值for(i=0;i<8;i++) //左移{P1=a; //点亮小灯beep=0; //开启蜂鸣器delay(50); //延时毫秒beep=1; //关闭蜂鸣器delay(50); //再延时毫秒a=_crol_(a,1); //将a变量循环左移一位}a=0x7f;for(i=0;i<8;i++) //右移{P1=a; //点亮小灯beep=0; //开启蜂鸣器delay(50); //延时毫秒beep=1; //关闭蜂鸣器delay(50); //再延时毫秒a=_cror_(a,1); //将a变量循环右移一位}}}。