【解析新特性】300W单路输出工业电源>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 基于STC89C516RD+的多任务PC控制系统

共1条 1/1 1 跳转至

基于STC89C516RD+的多任务PC控制系统

工程师
2014-12-02 20:13:51    评分
硬件环境:STC89C516RD+DS1302DS18B20ADC0804LCD1602SG12864
开发环境:KeilC51V9.01 



说明: 本系统是基于STC89C516RD下基于前后台多任务的PC机控制系统,实现的功能如下:


1.通过超级终端输入命令字符串控制LED的亮灭、数码管连续显示相应输入的数字;


2.实时时钟、温度采样同时在160212864液晶上显示,通过超级终端修改时间和设置闹钟,具备整点报时和闹钟提醒功能,并将闹钟状态同步显示在液晶上;


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編程》等网上甚为称赞的经典书籍,吸收了其中关于程序代码规范的内容,使得程序有了可以的移植性和可读性,但之后细节的调试就是另外一回事了,最后硬是花了一个晚上来调试各处细节并优化程序设计,终于实现了预期效果,这个设计算是告一段落了,接下来该搞智能小车了。


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]