設置 | 登錄 | 註冊

目前共有3篇帖子。

今天,我又把课本上的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);
}

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。