找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1458|回复: 2
收起左侧

1602 液晶时钟

[复制链接]
ID:220908 发表于 2017-7-20 11:16 | 显示全部楼层 |阅读模式
#include <reg51.h>
#include <intrins.h>
sbit RS  =  P2^0;      //寄存器选择输入
sbit RW  =  P2^1;      //液晶读/写控制
sbit E  =  P2^2;      //液晶使能控制
void lcd_w_cmd(unsigned char com);
void lcd_w_dat(unsigned char dat);
void lcd_int();

unsigned char lcd[]="hello!";
unsigned char diz[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8b,0x8d,0x8e,0x8f};       
void delay(unsigned int i)
{
  unsigned int k;
  for(k=0;k<i;k++);
}


void main()
{  int i;
        lcd_int();         //LCD初始化
          delay(20505);  
          while(1) {

                for(i=0;i<6;i++){
                          lcd_w_cmd(0x80+i);  //0x80代表第一行第一个,0xc0代表第二行第一个,可以往后加到F,F之后就无法显示了
                        lcd_w_dat(lcd[i]);
                        lcd_w_cmd(0xc5+i);
                        lcd_w_dat(lcd[i]);
                }          
/*22222        for(i=16;i>=0;i--){
                        lcd_w_cmd(0x8F-i);  //0x80代表第一行第一个,0xc0代表第二行第一个,可以往后加到F,F之后就无法显示了
                        lcd_w_dat('S');
                        delay(10505);
               
                        lcd_w_cmd(0x8F-i);
                        lcd_w_dat(0x00);  
               
               
                } */          
        }


}


void delay1()
{
  _nop_();
  _nop_();
  _nop_();
}
void lcd_int()
{
          lcd_w_cmd(0x3c);          //0011 1100  如果只能显示一行,那就写多次这个代码,第一次可能是3写进去了,C没写进去
           _nop_();
          lcd_w_cmd(0x3c);          //0011 1100
           _nop_();
          lcd_w_cmd(0x0c);          //0000 1110 低2位是控制闪烁,低1位是控制光标
           _nop_();       
          lcd_w_cmd(0x01);          //0000 0001 清屏幕指令,将以前的显示内容清零
           _nop_();
          lcd_w_cmd(0x06);          //0000 1010 显示模式设置:光标右移,字符不移
           _nop_();
          lcd_w_cmd(0x80);          //1000 0000
}

void lcd_w_cmd(unsigned char com)
{
           RW=0;          //从lcd写指令或数据
           delay1();
          RS=0;          //输入指令
        delay1();
           E=1;                  //读取信息
           delay1();
           P1=com;
           delay1();
           E=0;                 //执行指令
           delay1();
           RW=1;         //从lcd读取数据
           delay(255);
}
void lcd_w_dat(unsigned char dat)
{
  RW=0;
  delay1();
  RS=1;
  delay1();
  E=1;
  delay1();
  P1=dat;
  delay1();
  E=0;
  delay1();
  RW=1;
  delay(255);
}

回复

使用道具 举报

ID:339946 发表于 2018-5-28 19:49 来自手机 | 显示全部楼层
有没有仿真原理图啊
回复

使用道具 举报

ID:836924 发表于 2020-11-1 10:23 | 显示全部楼层
如果用4排的液晶剩下2排显示怎么加??
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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