dabor                   

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  131 随笔 :: 0 文章 :: 101 评论 :: 0 Trackbacks

置顶随笔 #

最爱你, 阿雷姆星紫蓝奇异的闪电,
我手中高举的雷针,
你致命诱惑的根源,
闪亮吧, 瞬间带我走进你的世界。
t_levin04.jpg
posted @ 2006-05-31 12:54 dabor 阅读(403) | 评论 (5)编辑 收藏

2008年8月19日 #

用的直径 5mm 白色高亮发光二极管。

给定满载测试电流:
D = 1(100%)	I = 15.5mA	(D: 占空比)

以下是几个频率点的测试电流:
f = 2KHZ	D = 1/8		I = 1.71mA
f = 1KHZ	D = 1/8		I = 1.79mA
f = 200HZ	D = 1/8		I = 1.84mA

目测在三个频率下的发光管亮度差不多,看来发光管亮度和频率无关,
那就尽量选低频来点亮它,在 LED 阵列扫描方式下将大幅减低 MCU 负担。

50mA 满载电流, D=1/8,测得 I=6.2mA,发光亮度还可以。
D=1/4,亮度不错。

所以,在 LED 阵列中扫描基线如果是 16 根,则 D=1/16,发光管的
亮度将大大降低。因此要想真正的“高亮”,就要尽量减少扫描基线。



posted @ 2008-08-19 13:33 dabor 阅读(547) | 评论 (1)编辑 收藏

2008年7月28日 #

Keil 编译器不让我们随心所欲地使用自定义库函数, 因为如果你调用了一个自编写的 Delay.lib 库中的库函数, 
如 Delayms (1000); 则 Delay.lib 库中所有函数都将加入到你的程序中, 例 Delay50us 等. 而 Keil 自己的库函数
则不存在这个问题, 例如调用 STRING.H 中的 strlen 函数, 它不会把 strcmp 等函数加入到你的程序中.

不得已, 只有使用笨办法, 以尽量让自己方便程序的编写:
在 C51\INC 下建 delay.h 文件:

#ifdef	add_Delayms
	#include	"delay\delayms.c"
#endif

#ifdef	add_Delay50us
	#include	"delay\delay50us.c"
#endif

再在这个目录下建目录 delay, 目录里分别写各个函数的原程序:

delayms.c:


void Delayms (unsigned int count);


/*----------------------------------------
  1mS 延时 函数

参 数:	count:	count x 1mS
----------------------------------------*/
void Delayms (unsigned int count)
{
	unsigned int	i;
	unsigned int	j;

	for (j=0; j<count; j++)
		for (i=0; i<124; i++);	// 根据 CPU 时钟修改 i 的循环值
}


delay50us.c:



void Delay50us (unsigned char count);


/*----------------------------------------
  50uS 延时 函数

参 数:	count:	count x 50uS
----------------------------------------*/
void Delay50us (unsigned char count)
{
	unsigned char	i;
	unsigned char	j;

	for (j=0; j<count; j++)
		for (i=0; i<13; i++);	// 根据 CPU 时钟修改 i 的循环值
}
 
 
 
最后在主程序中调用:


#include	<at89x52.h>
#include	<define.h>

//--- 自编库函数 ---
#define		add_Delayms
#define		add_Delay50us

#include	<delay.h>


/*----------------------------------------
  主函数
----------------------------------------*/
void main (void)
{
	while (TRUE)
	{
		Delayms (1000);
		Delay50us (5);
	}
}



虽然感觉有点笨, 但还是方便了些, 如果编译时出现提示某个函数没有被使用, 只需注释掉一行就行, 例:

#include	<AT89X52.H>
#include	<DEFINE.H>

//--- 自编库函数 ---
#define		add_Delayms
//#define	add_Delay50us

#include	<DELAY.H>


/*----------------------------------------
  主函数
----------------------------------------*/
void main (void)
{
	while (TRUE)
	{
		Delayms (1000);
	}
}

posted @ 2008-07-28 16:14 dabor 阅读(813) | 评论 (2)编辑 收藏

2008年7月22日 #

//+++ LCD1602 在 ISIS 中仿真不显示的错误函数 +++

void LCD_CheckBusy (void)
{
	LCD_EN	= 0;
	P0	= 0xff;
	LCD_RW	= 1;
	LCD_RS	= 0;
	LCD_EN	= 1;

	//+++++++++++++++++++++++++++++++++++
	// 在 ISIS 中死等,傻等,不会有结果的!
	// 但在实际中 LCD 却能显示
	//+++++++++++++++++++++++++++++++++++
	while (P0_7 == 1)
	{
		_nop_ ();
		_nop_ ();
		_nop_ ();
	}
}

//+++ 以下是正确的函数 +++

/*-----------------------------------
  LCD1602 控制器忙检测 函数

  控制器空闲则返回
  读数据时:RS=L, RW=H, E=H, 输出:D0-D7= 数据
  D7=1: 忙;D7=0: 闲
------------------------------------*/
void LCD_CheckBusy (void)
{
	LCD_EN	= 0;
	LCD_RW	= 1;
	LCD_RS	= 0;

	while (TRUE)
	{
		P0	= 0xff;
		LCD_EN	= 1;		// +++ 要不停地检测 +++

		_nop_ ();
		_nop_ ();
		_nop_ ();
		
		if (P0_7 == 0)		// LCD 空闲则退出
		{
			LCD_EN	= 0;
			break;
		}

		LCD_EN	= 0;
	}
}


posted @ 2008-07-22 11:13 dabor 阅读(823) | 评论 (0)编辑 收藏

2008年7月21日 #


经常不知道 CPU  是死机,还是所写代码有问题,干脆弄个灯来观察 CPU 是否正常。
void Timer1 (void) interrupt 3		// T1 的中断号为 3
{
	static uchar numBlueLED	= 40;	// 2S (2/0.05)

	TR1	= 0;			// 停 T1
	TL1	= -50000;		// 低 8 位
	TH1	= (-50000) >> 8;	// 高 8 位
	TR1	= 1;			// 开 T1

	// 开蓝生命灯 5x50mS, 周期 2S
	numBlueLED--;

	if (numBlueLED == 5)
	{
		IO_BLUELED	= 0;	// 开蓝灯
	}
	else if (numBlueLED == 0)
	{
		IO_BLUELED	= 1;	// 关蓝灯
		numBlueLED	= 40;
	}
}

void main (void)
{
	//--- 定时器中断初始化 ---
	TMOD	= (TMOD & 0x0f) | 0x10;	// 置T1为方式1,并且不影响 T0
	// 延时50mS的时间常数
	// 计算方法: 1 uS 1 个周期 (12M / 12) 则应置数:65536 - (50000uS/1))
	TL1	= -50000;		// 低 8 位
	TH1	= (-50000) >> 8;	// 高 8 位

	TR1	= 1;			// 启动 T1
	ET1	= 1;			// T1 中断允许
	EA	= 1;			// 开中断

	while (TRUE)
	{
		NC;
	}
}




posted @ 2008-07-21 13:48 dabor 阅读(350) | 评论 (0)编辑 收藏

2008年7月16日 #


X001 和 D2 是我加入的 "Debug" 元件。
按下 X000 ,根据 D2 值你会发现 FOR NEXT 循环体被有控制的执行的次数。
按下 X001,根据 D2 值你会发现 FOR NEXT 循环体一直在执行,这就是我
要加入 M0 来控制循环体的原因了。

开机写 D0:控制循环体循环次数;写 D1:测试要写入的数据。

当循环体在运行时,循环体外任何都将暂停执行,所以你不能将 [= D0 Z0 ]
放在循环体外。




posted @ 2008-07-16 14:10 dabor 阅读(270) | 评论 (0)编辑 收藏


机器工作前,先人工测试一下时间,然后再让机器也运行相同时间。




posted @ 2008-07-16 10:43 dabor 阅读(265) | 评论 (0)编辑 收藏

2008年7月15日 #


S0-S7 可接顺控程序段。Y000 - Y003 接 1 位数码管用于监控程序执行到哪段。
S7 段完后就不要再用移位了,否则 S0-S7 会有短暂的全 0,ENCO 指令全 0 错误,CPU 会报错。




posted @ 2008-07-15 00:00 dabor 阅读(306) | 评论 (0)编辑 收藏

2008年7月12日 #


"单键双稳态开关"的应用,X001 放在楼梯下面,X002放在楼梯上面,Y001 控制电灯。
X001 和 X002 为单稳态常开开关;或用电子元件做成触摸开关。

*[ "0010-单键双稳态开关" 下面有找到的更简方法。]





posted @ 2008-07-12 11:09 dabor 阅读(450) | 评论 (0)编辑 收藏

2008年7月8日 #


这是计费器的显示板:

点此进入 大图
posted @ 2008-07-08 13:09 dabor 阅读(404) | 评论 (0)编辑 收藏


  抓了个计费器来解剖:

点此进入 大图
posted @ 2008-07-08 12:55 dabor 阅读(447) | 评论 (1)编辑 收藏

2006年6月12日 #


下载地址(6.09K):
IT博客网



* "deltmp.exe" 程序快捷使用:
 勾选 "禁用最近文档" 和 "启用日志", 点击 "安装",
 就可不用管它了,它会工作很好。
----------------------------------------------------
* “deltmp.exe” 详细说明:
 开机时自动清空 windows 临时文件夹的用 asm32 编写的专用小程序。
 版本: 1.0  运行环境: Win9x/Me/NT/2000/XP
 特为喜欢用 Realplayer 程序播放在线连续剧的初级电脑用户编写,
 因为 Realplayer 播放后会无故留下一些巨大的的临时电影文件,
 它们与日俱增吞食硬盘,给这些用户带来麻烦。
 本程序只会删除 "temp" 目录下的所有文件,
 如果你的临时文件夹的名称不是 "temp" 则它会拒绝工作。
 这样可以保证你的重要数据不会被误删。
 例如如果你在 "autoexec.bat" 中写下: deltree /y c:\temp ,
 而这时正好有人将它改写为: deltree /y c:\windows ,
 等你重启机子时,那人会在暗地里偷笑。
 日志如果大于 64K 将自动清空。
* 程序清单:
 deltmp.exe (14.848K)	主程序。
 readme.txt		帮助文件。
* 命令方式("开始" --> "运行"):
 deltmp.exe		清空临时文件夹。
 deltmp.exe /log	清空临时文件夹并记录日志。
 deltmp.exe /showlog	查看日志
 注:
  在这种手动运行方式下,如果删除正在运行的程序所产生的临时文件,
  则删除这些文件将失败,其它文件仍正常删除。
* 关于 "禁用最近文档" (附加的一个小功能):
 选中或去掉 "禁用最近文档", 再点 "安装" 或 "卸载",
 即可设置注册表,达到相应的功能。
* "程序安装" 界面:
 只要程序不在 windows 目录中,点击它,就会弹出 "程序安装" 界面。
 你可以在此界面上 "安装" 或 "卸载" 本程序。
 如果有日志,你可点击 "查看日志" 按扭,来查看日志。
* 联系作者:
 Copyright 2006 Dabor
 Email: dabor@163.com
 Blog: http://www.cnitblog.com/dabor

posted @ 2006-06-12 11:04 dabor 阅读(2486) | 评论 (3)编辑 收藏

2006年5月31日 #


下载地址(169K):
IT博客网


主程序: SndCalc.exe  357K
动态库: SndCalc.dll  13K
本程序没有修改 calc.exe 源程序的任何部分.
语音由 Dabor 录制并变音.
程序免注册免安装, 希望你能喜欢.


&&^^^^^^^^^^^^^^^^^^^^^^^^^^^^&&
|   微软计算器语音扩展 V1.01  |
|    Email: dabor@163.com     |
|    Copyright 2005 Dabor     |
|    All Rights Reserved      |
 @@==========================@@


* 版本 1.01 更新 [2006.05.30]:
    程序功能没变, 只是去掉了一些沉余数据和代码.
* 版本 1.01 更新 [2005.11.12]:
    修复一个菜单显示不同步的错误.
* 版本 1.00 产生:[2005.11.06]


posted @ 2006-05-31 11:59 dabor 阅读(658) | 评论 (3)编辑 收藏

仅列出标题  下一页