P3口:P3端口的内部也具有上拉电阻,也是一个8为的双向输入输出端口。端口置于高电平时,可以作为输入[5]。都是双向的输入输出端口,内部都有上拉电阻,不过同P0,P1和P2端口不同的是,P3端口不仅可以作为常用的输入输出端口,而且它具有第二种功能用途,如表2所示。
表2 P3端口第二功能
端口 第二功能
P3.0 串行输入端口
P3.1 串行输出端口
P3.2 /INT0 外部中断0
P3.3 /INT1 外部中断1
P3.4 T0 定时器T0的外部计数输入端
P3.5 T1 定时器T1的外部计数输入端
P3.6 /WR 外部的数据存储器写选通
P3.7 /RD 外部的数据存储器读选通
2.4 LED电路显示设计
在该设计的显示电路中,供选用的既有LCD显示屏也有LED数码显示管,由于数码管已经能够满足显示要求且成本较低,故选择数码管进行电路的显示。
2.4.1 LED硬件电路连接及设计原理
751位一体数码管的硬件连接图如图7所示,此751位一体数码管有两组引脚,一组用来段选,一组用来位选。在该硬件电路中,因为所用的是单片机AT89S51和ADC0808,因此不管是用来位选的引脚还是用来段选的引脚都可以与芯片相应的端口直接相连接。不过由于单片机的高电平的驱动能力有限,因此在该数字电流表的设计中使单片机用低电平进行驱动,故需要用一个具有8个电阻的排阻,使P0口置于低电平,然后连接LED数码管进行显示[6]。
图7 751位一体数码管
2.4.2 LED显示电路程序设计
显示电路程序:
void display() // 数据处理
{
md=(cmd-128)*30%128; //被测电流与输出电压的关系
ge=md%10; //751个数码管应显示的值的计算
shi=md%10%10;
bai=md%100%10;
qian=md%1000%10;
wan=md%10000%10;
disled(wex[1],dux[wan]);
disled(wex[2],dux[qian]);
disled(wex[3],0x80);
disled(wex[4],dux[bai]);
disled(wex[5],dux[shi]);
disled(wex[6],dux[ge]);
}
void disled(uchar wex[],uchar dux[]) //显示
{
P2=wex[];
delay(10);
P0=dux[];
delay(10);
}
2.5 报警电路的设计
该系统设计具有报警电路,其硬件电路如图8所示。该电路通过对输出电流大小的判断,来决定是否需要报警,即如果流过的电流超过程序中所设置的值,则系统通过单片机来控制蜂鸣器,使之发出声响,用来达到提醒的目的,也可以根据使用者意愿来改变设置值。
图8 报警电路硬件连接图
3. 软件程序设计
3.1程序编写
该系统的软件程序编程是指语言编程方面,可以选择的有C语言和汇编语言,虽然汇编语言也容易理解,但使用起来比较繁琐,比如使用单片机进行控制时,一个简单的功能实现需要能用几十行甚至上百行的程序,而同样的功能实现如果使用C语言进行编程则只需要短短的几行程序,更加简单方便,另外C语言的功能也比较强大,使用的比较普遍,因此在本系统的语言编程中选择使用更为广泛的C语言进行编程,具体程序编程见附录。
3.2程序流程图
程序开始执行后,首先进行初始化,然后对被测电流进行A/D转换,通过单片机处理后的数据进行显示,以及根据设置电流决定是否报警与否,最后判断是否又有电流输入,有则继续进行,反之结束。软件实现流程图如图9所示。 51单片机的数字电流表设计+C语言源码+电路图+仿真图(5):http://www.751com.cn/zidonghua/lunwen_1334.html