找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1417|回复: 2
打印 上一主题 下一主题
收起左侧

STC15w408单片机6线驱动1602源代码

[复制链接]
跳转到指定楼层
楼主
ID:903328 发表于 2021-4-10 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用STC15w408单片机6线驱动1602液晶屏
    1602的驱动最多需要11线,其中数据线需要8条。也可以采用4条数据线来驱动,只写不读的话,还可以省去RW线,这样最少只需要6线就可以驱动1602。
     采用4条数据线一般是使用单片机端口的高四位,但16脚封装的STC15W408没有完整的高四位可以采用,所以就使用了低四位。
     单片机程序如下:
/**
LCD1602  6线驱动显示
使用STC15W408AS        , 数据口使用P1.0-P1.3 低四位
**/
#include <STC15.h>
#include <intrins.h>
#define uchar unsigned char
sbit RS = P5^5;
sbit EN = P5^4;
void Delay1us()                   //@11.0592MHz                   //STC15W408AS使用
{
        _nop_();
        _nop_();
        _nop_();
}

void LCD_en_write()
{
   EN = 1;
  Delay1us();
   EN = 0;
}

void Delay1ms()                //@11.0592MHz                //STC15W408AS使用
{
        unsigned char i, j;

        _nop_();
        _nop_();
        _nop_();
        i = 11;
        j = 190;
        do
        {
                while (--j);
        } while (--i);
}

void LCD1602_Write(uchar style,uchar input)                  //使用STC15W408AS低四位发送数据
{
    uchar temp,high;
        Delay1ms();
   if(style==0)
     RS = 0;                                           //命令‘0’
   else
     RS = 1;                                         //命令‘1’
         high =         input>>4;                    //数据高四位移到低四位
         temp= P1 & 0XF0;                        //清低四位
         P1 = temp |( high & 0x0f); //写高四位
         Delay1ms();
         LCD_en_write();
         temp= P1 & 0XF0;                        //清低四位
         P1 = temp |( input & 0x0f);//写低四位
         Delay1ms();
     LCD_en_write();
}

void LCD_Display(uchar x, uchar y, uchar *str)
{
if(y)
          LCD1602_Write(0,(0xc0+x));
   else
          LCD1602_Write(0,(0x80+x));
   while(*str !='\0')
     LCD1602_Write(1,*str++);
}



void LCD1602_initial()
{        
        LCD1602_Write(0,0x28);        //设置16*2显示,5*7点阵,4位数据接口
           Delay1ms();
        LCD1602_Write(0,0x28);
        Delay1ms();
        LCD_en_write();
        Delay1ms();
        LCD1602_Write(0,0x28);
        LCD1602_Write(0,0x0c);        //开显示 无光标
        LCD1602_Write(0,0x06);        //读写一字节后地址指针加1
        LCD1602_Write(0,0x01);         //清屏
        Delay1ms();
}
/*
void LCD1602_set_XY(uchar x,uchar y)
{
   if(y)
          LCD1602_Write(0,(0xc0+x));
   else
          LCD1602_Write(0,(0x80+x));
}

void LCD1602_write_data(uchar x,uchar y,uchar dat)
{
LCD1602_set_XY(x,y);
LCD1602_Write(1,dat);
}
*/
void main()
{        uchar TestStr[] = {"Welcome!"};
        uchar str[] = {"LCD1602 display"};
        

        LCD1602_initial();
        Delay1ms();
        LCD_Display(4, 0, &TestStr);         //显示字符串
        Delay1ms();
        LCD_Display(0, 1,  &str);
        while(1);
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:903328 发表于 2021-4-10 17:07 | 只看该作者
补充一下,采用的是16脚封装的STC15W408没有连续完整的高四位,20脚封装以上的都有。
回复

使用道具 举报

板凳
ID:584814 发表于 2021-4-17 10:56 | 只看该作者
legao123 发表于 2021-4-10 17:07
补充一下,采用的是16脚封装的STC15W408没有连续完整的高四位,20脚封装以上的都有。

无须补充。1602的6线接法可以任意口随意接,只要独占就可以。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表