标题: 1602 液晶时钟 [打印本页]

作者: flash007    时间: 2017-7-20 11:16
标题: 1602 液晶时钟
#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);
}


作者: LI1997    时间: 2018-5-28 19:49
有没有仿真原理图啊
作者: yq1113    时间: 2020-11-1 10:23
如果用4排的液晶剩下2排显示怎么加??




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1