#define SCL_1 PORTAbits.RA11 //74ls164
#define SDA_1 PORTAbits.RA10
#define E PORTBbits.RB13 //lcd
#define RS PORTBbits.RB12
#define LCD PORTBbits.RB11
void delay_us(unsigned int j)
{
unsigned int i;
for(i=0;i++;i<j)
{
Nop();
}
}
void __delay_ms(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<130;j++);
}
void write_command(unsigned char data)//lcd写指令
{
unsigned char i ,temp;
for(i=0;i<8;i++)
{
temp=data;
temp&=0x80;
if(temp==0x80)
SDA_1=1;
else
SDA_1=0;
data=data<<1;
SCL_1=0;
// __delay_us(1);
delay_us(1);
SCL_1=1;
}
RS=0;
E=1;
// __delay_us(1);
delay_us(1);
E=0;
}
void write_data(unsigned char data) //lcd写数据
{
unsigned char i ,temp;
for(i=0;i<8;i++)
{
temp=data;
temp&=0x80;
if(temp==0x80)
SDA_1=1;
else
SDA_1=0;
data=data<<1;
SCL_1=0;
//__delay_us(1);
delay_us(1);
SCL_1=1;
}
RS=1;
E=1;
// __delay_us(1);
delay_us(1);
E=0;
}
void lcd_write_char(unsigned char x, unsigned char y,unsigned char dat)
{
write_data(dat);
}
void lcd_init(void)
{
write_command(0x01); /*清除显示*/
__delay_ms(10);
write_command(0x38); /*设置 8 位格式,2 行,5*7*/
__delay_ms(10);
write_command(0x0c); /*整体显示,关光标,不闪烁*/
__delay_ms(10);
write_command(0x06); /*设定输入方式,增量不移位*/
__delay_ms(10);
}
void display2(void)
{
write_command(0xc0); /*初始位置*/
lcd_write_char(0,2‘2’);
lcd_write_char(1,2,‘3’);
lcd_write_char(2,2,'.');
}
void init(void)
{
PORTA=0x0000;
TRISA=0x0000;
PORTB=0x0000;
TRISB=0xc000; ///RB14 RB15 为输入
PORTC=0x0000;
TRISC=0x0001; ////RC0为输入
lcd_init(); ////液晶屏显示初始化
void main(void)
{
init();
while(1)
{
write_command(0x38); /*设置 8 位格式, 2行, 5*7*/
write_command(0x0c); /*整体显示,关光标,不闪烁*/
write_command(0x06); /*设定输入方式,增量不移位*/
LCD=1;
display2();
}
之前改程序用在PIC18F2420上能正常驱动1602正常显示(SDL_1 SCL_1 用的是74LS164) 但是现在把该程序用在PIC24FV32KA304上时显示屏不能正常显示 屏幕出现闪动 不知道是为什么? 与配置位和端口复用有关吗
此帖出自
小平头技术问答
看手册关于时钟配置的部分啊,时钟树框图,还有选择时钟源,频率的设置。我给你的别的型号的手册中,相关内容的截图,你找你的手册里,肯定有这些东西,哪个寄存器,哪个位怎么配,都有说明。好好找找。
一周热门 更多>