与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。
3 设计
3.1 概念结构设计
这部分要说明下设计的一个概念的大概结构流程图,如图3.1所示:
图3.1 整体框架图
在上面的流程图中这里详细介绍下循环部分的内容,如图3.2所示:
图3.2 循环部分流程图
以上是大概的设计思路的流程图,以下是以主程序为主并配以文字的形式进行下简述:
void main()
{
System_Init();
LCD_Initial();
Initial_DS1302();
GotoXY(0,0);
Print("Make: ");
GotoXY(0,1);
Print("Temp: ");
while(1)
{
DS1302_GetTime(&CurrentTime);
if(FLAG1 == 1)
{
TIMING();
}
DingToStr();
GotoXY(6,0);
Print(DingString);
tmpchange();
temp1 = tmp();
GotoXY(6,1);
printnum(temp1);
KeyScan();
KeyDeal();
Delay1ms(200);
}
}
/*****按键K_SHUT的中断响应函数********/
void exter0() interrupt 0
{
RELAY = 0;
}
/*****按键K_OPEN的中断响应函数********/
void exter1() interrupt 2
{
RELAY = 1;
}
这段程序中首先单片机从主函数开始执行void main,进行函数的初始化System_Init,调用了单片机的开启中断功能,然后进行LCD1602显示屏函数的初始化LCD_Initial,之后是DS1302函数的初始化Initial_DS1302,之后是GotoXY(0,0)以及Print("Make: ")这里是主要液晶显示屏上第一行开始显示Make的时间,GotoXY(0,1)已经Print("Temp: ")是从第二行开始显示温度TEMP的内容;然后开始是一个定时控制的灯的一个循环系统,首先是读取DS1302中的时间,然后通过if判断语句,如果FLAG=1,那就表示定时项开启定时的功能,也就是代表按键按了开启此项功能,然后进入TIMING这个函数,开始进行定时。之后的DINGTOSTR函数在LCD1602上进行,因为LCD不能直接显示整形的数据,只能显示字符形式所以要进行一个转换。完成此项工作后调用函数GOTOXY(6,0)在第一行的第751个开始显示定时并显示,然后通过tmpchange函数启动DS18B20那个芯片,开启温度转换功能,再通过TMP这个函数读取出来已经保存在TMP这个里面的温度,显示在第二行的第751个位置;而KEYSCAN函数是按键扫描函数,扫描在执行过程中按下的按键;KEYDEAL是确定有没有按键按下,看到底是哪个按键按下了,然后记下来,并得出是哪个相应的键被按下,开始进入相应的函数进行处理,最后又是单片机处理速度过快所以加上一个延时语句函数,我们通过增加延时,这样就可以达到一秒一秒变化,这样便是一个循环过程。最后再调用了K-SHUT和K-OPEN中断响应。 基于uCOS-II的家庭智能控制系统的开发+仿真图(6):http://www.751com.cn/zidonghua/lunwen_689.html