历史上的今天
今天是:2024年10月29日(星期二)
2021年10月29日 | 51单片机用三种方法实现流水灯
2021-10-29
一、数组流水灯
定义一组数组分别对应点亮LED1~7
然后利用for循环赋值给p2从而实现流水灯
#include #define uchar unsigned char #define uint unsigned int uchar code table[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数组 // 函数功能:毫秒延时 void delay(uint z) { uint x,y; for(x = 0; x < z; x++) for(y = 0; y < 113; y++); } void main() { uchar i; while(1) { for(i=0;i<8;i++) { P2 = table[i]; delay(300); } } } 二、移位函数流水灯 先定义p2为1111 1110 然后利用_crol_和_cror_函数进行移位 _crol_循环往左移一位,地位的补去高位,cror 循环往右移一位,高位的补去低位 #include #include #define uint unsigned int #define uchar unsigned char uchar temp; void delay(uint z) { uint x,y; for(x = z;x > 0;x--) for(y = 114;y > 0;y--); } void main() { temp = 0xfe; P2 = temp; delay(100); while(1) { temp = _crol_(temp, 1);//循环往左移一位,地位的补去高位 P2 = temp; //_cror_ 循环往右移一位,高位的补去低位 delay(100); } } 三、移位运算符流水灯 先定义p2为1111 1111 然后用for循环<<和>>进行移位 <<将p2的值左移1位(高位丢弃,低位补0),>>将p2的值右移1位(低位丢弃,高位补0) #include void delay(unsigned int xms);//延时函数声明 void main() { unsigned char i,j;//定义无符号字符型变量i和j(范围为0~255) while(1) //重复执行while循环体的程序 { i=0xff; //给i赋值1111 1111 P2=i; //给P2端口赋i的值 delay(500); //延时500ms for(j=0;j<8;j++)//循环8次 { i=i<<1; //将i的值左移1位(高位丢弃,低位补0) P2=i; //将i的值赋给P2端口 delay(500); //延时500ms } } } void delay(unsigned int xms) { unsigned int i,j; //定义无符号整形变量i(范围为0~65535) for(i=xms;i>0;i--) //执行xms次即延时x毫秒 for(j=115;j>0;j--); //延时1ms(给i赋1ms的延时值,循环体为空时执行i--指令115次为1ms) }

上一篇:让51单片机八段数码管亮起来
下一篇:51单片机的LED的位定义
史海拾趣
|
选购摄像机总是有人存在一些误区,比如洋品牌就好,还有价格要越低越好,下面我就说说真正需要注意的几点是什么吧! 第一、经济性 当前安防产品同质化很严重,进口的与国产的相差无几,所以朋友们不要盲目的崇拜洋 ...… 查看全部问答> |
|
现在我只有一个NK.BIN文件,想了解怎样才能把它下载至2440的开发板…我现在可以下载NK.NB0文件,但是不了解怎样下载NK.BIN文件,希望了解的大拿给指点指点…… 查看全部问答> |
|
WinCE的explorer.exe不启动直接启动自己的应用程序会有什么样的影响? 提一个关于WinCE启动的问题,在很多地方看到WinCE不启动explorer.exe,用自定义的应用程序替换,我有几个问题想寻求解答: 1、explorer.exe的完整的功能是哪些? 2、如果不启动这个功能,在VS2005下写的程序(基于compact Frame work)还能不能用 ...… 查看全部问答> |
|
我使用MDK3.22,首先已按照lut1lut的帖子修改了汇编代码。数据源参考了圈圈的“FFT结果的物理意义”中的数据,我把圈圈的256个数据*1024然后作的四舍五入取整。结果与圈圈文章中分析的基本一致,第0点、50点、75点数据比较大,此三点数据为( ...… 查看全部问答> |
|
stm32串口1,2,3,4为什么1,2可以,3,4就不行啊。 USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure. ...… 查看全部问答> |
|
意外发现LPC12xx系列,仍然是CortexM0的内核,FLASH变大了(最大128KB),同时增加了DMA Controler。封装为LQFP-48或LQFP-64。详见附件:… 查看全部问答> |
|
void USART1_Init(void){ USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopB ...… 查看全部问答> |
|
请问有人有ADC10的序列通道多次转换模式的源程序吗?官方提供的没有读值的代码,所以弄了很久都弄不懂。求一个读取多个通道后能存到变量中的程序~另外:我看手册里面说,序列通道多次转换模式可以不用DTC实现AD转换也就是,每个通道读取后,及时把 ...… 查看全部问答> |




