本帖最后由 superminx 于 2014-4-21 15:32 编辑
各位大神。本人是刚接触单片机的,很菜鸟。最近在自学PIC这东西。关于PIC驱动1621有些问题,求大神解救
#include<PIC16F73.h>
#include <stdio.h>
#define BIAS 0X52 //1/3偏压,4COM
#define XTAL 0X28 //系统时钟选择为外部XT振荡器
#define WDTDIS 0X0A //禁止WDT溢出标志输出
#define TIMERDIS 0X08 //时基输出禁能
#define SYSDIS 0X00 //关闭系统时钟和偏压发生器
#define SYSEN 0X02 //打开系统时钟
#define LCDON 0X06 //打开偏压发生器
#define LCDOFF 0x04 //关闭LCD显示
#define nop();
#define CS RC5
#define WR RC3
#define DATA RC4
#define LED RC2 //这个是我验证的输出端口,接LED;
#define uchar unsigned char
#define uint unsigned int
/***************************延时子函数******************************/
void delay1s() //延时1S
{
uchar i;
uint j;
for(i=0;i<10;i++)
for(j=0;j<13000;j++);
}
/*************************写数据函数***************************/
void Ht1621Wr_Data(uchar dat,uchar cnt) //从高位cnt写入数据
{
uchar i;
for(i=0;i<cnt;i++)
{
if((dat&0x80)==0)
DATA=0;
else
DATA=1;
WR=0;
nop();
nop();
nop();
WR=1;
dat<<=1;
}
}
/*************************发送命令写入函数***************************/
void Ht1621WrCmd(uchar Cmd)
{
CS=0;
nop();
nop();
Ht1621Wr_Data(0x80,4); //写入命令标志100
Ht1621Wr_Data(Cmd,8); //写入8位 Cmd命令数据
nop();
nop();
CS=1;
nop();
nop();
}
/***********************显示函数**************************/
void display(unsigned char col,unsigned char pag)
{
pag<<=2;
col<<=4;
CS=0;
nop();
nop();
Ht1621Wr_Data(0xA0,3); //写入数据标志101
Ht1621Wr_Data(pag,6); //写入Y轴的数据(写入6位数据地址)
Ht1621Wr_Data(col,4); //写入X轴数据 (写入低4位数据)
CS=1;
nop();
nop();
}
//*************************LCD off函数********************************/
void LCD_OFF()
{
uchar i;
uchar j=0;
for(i=0;i<32;i++)
{display(0x00,j);
j++;
}
}
/*************************HT1621B初始化设置*************************/
void SETUP_HT1621() //HT1621偏压、背极、工作方式设置
{
CS=1;
WR=1;
DATA=1;
nop();
nop();
nop();
Ht1621WrCmd(BIAS);
Ht1621WrCmd(XTAL);
Ht1621WrCmd(WDTDIS);
Ht1621WrCmd(SYSEN);
Ht1621WrCmd(LCDON);
Ht1621WrCmd(TIMERDIS);
}
//*******************************主函数******************************/
main() //主函数
{
ADCON1=0x06; //这里,我查了很多网上的资料,不知道设置是否对
TRISB=0x7C; //这是我设置按键输入的设置
TRISC=0X00; //C口设为输出,以控制HT1621驱动LCD
SETUP_HT1621();
LCD_OFF();
delay1s();
while(1)
{
display(0x0f,2); //在COM和SEG组成的4X32表格中,显示第二行的4个点。
LED=~LED;
delay1s();
}
}
烧录进去,LED正常工作,但是LCD屏就死无反应,我实在是想不出办法,所以求各位大神解救。
本人菜鸟一个,请见谅 |