流水等的实现需要先实现灯光的闪烁
#include #define uint unsigned int sbit p1=P1^0; void delay1s(); main() { while(1) { p1=0;//打开第一个发光二极管 delay1s();//延迟一秒 p1=1;//关闭第一个发光二级管 delay1s(); } } void delay1s() { uint i,j; for(i=500;i>0;i--) for(j=110;j>0;j--); } 因此需要延时函数 如下,灯亮200ms,暗800ms,时间在delayms中自己 #include #define uint unsigned int sbit p1=P1^0; void delayms(uint); void main() { while(1) { p1=0; delayms(200); p1=1; delayms(800); } } void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //延时xms毫秒 for(j=110;j>0;j--); } 用C51实现流水灯的操作需要用到移位操作 也就是C语言中的左移,右移运算符<<,>>, 该运算符是直接对二进制起作用的 最高位补0,其他位0变1,1变0 但是在C51中,可以直接用“_crol_”函数实现 C51左移程序 #include #define uint unsigned int uchar a; main() { a=0xaa; while(1) { a=a<<1;//右移变">>" } } 最终实现的程序 #include #include #define uint unsigned int #define uchar unsigned char void delayms(uint); uchar aa; //定义一个变量来给P1赋值 void main() { aa=0xfe;//赋初值11111110 while(1) { P1=aa;//点亮第一个灯 delayms(500);//延时500ms aa=_crol_(aa, 1);//aa循环左移1位后再给aa } } void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } 一个菜鸟的学习之路
上一篇:STC89C52单片机引脚对应的功能以及实例讲解
下一篇:51单片机学习——点亮第一个发光二极管
推荐阅读最新更新时间:2024-11-09 14:23