原创 单片机系统在线操作控制的设计

2008-8-27 18:51 2738 14 15 分类: MCU/ 嵌入式

      单片机与计算机的通信控制是单片机系统应用的最前端技术,也是单片机这么多年来得以生存的原因。


      结合考虑到程序的升级及修改等要求,采用WINBOND的 W78B516,使的系统具有在线维护功能。


   使用”超级终端“即可轻松调试.


/*使用微机的超级中断口控制,波特率为19200*/
//
#include <reg52.h>         //52单片机定义文件
#include <stdio.h>         //基本输入输出函数
#include <string.h>        //字符串处理函数
#include <ctype.h>         //字符处理函数
sbit ekp0 =P2^0;           //模拟控制设备口,共6个      
sbit ekp1 =P2^1;
sbit ekp2 =P2^2;
sbit ekp3 =P2^3;
sbit ekp4 =P2^4;
sbit ekp5 =P2^5;
/*--------------------------------------
   void main(void)
---------------------------------------*/
void main(void)
{
unsigned char i,ch;
char chs[9]="\0";        //定义9个字符接收单元
SCON  = 0x50;            //串口方式1
T2CON = 0x30;            //T2作波特率发生器,16位自动重装模式
RCAP2L= 0xec;            //波特率为19200时初值
TL2   = 0xec;            //
RCAP2H= 0xff;            //
TH2   = 0xff;            //
TI    = 1;               //
TR2   = 1;               //开波特率发生器
printf("\n");            //换行
while (1)
  {
  printf("%s","\n\t    On-line operating system V1.0\n");  //系统开机显示字符
  printf("%s","\tBuild by Gavin Hu, all right reserved.\n");
  while (1)
    {
    printf("%s","\nPlease input password:");              //提示输入口令
 scanf("%s",chs);                                      // 接收状态
    if (strcmp(chs,"12345678"))                           //与系统密码比较
      printf("%s","Password error\n");                    //口令错提示,等待重新输入口令
   else break;                                         // 口令正确,进入操作控制状态
 }
  while (1)
    {
    printf("%s","\nOn-line operating system>");     //在线控制提示符   
 scanf("%s",chs);                                //接收字符串
 for (i=0; i<4; i++)                             //将字符转换为大写
   chs=toupper(chs);
 if (!strcmp(chs,"EXIT")) break;                 //如为退出命令,退出在线控制
 i=strlen(chs);                                  //取字符串长度
 ch=chs[2];                                      //取最后一个字符
 chs[2]='\0';                                    //最后一个字符单元为00
 if (i>3||strcmp(chs,"OP")||ch<'0'||ch>'5')      //如字符串长度大于3或前二个不等于"OP"或最后一个数小于0或大于5//
   {printf("%s","Bad command\n"); continue;}     //提示命令错,重新开始接收字符
 printf("%s%c ","Equipment No:",ch);             //命令正确,显示设备号
 switch (ch)
      {
   case '0': if (ekp0) {ekp0=0; printf("%s","on\n"); break;}//按最后一位数对端口操作并显示"on"或"off"
               else {ekp0=1; printf("%s","off\n"); break;}
   case '1': if (ekp1) {ekp1=0; printf("%s","on\n"); break;}
               else {ekp1=1; printf("%s","off\n"); break;}
   case '2': if (ekp2) {ekp2=0; printf("%s","on\n"); break;}
               else {ekp2=1; printf("%s","off\n"); break;}
   case '3': if (ekp3) {ekp3=0; printf("%s","on\n"); break;}
               else {ekp3=1; printf("%s","off\n"); break;}
   case '4': if (ekp4) {ekp4=0; printf("%s","on\n"); break;}
               else {ekp4=1; printf("%s","off\n"); break;}
   case '5': if (ekp5) {ekp5=0; printf("%s","on\n"); break;}
               else {ekp5=1; printf("%s","off\n"); break;}
   default:  break; 
   }
 }
  }
}


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1454780 2009-6-8 18:22

有没有论文啊?
相关推荐阅读
用户925035 2009-11-15 00:44
通用按键消抖函数 -- 数据与过程分离
AUTO:  nicksean 不务正业          项目里经常处理按键消抖, 本来这个消抖的过程是与具体按下的键无关的, 可以前的代码总是在消抖的同时处理具体的按键值, 再加上长按 短按 组合...
用户925035 2009-11-13 13:16
液晶ST7920串行显示
液晶显示128*64以7920为主控制器,采用3线制,比较经济简单。代码如下.....
用户925035 2009-11-13 13:11
DS18B20 C51完整版
使用WINBOND W78C516单片机,11.0592MHZ晶振,用共阳LED数码管P0口输出段码,P1口扫描/*******************************************...
用户925035 2009-11-12 13:19
74HC164驱动数码管
          74HC164是串行输入,并行输出接口器件,可用在单向的并行输出/并行地址锁存等. 74HC164因为价格便宜,容易使用特别适合使用在在需要用到数码管显示IO口又比较紧张的电子产品...
用户925035 2009-11-10 20:13
at24c512多字节读写函数 欢迎测试
刚写的at24c512多字节读写函数,欢迎测试。/********************************************************************函数功能:EE...
用户925035 2009-11-10 19:59
旋转编码器
    很好的旋转编码器的读码程序,设旋转编码器的输出波形如下                 ______        ______        ______        ______正转时:...
EE直播间
更多
我要评论
1
14
关闭 站长推荐上一条 /3 下一条