/****先定义数组类型再赋值**L236*********/
/*2014 8 19 16:40**PAST*CODE1028**PAST**/
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sfr AUXR=0x8e; //辅助寄存器
sfr SADDR=0xA9; //从机地址寄存器
sfr SADEN=0xB9; //从机地址屏蔽寄存器
int j; //待放入数组的数据
int k,*p=&k; //数组下标位变量
uint a[10],i; //定义数组a 循环总变量i
uint aa=0; //
uint val,Buff;
sfr P4=0xc0;
sfr P5=0xc8;
sbit out=P5^5; //
sbit CS=P3^5; //12864 PIN4
sbit SID=P3^6; //12864 PIN5
sbit SCLK=P3^7; //12864 PIN6
sbit key1=P3^2; //
sbit key2=P3^3; //
sbit key3=P3^4; //
uchar code disdt[11]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,
0xb6,0xb7,0xb8,0xb9,0xa3};
/*------------------延时子程序------------------------*/
void delay_1ms(uint x)
{
int i, j;
for (i=0; i<x; i++)
for (j=0; j<1500; j++);
}
/*------------------延时子程序-----------------------------*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<100;j++);
}
/*------------------写命令到LCD-----------------------*/
void write_com(unsigned char cmdcode)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
i_data=0xf8;
delay(10);
CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=cmdcode;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=cmdcode;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
}
/*-------------------写数据到LCD----------------------*/
void write_data(unsigned char Dispdata)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
i_data=0xfa;
delay(10);
CS=1;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=Dispdata;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=Dispdata;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
}
/*------------------初始化LCD屏-----------------------*/
void lcd_init()
{
uchar comdata;
delay_1ms(100);
comdata=0x30;
write_com(comdata); /*功能设置:一次送8位数据,基本指令集*/
comdata=0x04;
write_com(comdata); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
comdata=0x0f;
write_com(comdata); /*显示设定:开显示,显示光标,当前显示位反白闪动*/
comdata=0x01;
write_com(comdata); /*清DDRAM*/
comdata=0x02;
write_com(comdata); /*DDRAM地址归位*/
comdata=0x80;
write_com(comdata); /*把显示地址设为0X80,即为第一行的首位*/
}
/*********************************/
void timer0() interrupt 1
{
aa=aa+1;
TH0=0X53;
TL0=0X32;
if(aa==500)
out=!out,
aa=0;
}
/*--------------显示------------------*/
void display() /*显示A函数*/
{
write_com(val); /*地址*/
write_data(0xA3); /*半个字符*/
write_data(disdt[(Buff%100)/10]);/*十位*/
val++;
write_com(val); /*地址*/
write_data(0xA3); /*半个字符*/
write_data(disdt[Buff%10]); /*个位*/
val++;
}
/**************显示 数据显示*********************/
void dispfile()
{
write_com(0x9B); /*--数---*/
write_data(0xCA);
write_data(0xFD);
write_com(0x9C); /*--据---*/
write_data(0xBE);
write_data(0xDD);
write_com(0x9D); /*--显---*/
write_data(0xCF);
write_data(0xD4);
write_com(0x9E); /*--示---*/
write_data(0xCA);
write_data(0xBE);
}
/*********************************/
void main()
{
lcd_init(); //初始化LCD屏
dispfile();
AUXR=0X80; //STC系列的1T 设置
TMOD=0X01;
TH0=0X53;
TL0=0X32;
ET0=1;
TR0=1;
while(1)
{
if(!key1)
{
EA=0;
j=10; //放入数据初始值10
for(i=0;i<10;i++) //小于10个数据循环
{
a[i]=j; //数组下标位置的数据等于j
j++; //j加一
}
out=0;
delay(2000);
out=1;
EA=1;
}
if(!key2)
{
EA=0;
j=20; //放入数据初始值20
for(i=0;i<10;i++) //小于10个数据循环
{
a[i]=j; //数组下标位置的数据等于j
j++; //j加一
}
out=0;
delay(2000);
out=1;
EA=1;
}
if(!key3)
{
EA=0;
lcd_init(); //初始化LCD屏
dispfile();
val=0x80;
for(i=0;i<10;i++) //输出10个数据
{
k=i; //数组下标位变量等于循环位
Buff=a[*p]; //输出指针指向的变量
display();
delay_1ms(200);
}
out=0;
delay(2000);
out=1;
EA=1;
}
}
}