在昨天,将I/O模式下的程序与MM模式下的程序都按照源代码修改完善后调试出
来,在晚上睡觉的时候看了一点教学视频有所感悟,这位老师讲解的挺详细的,我也学到了一些新的知识点。
蓝桥杯大赛-单片机设计与开发基础技能训练教程
下面我详细的讲解一下我今天所学所悟。
- main.c(49): error C267: ‘test’: requires ANSI-style prototype
这个是我遇到的第一个问题。
原代码:
/********************************************************
@功能模块:工程函数的.c文件
@作 者:朱明
@时 间:2020年1月29日
*********************************************************/
#include "test.h"
void test(unsigned char i) //单片机使用核心工程文件
{
P0 = 0xff << i; //右移点亮(老师指导的移位操作)
//这样写不仅占有资源少,而且方便简单
}
/*
switch(led) //最开始自己想到的流水的核心代码
{
case 1: P0 = 0xF1;
break;
case 2: P0 = 0xF2;
break;
case 3: P0 = 0xF3;
break;
case 4: P0 = 0xF4;
break;
case 5: P0 = 0xF5;
break;
case 6: P0 = 0xF6;
break;
case 7: P0 = 0xF7;
break;
case 8: P0 = 0xF8;
break;
*/
下面是.c文件对应的.h文件,错误就是在.h文件的声明格式不一样
//--工程函数的.h文件
#ifndef _TEST_H_
#define _TEST_H_ //主要用于防止重复包含
#include<reg52.h>
/*********************************************************
#include<reg52.h>
//void Function();
宏,常量,以及一些枚举类型···
*********************************************************/
void test(); //--这里就是问题所在
#endif
修改过后的正确代码如下:
#ifndef _TEST_H_
#define _TEST_H_ //主要用于防止重复包含
#include<reg52.h>
/*******************************************************
#include<reg52.h>
//void Function();
宏,常量,以及一些枚举类型···
********************************************************/
void test(unsigned char i); //--修改过后
#endif
问题不算太大,但是对于初学者来说,解决了算是前进一大步
- main.c(65): warning C206: ‘testa’: missing function-prototype
这个是我遇到的第二个问题
这个问题就不详细解释了,原因是我在加上一个代码模块的时候,没有在最开始部分进行函数声明及缺失
#include <reg52.h>
#include "mode.h"
#include "delay.h"
#include "test.h"
#include "testa.h" //缺失部分
今天算是对代码的编译加深了了解,详细的介绍在上面那位老师的视频中有代码的讲解,我对于移位操作还是不能熟练,不然就不需要再建立模块了,不知道为什么是我单片机移位的空间大小的问题还是向左移-1不等于向右移1,希望有朋友可以帮我解答一下。
//主函数部分代码,上面有test的代码,testa就是取反了一下
while(1)
{
for(i=1; i<=8; i++) //正向依次全部点亮
{
test(i);
delay(j);
}
for(a=1; a<=8; a++) //反向依次全部熄灭
{
testa(a);
delay(j);
}
}
}