基于单片机的宠物喂食器电路设计
4 电路的软件部分
单片的使用除了硬件,同样也要软件的使用,我们写汇编程序编程CPU可执行的机器码有两种方法,一种是手工汇编,一种是机器汇编。机器汇编通过汇编软件变为机器码,用于MSC-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从使用普通汇编语言到高级语言的不断发展,Keil是目前最流行开发MCS-51系列单片机的软件。Keil c51汇编,PLM语言和C语言的程序设计,界面友好。Keil是美国keilsoftware公司出品的52系列兼容单片机c语言开发系统。用过汇编语言后再使用C语言来开发,体会更加深刻。 程序框图:
13
基于单片机的宠物喂食器电路设计
开始 系统初始化 开始倒计时 Y 1号键按下? Y 2号键按下? Y 3号键按下? Y 4号键按下? Y 5号键按下? 1号盒倒计时时间设定 2号盒倒计时时间设定 3号盒倒计时时间设定 4号盒倒计时时间设定 5号盒倒计时时间设定 倒计时完? Y 结束
图2.8 程序框图
源程序如下:
#include
14
基于单片机的宠物喂食器电路设计
sbit b4=P1^3; sbit b5=P1^4; sbit bell=P2^6; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; sbit s4=P3^3; sbit s5=P3^4; sbit add=P3^6; sbit dec=P3^7; char
second1=1,minute1=1,hour1=1,second2=2,minute2=2,hour2=2,second3=3,minute3=3,hour3=3;
char second4=4,minute4=4,hour4=4,second5=5,minute5=5,hour5=5; uchar g;
unsigned char code table[]={//共阴极0~f数码管编码 0x3f,0x06,0x5b,0x4f, //0~3 0x66,0x6d,0x7d,0x07, //4~7 0x7f,0x6f,0x77,0x7c, //8~b 0x39,0x5e,0x79,0x71 //c~f };
void delay(uint z) {
uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
void delay1(uint z) {
15
基于单片机的宠物喂食器电路设计
for(;z>0;z--); }
void display(uchar a,uchar b,uchar c) {
uchar i,j;
i=a/10; j=a;
P2=0xfb; P0=table[i]; delay(2); P2=0xf7; P0=table[j]; delay(2); i=b/10; j=b; P2=0xef; P0=table[i]; delay(2); P2=0xdf; P0=table[j]; delay(2); i=c/10; j=c; P2=0xfe; P0=table[i]; delay(2); P2=0xfd; P0=table[j]; delay(2); }
16
基于单片机的宠物喂食器电路设计
void delay2(uint z) { uint x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--) display(0,0,0); }
void init() {
EA=1; //开总中断
ET0=1; //本例中使用的是定时器T0,如果用T1。则为ET1=0,TMOD=0x10。 TMOD=0x01; //定时器工作方式1
TH0=(65535-50000)/256; //因为晶振用的是11.0592MHZ。在取初值时,大概定义为一个中断为50MS
TL0=(65535-50000)%6; TR0=1; P1=0xff; }
void turn_val1(char newval,uchar flag,uchar slnum) {
if(flag) //判断是加一还是减一 {
newval++; switch(slnum) {
case 1:if(newval>23) newval=0; display(hour1,minute1,second1); hour1=newval;
17