#define lcd_bus P1
sbit wr = P3^4; //写控制信号
sbit rd = P3^5; //读控制信号
sbit cd = P3^6; //通道信号, cd=1指令 cd=0 数据
void delay(uchar t); //延时
void check( void ); //忙标准检查
void wr_com ( uchar wr_com ); //写命令
void wr_data( uchar wr_data); //写数据
uchar *word; //显示字
//******************************************************************
//*******读取忙标准,工作状态
//******************************************************************
void check( void )
{ unsigned char m;
do{ lcd_bus = 0xff;
cd=1;
rd=0;
m=lcd_bus;
rd=1;
}
while((m&0x03)!=0x03);
}
//*******************************************************************
// 延时程序
//*******************************************************************
void delay(uchar t)
{
uchar i,j;
for(i=0;i <t;i++)
{ for(j=0;j <10;j++); }
}
void delay1(uint k)
{
uchar j;
while ((k--)!=0)
{ for (j=0;j <125;j++);}
}
//**********************************************************
// 写命令
//***********************************************************
void wr_com( uchar w_com)
{
check();
cd = 1;
lcd_bus = w_com;
wr=0;
wr=1;
}
//************************************************************
// 写数据
//************************************************************
void wr_data( uchar w_data)
{
check();
cd = 0;
lcd_bus =w_data;
wr=0;
wr=1;
}
//************************************************************
// 初始化设置
//************************************************************
void lcd_init (void)
{ wr_data(0x00);
wr_data(0x00);
wr_com (0x40); //文本首地址
wr_data(0x20);
wr_data(0x00);
wr_com (0x41); //文本宽度设置
wr_data(0x00);
wr_data(0x08);
wr_com (0x42); // 图形首地址
wr_data(0x20);
wr_data(0x00);
wr_com (0x43); //设置图形宽度
//即一行显示所占字节数
wr_com (0xa7); //光标设置
wr_com (0x80); //显示方式设置 逻辑“或”合成
wr_com (0x9c); //显示开关
}
//**********************************************************
// 函数原型: void draw_dot(x,y)
// 功 能; T6963屏上打点
// 入口参数: 横坐标(x),枞坐标(y)
// 出口参数:
//***********************************************************
void draw_dot(x,y)
{ uint m;
uchar n=0x00,t=0x00;
m=(y&0x7f)*0x20;
n=x/8;
t=m-(m/0x100)*0x100 +n;
wr_data(t);
t=m/0x100+0x08;
wr_data(t);
wr_com(0x24);
if(y> =0x80) n=0xf8;
else n=0xf0;
t=x%8;
t=(~t)&0x07;
t=n|t;
wr_data(t);
}
//********************************************************
// 函数原型: void sys_init(void)
// 功 能; c8051f005系统初始化设置
// 1、关闭看门狗 2、外部时钟使能 3、端口设置
// 入口参数:
// 出口参数:
//********************************************************
void sys_init(void)
{ uint i;
WDTCN = 0xde;
WDTCN = 0xad;
OSCXCN = 0x67;
for (i=0; i < 100; i++) ;
while (!(OSCXCN & 0x80)) ;
OSCICN = 0x88;
OSCICN=0X07;
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40;
PRT0CF = 0x00;
PRT1CF = 0x7f;
PRT2CF = 0x00;
P2 = 0xff;
rd=1;
wr=1;
cd=1;
}
//***********************************************************
// 主函数
//***********************************************************
main()
{ int x;
sys_init ();
lcd_init();
while(1) {
for(x=0;x <128;x++)
{
draw_dot(x,x);
}
}
}此主题相关图片如下:
能