keil中制作LIB

[复制链接]
16616|32
ayb_ice 发表于 2008-5-21 20:39 | 显示全部楼层

不好意思这是第一张

ayb_ice 发表于 2008-5-21 20:40 | 显示全部楼层

第三张

wxj1952 发表于 2008-5-22 13:20 | 显示全部楼层

明白.

我试试。
wxj1952 发表于 2008-5-23 08:45 | 显示全部楼层

原理性,概念。

把库文件中全局变量名说明为extern。


//  led.c

#include <REG52.h>

bdata char  LED_PORT;
sbit LED = LED_PORT^6;

void test(void);

void main(void)
{

while(1)
test();
}

***************************************************************

//   led_port.c 库文件

#include <reg51.h>

extern bdata char LED_PORT;
extern bit LED;

void test()
{

 LED_PORT=P0;
LED=!LED;
P0=LED_PORT;

}
ayb_ice 发表于 2008-5-23 08:55 | 显示全部楼层

变量当然好处理

SFR怎么办呢
aolin 发表于 2008-5-23 10:42 | 显示全部楼层

我有办法的,嘿嘿...

wxj1952 发表于 2008-5-23 11:58 | 显示全部楼层

回26楼

LZ的目标是改变同一端口的管脚。2个程序均能实现。

你的意思还要改变端口?例如当P1变为P0时?不太明白。
ayb_ice 发表于 2008-5-23 14:59 | 显示全部楼层

我的意思

比如程序操作一IO位,然后程序做成库,在加库的情况可以改为任意位寻址空间。。。
期待高手。。。
wxj1952 发表于 2008-5-23 17:24 | 显示全部楼层

原理性,概念。

主函数
#include <REG52.h>

bdata char LED_PORT;
sbit LED = LED_PORT^4;   // 通过这里,可以在库函数TEST.C 中修
                       改同一SFR地址中的不同位SFR^0~SFR^7。

char  test( char);

void main(void)
{
init();

while(1)
P1=test(P1);   //   通过这里可以改变SFR寄存器名

}
***************************************************************

库函数TEST.C,做成库TEST.LIB即可。

 #include <reg51.h>

extern bdata char LED_PORT;
extern bit LED;

char test(char ax)
{
data char i;
 LED_PORT=ax;
LED=!LED;     // 修改位值。
i=LED_PORT;
return i;    // 返回已修改值。     

}

所长的回调函数很好。值得研究。
lhj200304 发表于 2009-12-28 09:32 | 显示全部楼层
怀念所长啊
xlsbz 发表于 2011-5-30 22:06 | 显示全部楼层
stz123 发表于 2013-5-22 16:37 | 显示全部楼层
我也特别纠结一个问题 就是单片机程序 的执行那个过程 C语言 会一些 好些东西 不知道怎么去用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部