/****先定義數組類型再賦值**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;
}
}
}