书买回来10来天了,看的不多,今天下午看P88的实例21:用for语句设计鸣笛报警程序
首先声明,自己不是用的protues仿真,自己搭了一个小的电路图,其实就是一个最小系统,然后直接用杜邦线引出P37,接一个蜂鸣器,按照书中给出的程序写进单片机,接上蜂鸣器,但是却不叫,琢磨过后,想想可能是直接用普通的IO口形式电流太小,是uA级的,设置为强推挽的形式后可以了,蜂鸣器叽叽哇哇的叫了起来,可能在proteus里,只是考虑了电压,没有考虑电流是否能达到要求。仿真毕竟只是仿真,实际动手制作才是王道
补充:就这一个小小的例子,竟然话费了我一个下午的时间,因为刚开始的时候手上没有蜂鸣器,想着既然是高低电平切换,用一个小的LED灯替换一下也行,就是这个错误让我折磨了我一下午。因为用小LED灯的时候,会发现小灯至始至终都是亮着的,因为程序中的delay1600()和delay800()分别只有0.6ms和1.2ms,这个时间太短了,所以小LED灯还没来得及灭就立马点亮了,这个过程肉眼看不出来,以后千万不能随便来进行替换电路了,奶奶的。这本书依然是值得看得
以下为勘误(说明,我用的单片机型号是STC12C5A32S2,不是AT89C51,头文件用的是"STC12C5A32S2.H"):
1. P164表7-2 串行口的4种工作方式,其中方式2应该是9位异步收发
2.P173实例52-1中,在sbit p=PSW^0;后面添加代码sbit TB8=0x9b;否则编译时可能会出现TB8的错误提示
3.P198实例62的程序书上没有,光盘里的ex62.c跟实例63的程序一样,坑爹啊!!!
4.P223例67,按照给的原理图在进行实物连接时是不正确的,图中LCD1602的VSS和VEE接地,实物连接时,应该接一个10K电位器,VEE接电位器的中间脚,另外一个脚接地,第三个脚不能接电源,否则显示不出来!!!另外那个10k电阻排可以不接,直接把IO口接1602的D0~D7即可。
5.P228实例68的程序是光盘上的ex67,程序中显示部分缺少3行,分别是:
void DisplayHour()子函数中WriteData(digit[i]);后加 WriteAddress(0x45);
void DisplayMinute()子函数中WriteData(digit[i]);后加WriteAddress(0x48);
void DisplaySecond()子函数中WriteData(digit[i]);后加WriteAddress(0x4b);