开发环境:KeilC51V9.01
说明: 本系统是基于STC89C516RD下基于前后台多任务的PC机控制系统,实现的功能如下:
1.通过超级终端输入命令字符串控制LED的亮灭、数码管连续显示相应输入的数字;
2.实时时钟、温度采样同时在1602或12864液晶上显示,通过超级终端修改时间和设置闹钟,具备整点报时和闹钟提醒功能,并将闹钟状态同步显示在液晶上;
3.控制ADC0804读取测点电压值,并显示在终端上。
下面为程序流程图
下面为实物效果图
由于开发板上的12864接口是母口形式的,不能插在开发板上,所以这里用1602代替;
顺便上传部分关于细节的部分源程序:
//***----receive:接收函数设定
//***----接收字符串和存放字符串
void Rec_Terminal(char size)
{
uchar temp;
do
{
while(!RI);
RI = 0;
temp = SBUF;
if((temp == 0x08) && (input_size > 0)) //退格指令
{
input_size = input_size - 1;
Sendbyte(0x08);
Sendbyte(' ');
}
SBUF = temp;
while(!TI);
TI = 0;
if(temp != 0x08) //当输入退格键(0x08)时,数据不存入存储数组
{
rec[input_size] = temp;
input_size ++;
}
if(input_size >= size) //当接收数组存放的数目大于设定值时,跳出循环
break;
}
while(temp != '\r'); //当操作回车键时,不进入循环
}
//***----compare比较函数设定,带返回值(0 or 1)
//***----输入两个字符串的地址
uchar Compare_Terminal(char *i,char *j)
{
while(*i != '\0')
{
if(*i++ != *j++) //字符串逐个字符进行比较,若不相同,返回值为0
return FALSE;
}
if(*j != '\r') //没有操作回车键,返回值为0
return FALSE;
return TURE;
}
//***----clear清除缓存函数
void Clear_Terminal(char size)
{
char n;
for(n=0; n<=size; n++)
{
rec[n] = 0; //清零
}
input_size = 0; //清零
}
void Write_Time(void)
{
uchar temp,i;
Send(">> Please input current time \r\n");
Send(">> 输入格式:年月日时分秒(闹钟)时(闹钟)分 \r\n");
//由于此前存储数组中已存放有数据,所以需要对存储数组进行清除
Clear_Terminal(input_size); //清除缓存区
//***判断输入数据是否有效
do
{
while(!RI);
RI = 0;
temp = SBUF;
if((temp == 0x08) && (input_size > 0)) //退格指令
{
input_size = input_size - 1;
Sendbyte(0x08);
Sendbyte(' ');
}
SBUF = temp;
while(!TI);
TI = 0;
if(temp != 0x08) //当输入退格键(0x08)时,数据不存入存储数组
{
rec[input_size] = temp; //存放输入的时间信息
input_size ++;
}
if(input_size > 25) //当接收数组存放的数目大于设定值时,跳出循环
break;
}
while((temp != '\r')
…………
总结:这个简单的设计其实是属于软件的,外围的硬件设备直接借用开发板上的,大体程序不用花多长时间久写完了,由于曾看过不少大虾写的C语言书籍,像《C语言深度解剖》《高品质的C編程》等网上甚为称赞的经典书籍,吸收了其中关于程序代码规范的内容,使得程序有了可以的移植性和可读性,但之后细节的调试就是另外一回事了,最后硬是花了一个晚上来调试各处细节并优化程序设计,终于实现了预期效果,这个设计算是告一段落了,接下来该搞智能小车了。