作者共发了3篇帖子。 内容转换:不转换▼
 
点击 回复
296 2
今天,我又把课本上的Insert Str的程序移植到了单片机的1602液晶上
一派护法 十九级
1楼 发表于:2015-12-2 11:25
程序(部分):
#include <reg51.h>
#include "lcd.h"

#define LCD1602_WriteCom(c) LcdWriteCom(c)
#define LCD1602_PutChar(c) LcdWriteData(c)
#define LCD1602_Init() LcdInit()

void LCD1602_Goto(unsigned char x, unsigned char y)
{
    LCD1602_WriteCom(0x80 + 0x40 * y + x);
}

void LCD1602_Puts(char* str)
{
    for (; *str != '\0'; str++)
        LCD1602_PutChar(*str);
}

unsigned char strlen(char *str)
{
    unsigned char len = 0;
    for (; *str != '\0'; str++, len++);
    return len;
}

void insert(char *s1, char *s2)
{
    unsigned char f = 0;
    unsigned char len1 = strlen(s1);
    unsigned char len2 = strlen(s2);
    char *p1 = s1;
    char *p2 = s1 + len1 - 1;
    while (*p1 != '\0' && *p1 != *s2)
        p1++;
    if (*p1 != '\0')
    {
        for (; p2 > p1; p2--)
            *(p2 + len2 - 1) = *p2;
        f = 1;
    }
    while (*s2)
        *p1++ = *s2++;
    *(s1 + len1 + len2 - f) = '\0';
}

void main()
{
    char s1[50] = "abcdef";
    char *s2 = "d45";
   
    LCD1602_Init();
    LCD1602_Goto(0, 0);
    LCD1602_Puts(s1);
    LCD1602_Puts(",");
    LCD1602_Puts(s2);
    LCD1602_PutChar(':');
   
    insert(s1, s2);
    LCD1602_Goto(0, 1);
    LCD1602_Puts(s1);
    while (1);
}

运行效果:

一派护法 十九级
2楼 发表于:2015-12-2 11:26
这次移植,可以直接完全照抄书上的void insert(char *s1, char *s2)函数的代码,一点也不需要改动。因为单片机也是用的C语言。
一派护法 十九级
3楼 发表于:2015-12-2 17:17
结构体的使用:
typedef struct {
    unsigned char x;
    unsigned char y;
    char *str;
} LCDText;

void LCD1602_Put(LCDText *text)
{
    LCD1602_Goto(text->x, text->y);
    LCD1602_Puts(text->str);
}

void main()
{
    char s1[50] = "abcdef";
    char *s2 = "d45";
    LCDText text;
   
    LCD1602_Init();
    LCD1602_Goto(0, 0);
    LCD1602_Puts(s1);
    LCD1602_PutChar(',');
    LCD1602_Puts(s2);
    LCD1602_PutChar(':');
   
    insert(s1, s2);
    text.x = 0;
    text.y = 1;
    text.str = s1;
    LCD1602_Put(&text);
    while (1);
}

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:296 回复数:2
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2015-12-2 17:17
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。