#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
{
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上时显示屏不能正常显示 屏幕出现闪动 不知道是为什么? 与配置位和端口复用有关吗
晶振不是一样的 2420用的4M PIC24FV32KA304用的8M 我之前给2420换过8M的晶振也能正常显示
除了单片机本身,对外的接口,连接的电路,两种情况是否一样。先确保一样。再看两种情况的时序是否一致,你说复用是不是和屏幕通信的io复用了别的功能? 看复用有没有破坏原有时序,先把其它功能去掉,看看效果。
我感觉是时序的事 我测了一下 8M晶振 我的一条空指令大约是4us 不是1us吗
cpu的主频和晶振频率不见得一样。要看对应的配置寄存器。分频,倍频什么的。既然能看波形,就把正常和不正常的波形都看看,就比较出区别来了。
我用的75LS164 发现不正常的时钟脉冲有丢失 我用的16位的PIC 8M晶振 配置字该如何设置啊
我用的75LS164 发现不正常的时钟脉冲有丢失 我用的16位的PIC 8M晶振 配置字该如何设置啊
看手册关于时钟配置的部分啊,时钟树框图,还有选择时钟源,频率的设置。我给你的别的型号的手册中,相关内容的截图,你找你的手册里,肯定有这些东西,哪个寄存器,哪个位怎么配,都有说明。好好找找。
用示波器看看三个IO口的波形和原来板子的区别,在对症下药
首先确认配置端口是否正确,一般换芯片都是配置出现问题的多。