此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处
简介:
系列文章《单片机C语言-十六种方式流水灯》是一篇介绍单片机C语言各种基本语句使用范例的文章,总共使用了:顺序结构、单选择语句if、多选择语句if...else、多选择语句switch...case、循环语句for、循环语句while、循环语句do...while、转移语句goto、函数调用、数组、指针、指针+数组、指针+数组+函数、结构体、结构体数组、结构体数组+指针等共计16种方式实现同样的流水灯功能。
通过这十六种方式的流水灯实例,使大家对单片机C语言的基本语句有一个大致的印象,从而使大家能够更快、更好的掌握单片机C语言。
本文是《单片机C语言-十六种方式流水灯》的第十三篇,介绍使用指针+数组+函数方式实现的流水灯。
- /************************************************************
- 文件:main.c
- 功能:用指针+数组方式实现流水灯
- 描述:轮流点亮8个LED灯
- 作者:老马识途单片机
- 日期:2018年1月2日
- 编译环境:Keil C51 uVirsion 4.72.9.0
- 硬件环境:Proteus 8.0
- 主芯片:AT89S51
- 晶振:11.0592MHz
- ***********************************************************/
- #include <reg51.h>
- unsigned char ucBuffer[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- void Delayms(unsigned long int uiTimer);
- unsigned char GPIOSet(unsigned char ucGPIOValue);
- /*****************************************
- 函数名:main()
- 入口参数:无
- 出口参数:无
- 功能:流水灯测试主程序
- 说明:用指针+数组+函数实现流水灯
- 作者:老马识途单片机
- 日期:2018年1月2日
- ****************************************/
- void main()
- {
- unsigned char ucCounter;
- while(1)
- {
- for(ucCounter=0;ucCounter<8;ucCounter++)
- {
- P0 = GPIOSet(ucCounter);
- Delayms(50000);
- }
- }
- }
- /*****************************************
- 函数名:Delay()
- 入口参数:ucDelayTimer,延时时间长度
- 出口参数:无
- 功能:实现延时功能
- 说明:延时时间可根据入口参数调整
- 作者:老马识途单片机
- 日期:208年1月2日
- ****************************************/
- void Delayms(unsigned long int ucDelayTimer)
- {
- for(;ucDelayTimer > 0;ucDelayTimer--);
- }
- /*****************************************
- 函数名:GPIOSet()
- 入口参数:ucGPIOValue,端口赋值参数
- 出口参数:端口要设置的值
- 功能:实现端口赋值功能
- 说明:端口值可根据入口参数调整
- 作者:老马识途单片机
- 日期:2018年1月2日
- ****************************************/
- unsigned char GPIOSet(unsigned char ucGPIOValue)
- {
- unsigned char *Ptr;
- Ptr = ucBuffer;
- return *(Ptr + ucGPIOValue);
- }
复制代码