首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将输出数据从DS1307打印到LCD 16x2

如何将输出数据从DS1307打印到LCD 16x2
EN

Stack Overflow用户
提问于 2021-11-18 18:02:41
回答 1查看 81关注 0票数 0

我有个简单的项目。我有一个ATmega32连接到一个16x2LCD和一个DS13027芯片。我使用8位数据与16x2液晶显示器。下面是密码。

代码语言:javascript
复制
#define F_CPU 8000000UL

#define LCD_DPRT  PORTA     
#define LCD_DDDR  DDRA      
#define LCD_DPIN  PINA      
#define LCD_CPRT  PORTB     
#define LCD_CDDR  DDRB      
#define LCD_CPIN  PINB      
#define LCD_RS  0           
#define LCD_RW  1           
#define LCD_EN  2

#include <avr/io.h>
#include <util/delay.h>

void i2c_stop(void);
void i2c_write(unsigned char data);
void i2c_start(void);
void i2c_init(void);
unsigned char i2c_read(unsigned char ackVal);
void rtc_init(void);
void rtc_setTime(unsigned char deviceRegister, unsigned char value);
unsigned char *rtc_getTime(unsigned char deviceRegister);
void lcdCommand( unsigned char cmnd );
void lcdData( unsigned char data );
void lcd_init();
void lcd_gotoxy(unsigned char x, unsigned char y);
void lcd_print( const char * str );

int main(void) {

    unsigned char *hours;

    rtc_init();
    rtc_setTime(0x02, 0x22);

    hours = rtc_getTime(0x02);

    lcd_init();
    lcd_gotoxy(1,1);
    lcd_print(hours[0]);
    lcd_gotoxy(2,1);
    lcd_print(hours[1]);

    while (1);
    return 0;
}

void i2c_stop(void){
    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
}

void i2c_write(unsigned char data){
    TWDR = data;
    TWCR = (1<<TWINT) | (1<<TWEN);
    while(!(TWCR & (1<<TWINT)));
}

void i2c_start(void){
    TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
    while(!(TWCR & (1<<TWINT)));
}

void i2c_init(void){
    TWSR = 0x00;
    TWBR = 0x47;
    TWCR = 0x04;
}

unsigned char i2c_read(unsigned char ackVal){
    TWCR = (1<<TWINT) | (1<<TWEN) | (ackVal<<TWEA);
    while( !( TWCR & (1<<TWINT)) );
    return TWDR;
}

void rtc_init(void){
    i2c_init();
    i2c_start();
    i2c_write(0xD0);
    i2c_write(0x07);
    i2c_write(0x00);
    i2c_stop();
}

void rtc_setTime(unsigned char deviceRegister, unsigned char value){
    i2c_start();
    i2c_write(0xD0);
    i2c_write(deviceRegister);
    i2c_write(value);
    i2c_stop();
}

unsigned char *rtc_getTime(unsigned char deviceRegister){

    unsigned char *data;

    i2c_start();
    i2c_write(0xD0);
    i2c_write(deviceRegister);
    i2c_stop();

    i2c_start();
    i2c_write(0xD1);
    *data = i2c_read(0);
    i2c_stop();

    return data;
}

void lcdCommand( unsigned char cmnd ){
  LCD_DPRT = cmnd;          
  LCD_CPRT &= ~ (1<<LCD_RS);
  LCD_CPRT &= ~ (1<<LCD_RW);
  LCD_CPRT |= (1<<LCD_EN);  
  _delay_us(1);             
  LCD_CPRT &= ~ (1<<LCD_EN);
  _delay_us(100);           
}

void lcdData( unsigned char data ){
  LCD_DPRT = data;          
  LCD_CPRT |= (1<<LCD_RS);  
  LCD_CPRT &= ~ (1<<LCD_RW);
  LCD_CPRT |= (1<<LCD_EN);  
  _delay_us(1);             
  LCD_CPRT &= ~ (1<<LCD_EN);
  _delay_us(100);           
}

void lcd_init(){
  LCD_DDDR = 0xFF;
  LCD_CDDR = 0xFF;

  LCD_CPRT &=~(1<<LCD_EN);  
  _delay_us(2000);          
  lcdCommand(0x38);         
  lcdCommand(0x0E);         
  lcdCommand(0x01);         
  _delay_us(2000);          
  lcdCommand(0x06);         
}

void lcd_gotoxy(unsigned char x, unsigned char y){  
 unsigned char firstCharAdr[]={0x80,0xC0,0x94,0xD4};//table 12-5  
 lcdCommand(firstCharAdr[y-1] + x - 1);
 _delay_us(100);    
}

void lcd_print( const char * str ){
  unsigned char i = 0 ;
  while(str[i]!=0)
  {
    lcdData(str[i]);
    i++ ;
  }
}

当我运行这个程序时,LCD上什么都不会出现。我不知道为什么它不输出时间在液晶显示器上。

  1. 为什么不显示在LCD上?
  2. 如何输出LCD上的小时(代码明智)?
EN

回答 1

Stack Overflow用户

发布于 2021-11-18 18:27:58

可能是显示项。如果您有一个与标准控制器HD44780兼容的显示器,您可以尝试以下方法(多年前我在PIC程序集中为1x16编写了它,所以我不会直接在这里发布此代码):

Enable

  • lcdCommand(0x38)

  • 在LCD数据总线上放置0x30,保持RW和RS行低(命令模式)等待25 RS

  • Strobe启用,即Ena=high、等待1或2 s、Ena=low

  • 等待4.1ms

H19Strobe Enable H 210H 111等待140

  • H 212/code>H 113µ//;功能集:以8位模式显示,5x7 Font

  • lcdCommand(0x0C) //0x0E可能与yout lcd

  • lcdCommand(1) //clear

  • lcdCommand(0x06) //;入口模式集一样正确:自动增长,没有Shift

  • lcd_gotoxy(1,1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70024644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档