2007-08-10 #

发布 .NET 2.0 WebService 只能查看函数 不能调用的问题.

在 WebConfig 文件中 节 加上如下内容就好了.

发表于 @ 11:05 | 评论与反馈 (0)

2007-06-28 #

worktime and freetime

      工作三个月了,工作上一直在做C/S 的东西,一直没太多的时间捣鼓一些小玩意,不过最近又重新开始接触B/S ,这让我想起了以前做的一个小东东,应该在Blog中提一下,算是做个广告吧。

     这是我学习Flex 的过程中的一个作品,做的很粗糙,不过是一边做一边学,也不能在质量上要求很高,前台是 Flex 2 用 Flex Builder 2 构建 ,后台为 .NET Web Service 用 Visual Studio 2005  构建,语言是VB.NET 。

还是用老的www.easylf.net 的空间和域名,似乎搞了几次什么也没成功,现在完全变成实验田了,这样也不错。

现在仅仅做了个记事本和文件夹的功能,功能简单,bug 多多,以后有时间慢慢改进吧。

前一阵子FreeTime 一直在搞Flex ,现在基本没有时间了,最近工作上的事情比较多,我又是新手,所以做什么事情都要打出点时间的富裕,用来修改bug。现在只能用时间来弥补质量上的不足。最近加班比较多,希望忙过这一段,可以休息一下。

发表于 @ 00:01 | 评论与反馈 (0)

2007-05-17 #

C++Builder 全局变量

今天遇到了一个C++Builder 全局变量的问题,经过查找资料,终于解决了

 

A.CPP

#include <B.H>

ShowMessage(MainVersion);

 

 

B.H

 

AnsiString MainVersion;

 

C.CPP

#include <B.H>

MainVersion=”T-bag”;

 

这样三个文件,C.CPP 修改了 MainVersion 的值后,A.cpp显示为空,奇怪哈。

 

Google 得到:全局变量需要加:extern 关键字

于是修改为:extern AnsiString MainVersion

问题依然如故

再Google ,原来VCL 对 extern 关键字做了扩展,改为

extern PACKAGE   AnsiString MainVersion;

编译失败,

在B.CPP 中加入

AnsiString MainVersion;

问题全部解决。

 

奇怪哈,以前声明全局变量只放在.H 文件中,用extern PACKAGE   关键字还需要在.CPP中写一份,不知道其中的原因,如果哪位看官明白,请告诉小弟。

 

发表于 @ 13:59 | 评论与反馈 (1)

AT89S51 和 AT89S52的区别

   在印象中,S51 和 S52的区别不太大,正是由于平常的不仔细,在后面的开发中遇到了问题,记忆深刻,特意把一些经验记录下来,希望能给需要的人一些帮助。

      前些日子,朋友有几台基于89S51的设备需要维修,实际上就是MCU坏掉了,由于厂家已经不给维护,只能重写全部程序,在对设备的硬件仔细研究之后,我开始动手了。

      由于当时手头没有PLCC封装的89S51 ,就用 89S52 替代,毕竟硬件外围电路上,89S51 和S52 是没有区别的(也可能有,但我还没发现,呵呵)。没多长时间,程序开发调试完成。于是买来几块89S51,准备编译一下,问题出现了,首先出现错误提示:

ADDRESS SPACE OVERFLOW XXXX

经Google得到,原来89S51 的 内存只有 128字节 而89S52内存有 256 字节,明显是内存不够用了,经过优化减少全局变量,Data=110.4 bytes 已经少于 128字节,编译成功,烧写。

         芯片装到设备上,出现了跑飞的情况,原以为是程序逻辑的问题,经过仔细查找没发现错误的地方,但程序仍然跑飞,很奇怪。

         再Google ,发现:虽然89S51 有 128 字节的内存,但不能全部给全局变量使用,需要预留20~30字节给堆栈使用,否则程序当然会跑飞。

         反复查看代码,发现程序中有一些常量,但仍然放在内存中,比如:

char a[]={'a','b','c','d'};

偶尔发现别人的代码中有这种形式的定义:

char code a[]={'a',b','c','d'};

原来,常量可以放在程序Rom里,于是将一些程序中不需要变化的变量(其实就是常量哈)全部修改为char code  a;的形式,烧写,调试,以前跑飞的情况终于解决了。

另外,对于只使用正值的char 可以修改为 unsigned char,也可以节省一些内存。

发表于 @ 13:35 | 评论与反馈 (4)

2007-05-15 #

新做的一个电子表

发表于 @ 23:30 | 评论与反馈 (12)

2007-04-28 #

【转载】贴个1602 液晶的驱动程序

/*======================================= 1602lcd模块驱动程序 ========================================== 说明:1.晶体:11.0592MHz 2.1602驱动:ks0066 ******************************************/ #i nclude #i nclude #define lcm_rs P2_7 //寄存器选择 #define lcm_rw P2_6 //读/写控制 #define lcm_e P2_5 //读/写使能 #define lcm_blk P2_4 //背光led 1.off 0.on #define lcm_data P0 //函数声明 void delay5ms(void); void delay400ms(void); void lcm_write_command(unsigned char wc_lcm,busy_c); /*********************************** //函数名称: void lcm_ini(void) //传递参数: 无 //返 回 值: 无 //函数功能: LCM初始化 //函数说明: ***********************************/ void lcm_ini(void) { lcm_data = 0; lcm_write_command(0x38,0); //16*2显示,5*7点阵,8位数据接口,不检测忙 delay5ms(); lcm_write_command(0x38,0); delay5ms(); lcm_write_command(0x38,0); //三次显示模式, 不检测忙 delay5ms(); lcm_write_command(0x38,1); //16*2显示,5*7点阵,8位数据接口,需要检测忙 lcm_write_command(0x80,1); //关闭显示 lcm_write_command(0x01,1); //clear显示 lcm_write_command(0x06,1); //指针和光标+1,不滚屏 lcm_write_command(0x0c,1); //开显示,不显示光标 } /*********************************** //函数名称: unsigned char lcm_read_status(void) //传递参数: 无 //返 回 值: unsigned char //函数功能: 读lcm状态,等待lcm空闲 //函数说明: DB7=1,忙 ***********************************/ unsigned char lcm_read_status(void) { lcm_data=0xff; lcm_rs=0; lcm_rw=1; lcm_e=0; lcm_e=0; lcm_e=1; while(lcm_data & 0x80); return lcm_data; } /*********************************** //函数名称: void lcm_write_data(unsigned char wd_lcm) //传递参数: unsigned char wd_lcm //返 回 值: 无 //函数功能: lcm写数据 //函数说明: ***********************************/ void lcm_write_data(unsigned char wd_lcm) { lcm_read_status(); //判断lcm忙标志 lcm_data = wd_lcm; lcm_rs = 1; lcm_rw = 0; lcm_e = 0; lcm_e = 0; lcm_e = 1; } /*********************************** //函数名称: void lcm_write_command(unsigned char wc_lcm, busy_c) //传递参数: unsigned char wc_lcm, busy_c //返 回 值: 无 //函数功能: lcm写命令 //函数说明: busy_c=0是,不用检测忙信号 ***********************************/ void lcm_write_command(unsigned char wc_lcm, busy_c) { if (busy_c) lcm_read_status(); lcm_data = wc_lcm; lcm_rs=0; lcm_rw = 0; lcm_e = 0; lcm_e = 0; lcm_e = 1; } /*********************************** //函数名称: void disp_one_char(unsigned char x, unsigned char y,unsigned char disp_data) //传递参数: unsigned char x, unsigned char y,unsigned char disp_data //返 回 值: 无 //函数功能: 指定位置显示一个字符 //函数说明: ***********************************/ void disp_one_char(unsigned char x,unsigned char y,unsigned disp_data) { y = y&0x01; x = x&0x0f; //限制2行,没行15个字 if (y) x =x + 0x40; //算RAM地址 x = x + 0x80; lcm_write_command(x,0); lcm_write_data(disp_data); } /*********************************** //函数名称: void disp_one_char(unsigned char x, unsigned char y,unsigned char *disp_data) //传递参数: unsigned char x, unsigned char y,unsigned char *disp_data //返 回 值: 无 //函数功能: 指定位置显示一串字符 //函数说明: ***********************************/ void disp_list_char(unsigned char x,unsigned char y,unsigned char *disp_data) { unsigned char char_length,j; char_length = strlen(disp_data); y = y&0x1; x = x&0x0f; for (j=0;j发表于 @ 16:02 | 评论与反馈 (0)