1.85必杀元素 STC11F04单片机串口终端程序 - 张建波专栏 - 博客频道 - CSDN.NET【学习】新手可以这样理解“


    如果输入的不是以上的命令,则提示错误信息。

    感兴趣的朋友,把代码直接复制到 KeilC51 V2 里,直接编译即可运行。

    输入LED1_OFF可以把板子上的LED1熄灭

    祝你好运!

    相关部门:根据客户端请求确认的程序模块

    总结:STC单片机还是够强大吧。 呵呵

    相关部门的找人过程:执行查询功能


    传达室:Web服务器

    stdio.h ------ printf 标准的输出函数

    注:



    例如,网通传奇sf,在串口终端输入?


    #include"reg51.h"
    #include "stdio.h"
    #include"intrins.h" //_nop_()
    #include "string.h"

    unsigned int tick;

    int hh,mm,ss; //时:分:秒
    sbit LED1=P1^0;
    sbit LED2=P3^7;

    unsigned char cmd_buf[32];
    char cmd_len=0;

    void cmd(void);

    char putchar (unsigned char i)
    {
    ES = 0; //关串口中断
    TI = 0; //清零串口发送完成中断请求标志
    SBUF = i;
    while(TI ==0); //等待发送完成
    TI = 0; //清零串口发送完成中断请求标志
    ES = 1; //允许串口中断
    return SBUF;
    }

    void Task_1s()
    {
    //printf("S=[%d:%d:%d]\r\n",hh,mm,ss);
    _nop_();
    }
    void Task_1m()
    {
    // printf("M=[%d:%d:%d]\r\n",传奇私服qq群,hh,mm,ss);
    _nop_();
    }
    void Task_1h()
    {
    //printf("H=[%d:%d:%d]\r\n",hh,mm,ss);
    _nop_();
    }
    //0.1ms = 100us
    void Timer0(void) interrupt 1 using 1 //定时器0中断外理
    {
    TR0=0;
    TH0=(65536-2000)/256;
    TL0=(65536-2000)%256;

    tick++; //计数值+1
    if(tick>999) //加到10次即1秒
    {

    tick=0;
    ss++;
    if(ss>59){
    mm++;
    ss=0;
    if(mm>59){
    hh++;
    mm=0;
    if(hh>11){
    hh=0;

    }
    Task_1h();//1小时定时任务
    }
    Task_1m(); //1分钟定时任务
    }
    Task_1s();//1s定时任务
    }
    TR0=1;
    }




    void UART_one_Interrupt_Receive(void) interrupt 4
    {
    unsigned char k = 0;
    if(RI==1)
    {
    RI = 0;
    k = SBUF;
    if(cmd_len>32)
    {
    cmd_len=0;
    }
    cmd_buf[cmd_len++]=k;
    printf("%c",k);


    }
    else
    {
    TI = 0;
    }
    }

    void cmd()
    {
    if(strncmp(cmd_buf,"time",4)==0)
    {
    printf("Time=[%d:%d:%d]\r\n",hh,mm,ss);
    }
    else if(strncmp(cmd_buf,"LED1_ON",7)==0)
    {
    LED1=1;
    }
    else if(strncmp(cmd_buf,"LED1_OFF",8)==0)
    {
    LED1=0;
    }
    else if(strncmp(cmd_buf,"LED2_ON",7)==0)
    {
    LED2=1;
    }
    else if(strncmp(cmd_buf,"LED2_OFF",8)==0)
    {
    LED2=0;
    }
    else if(strncmp(cmd_buf,"?",1)==0strncmp(cmd_buf,"help",4)==0)
    {
    printf("time\r\n");
    printf("help\r\n");
    printf("LED1_ON\r\n");
    printf("LED1_OFF\r\n");
    printf("LED2_ON\r\n");
    printf("LED2_OFF\r\n");
    }
    else
    {
    printf("\r\n错误的命令,1.85必杀元素,如果不知道命令请输入【?】或【help】。\r\n");
    }
    }
    void main()
    {
    SCON=0x50; //0101,0000 8位可变波特率,无奇偶校验位
    TMOD=0X21;
    TH1=TL1=-(11059200L/12/32/9600);
    TR1=1;
    tick=0;
    hh=0;
    mm=0;
    ss=0;
    TH0=(65536-2000)/256;
    TL0=(65536-2000)%256;
    TR0=1;
    ET0=1;
    ES=1; //允许串口中断
    EA=1; //开总中断
    printf("SystemStart...\r\n");
    while(1)
    {
    _nop_();
    if(cmd_len>0)
    if(cmd_buf[cmd_len-1]=='\r')
    {
    cmd();
    printf("\r\nEXOS_V1#:");
    cmd_len=0;
    }
    }
    }



    本程序关键在于使用了C语言的内置函数来完成以上功能。


    总体上,目前就实现了以上功能,传奇3私服。 感兴趣的朋友可以自己再加入一些命令。

    输入Time 命令,可以查询到现在单片机内部的时间。



    由于时间仓促仅仅只实现了简单的几个命令。

    help
    LED1_ON
    LED1_OFF
    LED2_ON
    LED2_OFF


    找人要求:客户端的查询请求


    可以把Web服务器想像成学校大门的传达室,传奇私服

    输入LED1_ON 可以把板子上的 LED1点亮

    推荐使用 Xshell 软件作为终端调试工具。如下图

    整个源代码如下:

    string.h -----strncmp 字符串比较函数

    返回结果:通过Web服务器返回给客户端

    找人结果:查询结果

    用STC11F04单片机做的串口终端程序。类似交换机的telnet命令。



    上一篇: 传奇3私服发布网 回忆录 - lee576的专栏 - 博客频道 - CSDN.NET寻找最大的K个数 - 树袋大熊的专栏 - 博客频
    下一篇:下面没有链接了