现在可以将数据写入显示器并可以读出来,就是不显示。在程序中也打开了显示。JHD801的控制芯片是KS0066,单行8字符
#include <iom16.h>
#include<inavr.h>
#include<ina90.h>
#include<avr_macros.h>
#include<comp_a90.h>
#include"lcd1602.h"
#define RS PORTB_Bit0
#define RW PORTB_Bit1
#define E PORTB_Bit2
unsigned char r_data;
unsigned char count;
unsigned char ReVal;
char dispch[8]={0,0,0,0,0,0,0,0}; //存放显示值数据
//延时子程序
void delay(long time)
{
unsigned char i;
long j;
for(j=time;j>0;j--)
for(i=20;i>0;i--);
}
void delay_us(long time)
{
while(time--);
}
void delay_ms(long time)
{
unsigned int i;
while(time--)for(i=0;i<550;i++);
}
///////////////显示部分////////////////////////
//用于输入命令
void disp_cmd(unsigned char cmd)
{
DDRA=0XfF;
// RW=1;
// RS=0;
// E = 1;
// delay(10);
// E = 0;
// while(PINA_Bit7);
PORTA=cmd;
RS=0;
RW=0;
E = 1;
delay_us(500);
E = 0;
delay_us(500);
}
unsigned char Read_Lcd(void)
{
unsigned dat;
DDRA=0X00;
delay_us(10);
RW=1;
RS=1;
E = 1;
// delay_us(1);
delay_us(5);
E = 0;
dat=PINA;
dat=PINA;
DDRA=0XfF;
return dat;
}
//用于显示字符内容
void disp_char(unsigned char dat)
{
DDRA=0X7F;
RW=1;
RS=0;
E = 1;
delay(10);
E = 0;
while(PINA_Bit7);
PORTA=dat;
RS=1;
RW=0;
E = 1; // 发送信号,E下降沿触发
delay_us(500);
E = 0;
delay_us(500);
}
//初始化显示
void initial_disp(void)
{
RS=0;
RW=0;
// disp_cmd(0x80); disp_char('0');delay_ms(2);
// disp_cmd(0x80); disp_char('0');delay_ms(2);
// disp_cmd(0x80); disp_char('0');delay_ms(2);
// disp_cmd(0x80); disp_char(0x20);delay_ms(2);
disp_cmd(0x34);//设置工作方式,两行字符,8位地址
delay_ms(10);
disp_cmd(0x34);//设置工作方式,两行字符,8位地址
delay_ms(10);
disp_cmd(0x34);//设置工作方式,两行字符,8位地址
delay_ms(10);
// disp_cmd(0x0c);//显示状态,无光标无闪烁
disp_cmd(0x0f);
delay_ms(10);
disp_cmd(0x06);//输入方式
delay_ms(10);
disp_cmd(0x01);//清屏
delay_ms(10);
disp_cmd(0x02);//归零
delay_ms(10);
}
//显示方位角,仰角,一本振频率,AGC控制码
void dispchar(unsigned char pos ,char str)
{
disp_cmd(pos); //行地址1
delay_ms(5);
disp_char(str); //方位角显示值
delay_ms(5);
}
void main(void)
{
DDRD_Bit2=1;
delay_ms(1000);
DDRA=0XfF;
DDRB_Bit0=1;
DDRB_Bit1=1;
DDRB_Bit2=1;
// E=1;
// delay(20);
// E=0;
initial_disp(); //初始化屏幕
initial_disp(); //初始化屏幕
initial_disp(); //初始化屏幕
disp_cmd(0x84);
disp_char('1');delay_ms(5);
disp_char('2');delay_ms(5);
disp_char('3');delay_ms(5);
// disp_cmd(0x84);
// ReVal=Read_Lcd(); delay_ms(5);
// ReVal=Read_Lcd(); delay_ms(5);
//ReVal=Read_Lcd(); delay_ms(5);
while (1)
{
PORTD_Bit2=0;
delay_ms(500);
PORTD_Bit2=1;
initial_disp();
delay_ms(500);
disp_cmd(0x84);
disp_char('1');delay_ms(5);
disp_char('2');delay_ms(5);
disp_char('3');delay_ms(5);
// disp_cmd(0x01);
// dispstat(1);
// dispchar(dispch);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
也是不能正确显示
楼主的应该是0801吧?
难道 08XX系列的都是这味????
一周热门 更多>