#include "reg_lcd52.h"
#include "lcdxs.h"
#define uchar unsigned char
#define Bias_Duty 0x29 /*此处设置LCD的COM数量和偏置*/
#define Rc256 0x18 /*启用内部RC振荡*/
#define LCD_ON 0x03 /*打开LCD偏置发生器*/
#define SYS_EN 0x01 /*打开系统振荡*/
#define TONE_OFF 0x08 /*内部蜂鸣器关*/
//#define TONE_2K 0x13 /*打开蜂鸣器并且频率为2KHz*/
//#define TONE_4K 0x12 /*打开蜂鸣器并且频率为4KHz*/
/*没用用到蜂鸣器可以不用理睬*/
sbit lcd_data=P3^3; /*定义数据线端口*/
sbit lcd_wr =P3^4; /*定义写命令端口*/
sbit lcd_rd =P3^5;
sbit lcd_cs =P3^6; /*定义片选端口*/
void delay(unsigned long i)
{
while(i--);
}
//ht1622写一位数据
void input_bit(void)
{
lcd_wr=0;
;
;
lcd_wr=1;
;
;
}
//写命令函数
void lcd_cmdwrite(uchar Cmd)/*写控制命令函数*/
{
uchar i,CmdByte;
lcd_cs=0; /*低电平有效*/
lcd_data=1;
input_bit();
lcd_data=0;
input_bit();
input_bit();
CmdByte=Cmd;
for(i=0;i<8;i++)
{
lcd_data=(bit)(CmdByte&0x80);
input_bit();
CmdByte<<=1;
}
lcd_data=0;
input_bit();
lcd_cs=1;
}
//写数据函数
void lcd_datawrite(uchar Add,Ddat)/*写控制命令函数*/
{
uchar i,j;
lcd_cs=0; /*低电平有效*/
lcd_data=1;
input_bit();
lcd_data=0;
input_bit();
lcd_data=1;
input_bit();
j=Add;
j<<=2;
for(i=0;i<6;i++)
{
lcd_data=(bit)(j&0x80);
input_bit();
j<<=1;
}
j=Ddat;
for(i=0;i<8;i++)
{
lcd_data=(bit)(j&0x80);
input_bit();
j<<=1;
}
lcd_cs=1;
}
void lcd_init(void)
{
uchar i;
delay(100);
lcd_cmdwrite(Bias_Duty);
lcd_cmdwrite(Rc256);
lcd_cmdwrite(SYS_EN);
lcd_cmdwrite(LCD_ON);
lcd_cmdwrite(TONE_OFF);
for(i=0;i<64;i++) lcd_datawrite(i,0);
}
void main(void)
{
uchar i,j,k;
lcd_init();
for(i=0;i<64;i=i+2)
{
k=1;
for(j=0;j<8;j++)
{
lcd_datawrite(i,k);
k<<=1;
k=k+1;
delay(30000);
}
delay(30000);
}
main和init里面的for循环为什么i<64啊.SEG应该是32位啊,64是怎么来的?
如果要单独显示某几段应该怎么改写程序啊
|