打印

大家给看看 我的液晶显示怎么回事啊

[复制链接]
1713|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ql1007|  楼主 | 2010-8-6 22:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:
现象:液晶只显示一个SEG的段,另个不显示,不知道怎么回事,大家给指点指点啊,我查了配置就这些了 没其他的啊,片子是PIC16LF1936,内置液晶驱动,VLCD脚没接使用内置的偏压

谢谢啊
#include <pic.h>
unsigned char displaydata[8];
unsigned char bKey;
unsigned char  segtytle;
unsigned char j;
extern void port_init();
extern void LCDInit(void);
extern unsigned char setLCDsegment(void);
//内部晶振振荡
void main(void)
{
port_init();
LCDCON = 0b10000011;  //LCD off, WERR off, SLPEN on, FOSC/256(和以前的不一样), 1/4 multiplex//直接就是0X07
LCDPS = 0b00110110;   //type B waveform, 1/3 BIAS, 1:7 prescaler  LCD的相位寄存器 ,0110就是1:7的预分频
LCDREF = 0b10000000;  //internal LCD reference on, VDD source, FVR ignore reference ladder power
LCDCST = 0b00000000;  //maximum contrast  LCD对比度控制寄存器   
LCDSE0 = 0b10110001;  //segment SEG 0 4 5 7  
LCDSE1 = 0b11110000;  //segment 12~15 enable
LCDSE2 = 0b11111111;//segment 16~23 enable
LCDDATA0=0;
    LCDDATA1=0;
    LCDDATA2=0;
LCDDATA3=0;
LCDDATA4=0;
    LCDDATA5=0;
LCDDATA6=0;
LCDDATA7=0;
    LCDDATA8=0;
LCDDATA9=0;
LCDDATA10=0;
    LCDDATA11=0;
LCDRL = 0b01010100;   //low power mode, A type waveform:4clock for A and 12 clock for B, B type waveform:4 clock for A and 28 clock for B
LCDIF = 0;
LCDIE = 0;            //interrupt disabled
LCDEN = 1;            //LCD on
displaydata[7]=8;
setLCDsegment();

}
void port_init()
{
OSCCON = 0b01101010;//内部4M晶振运行 方便定时器0

  ANSELA=0;//设置A口为普通数字口,必须先把ANESELA设为数字IO 这样才能使用输出输入功能
  ANSELB=0;////B口也设置成数字IO口
  ANSELE=0;//E口也设置成数字IO口
  TRISA=0x00;//RA6 7做晶振输入 ,0-5做为数码管控制输出
  TRISB=0x00;
TRISC = 0x00; //键盘的列设为输出,行设为输入,RC7 C6 C5 C4 输出 ,C0 C1 C2 C3输入
  TRISD = 0x00; //数码管控制 设为输出
  TRISE = 0B00001000; //RE3始终为输入 RE0 1 2为数码管输出
}
//*********************************************************************
//function:更新所有LCD显示
//input:   全局变量TokenDisplay[]和TimeSegment
//output:  1(正常)或者0(有误)
//effect:  LCDDATAx
//note:    displaydata[x]非0~9,TimeSegment非1~3时返回0,否则返回1
//*********************************************************************
unsigned char setLCDsegment(void){
const unsigned char Arabic[16]={
    0xFA,0x60,0xD6,0xF4,0x6C,0xBC,0xBE,0xE0,
    0xFE,0xFC,0xEE,0x3E,0x9A,0x76,0x9E,0x8E
};    //0123456789abcdef
   
unsigned char data0=0,data2=0,data5=0,data8=0,data1=0,data3=0,data4=0,data6=0,data7=0,data9=0,data10=0,data11=0; //LCDDATAx暂存
unsigned char num;
if(displaydata[7]<16){
  num=Arabic[displaydata[7]];
}else{
  return 0;
}

/*
两个 SEG,只扫了1个SEG 另个没扫。。。。为啥啊 ????
*/
data0|=(num&0x80)>>7;
data3|=(num&0x40)>>6;
data6|=(num&0x20)>>5;
data9|=(num&0x10)>>4;
data2|=(num&0x08)>>2;
data5|=(num&0x04)>>1;
data8|=(num&0x02);


    LCDDATA0=data0;
    LCDDATA1=data1;
    LCDDATA2=data2;
LCDDATA3=data3;
LCDDATA4=data4;
    LCDDATA5=data5;
LCDDATA6=data6;
LCDDATA7=data7;
    LCDDATA8=data8;
LCDDATA9=data9;
LCDDATA10=data10;
    LCDDATA11=data11;//LCDDATA等于就是输出到段码的值
return 1;
}
沙发
ql1007|  楼主 | 2010-8-6 22:15 | 只看该作者
搞PIC时间不长,不足之处大家多多指教,恳请大家给看看了 哪有问题啊

使用特权

评论回复
板凳
NE5532| | 2010-8-7 10:33 | 只看该作者
拿示波器打波形看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

122

帖子

0

粉丝