2007年9月6日星期四

2007年9月5日遇见的网站页面开发的两个小问题

    这两个小问题一是关于实现Ctrl+<回车>发送消息,另外一个是关于用javascript注册带参数的事件。
网上有一些例子,中文的例子基本上是只能用于IE浏览器的,细心就会发现,很多论坛也只能是IE浏览器可以Ctrl+<回车>发表帖子,Firefox不能用。其实并不是Firefox、Opera之类的浏览器没有这个功能,而是最早写这个脚本的人没有考虑其他浏览器,然后这段代码炒来炒去炒到多浏览器的时代就残废成现在这个样子了。我们来看一看这段代码,这是一个可以实现多浏览器快捷键的例子
<html><head><script> function isAccessKey(e){
    var keynum;
    if(window.event) // IE
    {
    keynum = e.keyCode;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
    keynum = e.which;
    }
    if(e.ctrlKey && keynum == 13)
    alert("你按下了Ctrl+<回车>");
}
</script></head><body>
<input type="text" name="name" size="20"
value="" onkeydown="isAccessKey(event);">
</body></html>
其中无非是针对浏览器对window.event的支持性做了个判断,根据不同的支持性使用不同的方法获取按键值,很简单的分段函数就能很好的解决这个问题,对非IE浏览器一刀切的时代已经过去了。
    另一个问题:
    在一个项目中很可能作html代码的人和做javascrip以及CSS的人并不是一个,还看上面的那个例子,input那行很肯能会写成<input id="iptId">,然后CSS开发人员会写个#iptId{width:50px;font-size:10pt}之类的,javascipt程序员对iptId注册onkeydown事件。我恰恰在这里遇见了问题,常用的注册事件的方式有四种:
1.<button onclick="alert('aaa')"></button>
2.element.onclick=function(){}
3.element.onclick=new Function()
4.element.attachEvent("onclick",function(){})
1不是风格,2、3、4在IE中不能注册带参数的事件(至少我没研究出来),于是我想了个万能的办法,就是不到万不得已不能用的办法——修改并刷新input标记的outerHTML,程序是这样的:
document.getElementById("iptId").setAttribute("onkeydown","isAccessKey(event)");
document.getElementById("iptId").outerHTML = document.getElementById("iptId").outerHTML;
先用DOM的方法对input加一个onkeydown="isAccessKey(event)"的属性,然后刷新。我的测试是在IE7(我没ie6)、firefox下都正常使用,效果不错。不过我觉得这种方法并不好,可以算是一个另类的路子,还是等哪天我找到正统的方式再介绍给大家吧。

给windows 2008装geForce4 mx440显卡驱动

    最近申请了个windows2008 beta3的测试,系统不错,但是驱动程序并不丰厚,尤其是旧硬件的驱动。装完之后屏幕晃眼,发现刷新率不能改,只有默认刷新率一项,看来得重装显示图形驱动。我的显卡是geForce4 mx440,Nvidia对这款显卡最近的驱动(32bit)是xp的,别说vista的,就连专门为win2003的驱动都没有,哪怕是仅仅贴个标。于是我尝试的下载了xp的驱动,安装时程序提示系统版本不对,不允许安装。考虑到同是新技术(NT)的系统,就算不完全兼容也不至于不能用吧,于是我从设备管理器里面让系统自己去驱动的解压目录(C:\NVIDIA)找,结果成了,竟然得到了重启后生效的提示,重启一下,发现分辨率可以改了,改成85Hz,确定,显示OK了。我想核心驱动可能是一样的,只不过是周边的东西(比如托盘)不同系统有所不同,假如我们只用核心的驱动,也是可以正常工作的。

2007年9月2日星期日

原来做的一个简易的AT89S5x并口程序下载器

这是最小系统板,不包括复位,因为下载线可以提供这个功能。

反面电路

下载线的接口,全是自己焊的,线是网线。

下载线的电路做到了DB25接口的塑料盒子里了。

    电路很简单,值钱东西只有我花1块钱买的50个330欧的电阻中的四个。接法也不难,25-20接GND,10接330欧电阻接MISO,9接330欧电阻接Reset,7接330欧电阻接MOSI,6接330欧电阻接SCK,然后把12和2接起来,再把3和11接起来,全套下来3块多钱。

软件我推荐双龙的MCU下载程序,可以去http://www.sl.com.cn下载。

简易USB口取电装置

    对于51单片机开发者来言,经常会需要+5V的直流电,用稳压变压器有的时候是个比较麻烦的事情,所以我们设计制作了一个从USB口获得+5V直流电的装置。

    将用剩下的实验板掰开,为了整齐“掰”是分两步进行的。

    将掰下来的这个部分焊上导线,并从单排孔上取下来其中的两个(左边那个黑东西)

    将导线的另一头焊上这个双孔,做成一个可以插到双针上的插头

    用软双面胶将小板和一块塑料占到一起。

    然后便可以插到主板的USB口中取+5V直流电了,由于双面胶有弹性,可以保证良好的接触,而且不会损坏接口。

    USB口的最左边是+5V,中间两个为数据线,最右边的为地线0V,外面的金属壳为保护地,对大地的电动势为0V,这个详细的定义可以参考手册。

    这是将USB取电线安装到一块AT89S5x下载器上的实物图,供电效果还是很不错的。

    做这个东西几乎用的全是下脚料,基本上没有成本。

The End

2007年9月1日星期六

AT89S5x的串口isp程序下载器

    我们做了个AT89S5x的串口isp程序下载器,这是照片和一些说明

    这是电路原理图,从网上找的,我也不清楚版权的归属问题

    由于要往试验板上做,所以打了草稿,草稿纸是我用Photoshop做的点阵,然后打印出来的(最终完成品有些改动)。

    这是所需要的全部器件和部分工具。

    这是我们用来做测试用的AT89S52和我起芯片的重要工具——瑞士军刀(另一块芯片是MAX232epe,工作温度可以达到-40℃~85℃的那种)。

    把它们焊接到试验板上。

    那两根针是用来接电源的,因为COM口并不能提供充分的电能。我看见有的图纸不需要外接电源,而是将COM口闲置的引脚置成高电平用以供电,这种方式并不总是可靠的,在某些主板上我们不能保证它能提供足够的能量,所以我们采用了外接电源的方法。

    这是我买了用来提供+5V电能的稳压变压器,输出口可以被那两根针夹住。

    数据线几口采用DB9的座,如果将那两个类似螺丝的东西拆下来,整个下载器也是可以直接插到计算机机上的。

    这是电路板的反面在修整之前的样子。

    编程软件我用的是这个,89ISP2.0,从网上找的,烧录速度不算快,不过用起来很简单。

    在编程测试成功之后我们把有用的部分从整个实验板上掰了下了。

    然后修了修板子的反面。

    对正面的飞线来个特写,橙白线是地线,连接DB9的5号引脚;绿色连接DB9的4号引脚和MAX232的13号管脚;蓝白连接DB9的7号引脚和MAX232的8号管脚,蓝线在蓝白线下面,连接DB9的8号引脚和MAX232的14号管脚。

    这个下载器是我和我的搭档共同完成的,他的博客是http://blog.sina.com.cn/yhwb0817。以后有机会还可以做一个纯USB口的下载器,这样一来优点颇丰厚。俗话说学无止境,但是这个下载器到此算是完成了。