一、硬件电路
由于电路用单片机操控,所以电路十分简练。其电路原理图见下图,印制板图如下图所示。
电路的中心部分是AT89C2051单片机,前面说到它有Pl和P3两组I/O口,咱们这儿只用到Pl口,共8个引脚。图中Cl、R9组成典型的上电复位(即在加电时单片机复位)电路,XTAL、C2、C3与AT89C2051片内振动电路组成时钟振动器。值得注意的是,C2、C3的容量不能与图中数值误差太大,不然或许引起不起振或振动不稳定。XTAL的频率能够在4-20MHz之间,不过,频率的改动会导致程序运转速度的改动,这样就需要调整延时子函数的参数。事实上,不调整参数亦可,仅仅此刻延迟时刻不再是1秒,其延迟时刻会跟着XTAL频率的下降而添加。
二、软件部分
本程序包括两个函数,一个是主函数,另一个是延时子函数。源程序如下(为了便于解说,咱们为每行程序加上了编号):
程序各行效果如下:
00行:把AT89C2051的头文件“AT89x051.H”包括进来。
01行:声明Delay()延时子函数,该函数有一个无符号整型参数k,一同函数前面的void标明函数不回来函数值。
02行:延时子函数的开端,一同声明两个无符号整型变量i和j。
不过请注意,这儿没有象上期的程序相同,把表明函数开端的“{”独自成行,而是把下一行写在一同了。事实上,写C程序的时分,能够把多行写作一行,C编译器只需遇到分号就认为是一行句子的完毕。
当然,咱们不能由于C程序有这个特色,就随意把多行协作一行书写,实践书写C程序的时分,仍是要养成杰出的程序书写习气,依照约定俗成的准则来书写。
03行:声明for()循环。这个循环的初始条件是i=0,中止条件是i<k,循环计数是每循环一次,用手计数的变量i加1。因而,这个循环的循环次数便是k次。这样,只需改动k的值(即改动Delay()延时子函数的参数k的值),就能够很容易地操控循环次数,然后取得不同的延时时刻。
04行:声明嵌套在03循环中的一个新的for()循环,这个循环与上一个循环类似,其循环次数是120次。本循环与上一个循环嵌套后,使得总的循环次数达120×k次。
05行:第一个分号,表明L条空句子,占用一个机器时刻,以完成延时的意图。后边的两个“}”中,第一个“}”是04行for()循环的完毕标志,程序遇到它时,将主动回来04行,使用于循环计数的变量j加1,一同判别j是否小于120,假如否,则转入05行;第二个是03行for()循环的完毕标志,程序遇到它则会回来03行。
06行:Delay()延时子函数的完毕标志。
07行:声明主函数main()。这儿的主函数不需要参数,也不回来函数值。
08行:主函数的开端标志“{”。
与01行的Delay()延时子函数相同,习气上也会把下一行的句子与本行的花括号写在一同。
09行:声明一个无条件for()循环,“;;”以使单片机重复履行任务,使流水灯能不停地活动。
10行:大括号表明09行for()循环的开端,句子“Pl_0=0”是让单片机Pl口的O号引脚(即Pl.0)输出低电平,依据电路可知,此刻LED1会被点亮。
11行:以参数值1000调用01行声明的Delay()延时子函数,使程序运转到此处时,延时1000毫秒(即1秒)。
12-41行:与10、11行的效果相同。
简而言之,10-41行的效果便是顺次点亮LEDl-LED8这八个发光二极管。
42行:09行完毕标志,程序运转到此处时,主动回来09行,由于09行的for()循环是无条件循环,所以程序马上会转到10行持续运转。
三、软件仿
真首要依照前面的办法树立一个新的工程,并把上面的程序依照前面的办法输入并存盘。然后依照下面的办法进行仿真调试。
1.把树立好的C程序参加工程
双击左面工程窗口中的“Target1”,翻开“Target1”夹,然后右击“SourceGroupl”,挑选“添加文件到组‘SourceGroup1’(AddFilestoSourceGroup1)”,并把方才输入的C程序参加到工程中。
2.连编方针程序
连编之前要设置方针的输出特点,不然连编出来的方针程序中不含有用于固化到单片机中的十六进制文件。
设置方针输出特点的办法是:
先单击工程窗口中的“Target1”以选中它,然后挑选“工程”菜单中的“方针‘Targetl’特点(OpTIonsfortargetTargetl)”,体系弹出对话框,在对话框中挑选“输出(Output)”选项卡,并选中“生成HEX文件(CreateHEXFile)”选项(生成十六进制文件),当然,假如你的单片机编程器不支持十六进制文件的话,就要用转化软件把生成的十六进制文件转化成二进制了。
设置好方针特点后,按“F7”开端连编方针程序。连编的成果信息会在输出窗口中显现出来,若显现“0过错(s),0正告(s)(0Error(s),0Warning(s))”表明连编成功,不然阐明连编不成功。若连编不成功,在输出窗口中会显现过错所内行及过错原因,然后依据详细的过错进行修正,修正完成后,再次连编,直到连编成功。
3.仿真调试
连编好方针程序后就能够开端仿真调试了,其过程是:
1)挑选“调试(Debug)”菜单中的“开端/中止调试(Start/StopDebugSession)”,进入仿真调试状况。
2)挑选“外围设备(Peripherals)”菜单中的“I/OPorts“选项中的“Port1”,翻开I/O口状况模拟器。状况模拟器中的“&raDIC;”表明相应的I/O口引脚状况为“1”电平状况。
如:图中表明Pl口(Portl)的8个引脚全为“1”电平状况。
3)按“Fll”进行单步盯梢调试。每按一次“Fll”,程序会履行一步(即一条句子),若程序的履行影响了I/O口的状况,在I/O口状况模拟器上会有相应的显现。由于每按Fll一次,程序只履行一步,所以在调试循环程序时,或许会有许多的步数,如本例中每调试一次Delay()子函数中的两个循环,其步数高达六万步,因而要设法削减步数,本例中可先将Delay()子函数的参数值由1000改为1,等调试成功后再改回1000,这样就能够大大削减循环步数。
4)再次挑选“调试(Debug)”菜单中的“开端/中止调试(Start/StopDebugSession)”,退出仿真调试状况。
四、程序固化
当程序通过了仿真调试,就能够使用编程器把它固化到单片机,并刺进做好的线路板上,赏识你的劳动成果了。