51单片机程序存储器.docx
《51单片机程序存储器.docx》由会员分享,可在线阅读,更多相关《51单片机程序存储器.docx(14页珍藏版)》请在冰豆网上搜索。
51单片机程序存储器
IIC存储器读写
1、LCD.c
#include
#include
unsignedcharcodenumber_X[]=
{//宽x高=8x16,纵向字节倒序
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,//0
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,//1
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,//2
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,//3
0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,//4
0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,//5
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,//6
0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,//7
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,//8
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,//9
0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//.
0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,//-
0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//nop
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,//:
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00
};
voidLCD_WriteCommandE1(unsignedcharcom)
{
while(CRADD1&0x80);
CWADD1=com;
}
voidLCD_WriteDataE1(unsignedchardat)
{
while(CRADD1&0x80);
DWADD1=dat;
}
voidLCD_WriteCommandE2(unsignedcharcom)
{
while(CRADD2&0x80);
CWADD2=com;
}
voidLCD_WriteDataE2(unsignedchardat)
{
while(CRADD2&0x80);
DWADD2=dat;
}
voidLCD_Init()
{
LCD_WriteCommandE1(0xe2);
LCD_WriteCommandE2(0xe2);
LCD_WriteCommandE1(0xa4);
LCD_WriteCommandE2(0xa4);
LCD_WriteCommandE1(0xa9);
LCD_WriteCommandE2(0xa9);
LCD_WriteCommandE1(0xa0);
LCD_WriteCommandE2(0xa0);
LCD_WriteCommandE1(0xc0);
LCD_WriteCommandE2(0xc0);
LCD_WriteCommandE1(0xaf);
LCD_WriteCommandE2(0xaf);
}
voidLCD_Clear(void)
{
unsignedchari,j;
for(i=0;i<4;i++)
{
LCD_WriteCommandE1(i+0xb8);
LCD_WriteCommandE2(i+0xb8);
LCD_WriteCommandE1(0x00);
LCD_WriteCommandE2(0x00);
for(j=0;j<0x50;j++)
{
LCD_WriteDataE1(0x00);
LCD_WriteDataE2(0x00);
}
}
}
voiddisplay_cn(unsignedcharlin,unsignedintcol,unsignedintlen,unsignedchar*p)
{
unsignedintseg,i,j;
unsignedchara,L,n;
switch(lin)
{
case0:
n=0xba;break;
case1:
n=0xb8;break;
}
for(i=0;i{
for(j=0;j<2;j++)
{
L=col;
LCD_WriteCommandE1(n+j);
LCD_WriteCommandE2(n+j);
for(seg=0;seg<16;seg++)
{
if(L<61)
{
a=L;
LCD_WriteCommandE1(a);
LCD_WriteDataE1(*p++);
}
else
{
a=L-61;
LCD_WriteCommandE2(a);
LCD_WriteDataE2(*p++);
}
L++;
}
}
col=col+16;
}
}
voiddisplay_number(unsignedcharlin,unsignedintcol,unsignedcharnum)
{
unsignedintseg,i,j;
unsignedchara,L,n,k;
switch(lin)
{
case0:
n=0xba;break;
case1:
n=0xb8;break;
}
k=num*16;
for(j=0;j<2;j++)
{
L=col;
LCD_WriteCommandE1(n+j);
LCD_WriteCommandE2(n+j);
for(seg=0;seg<8;seg++)
{
if(L<61)
{
a=L;
LCD_WriteCommandE1(a);
LCD_WriteDataE1(number_X[k++]);
}
else
{
a=L-61;
LCD_WriteCommandE2(a);
LCD_WriteDataE2(number_X[k++]);
}
L++;
}
}
}
voiddisplay_unsigned_int(unsignedcharlin,unsignedintcol,unsignedintdat)
{
unsignedintseg;
unsignedchark[4];
k[3]=dat%10;
k[2]=((dat/10)%10);
k[1]=((dat/100)%10);
k[0]=((dat/1000)%10);
if(k[0]==0){k[0]=12;}
if((k[0]==12)&&(k[1]==0)){k[0]=12;k[1]=12;}
if((k[0]==12)&&(k[1]==12)&&(k[2]==0)){k[0]=12;k[1]=12;k[2]=12;}
for(seg=0;seg<4;seg++)
{
display_number(lin,col,k[seg]);
col=col+10;
}
}
voiddisplay_signed_int(unsignedcharlin,unsignedintcol,signedintdat)
{
unsignedintseg;
unsignedchark[5],a;
k[0]=12;
if(dat<0)
{
dat=(~dat)+1;
k[0]=11;
}
k[4]=dat%10;
k[3]=((dat/10)%10);
k[2]=((dat/100)%10);
k[1]=((dat/1000)%10);
a=k[0];
if(k[1]==0){k[0]=12;k[1]=a;}
if((k[1]==a)&&(k[2]==0)){k[0]=12;k[1]=12;k[2]=a;}
if((k[1]==12)&&(k[2]==a)&&(k[3]==0)){k[0]=12;k[1]=12;k[2]=12;k[3]=a;}
for(seg=0;seg<5;seg++)
{
display_number(lin,col,k[seg]);
col=col+10;
}
}
voiddisplay_unsigned_char(unsignedcharlin,unsignedintcol,unsignedchardat)
{
unsignedintseg;
unsignedchark[3];
k[1]=dat%10;
k[0]=((dat/10)%10);
for(seg=0;seg<2;seg++)
{
display_number(lin,col,k[seg]);
col=col+10;
}
}
2、LCD.h
#include
#include
#ifndef__LCD__
#define__LCD__
#defineCWADD1XBYTE[0x8000]
#defineDWADD1XBYTE[0x8001]
#defineCRADD1XBYTE[0x8002]
#defineDRADD1XBYTE[0x8003]
#defineCWADD2XBYTE[0x8004]
#defineDWADD2XBYTE[0x8005]
#defineCRADD2XBYTE[0x8006]
#defineDRADD2XBYTE[0x8007]
externvoidLCD_Init();
externvoiddisplay_cn(unsignedcharlin,unsignedintcol,unsignedintlen,unsignedchar*p);
externvoiddisplay_signed_int(unsignedcharlin,unsignedintcol,signedintdat);
externvoiddisplay_unsigned_int(unsignedcharlin,unsignedintcol,unsignedintdat);
externvoiddisplay_unsigned_char(unsignedcharlin,unsignedintcol,unsignedchardat);
externvoidLCD_Clear(void);
#endif
1、IIC.c
#include
#include"IIC.h"
sbitSCL_IIC=P1^0;
sbitSDA_IIC=P1^1;
voidwait_IIC(unsignedintn)
{//ok
unsignedinti;
for(i=0;i}
voidstart_IIC(void)
{
SDA_IIC=1;
SCL_IIC=1;
SDA_IIC=0;
SCL_IIC=0;
}
voidstop_IIC(void)
{
SCL_IIC=0;
SDA_IIC=0;
SCL_IIC=1;
SDA_IIC=1;
}
voidAck()
{
SDA_IIC=0;
SCL_IIC=1;
SCL_IIC=0;
SDA_IIC=1;
}
voidNoAck()
{
SDA_IIC=1;
SCL_IIC=1;
SCL_IIC=0;
}
bitTestAck()
{
SDA_IIC=1;
SCL_IIC=1;
CY=SDA_IIC;
SCL_IIC=0;
return(CY);
}
voidsend_IIC(unsignedcharI_data)
{
unsignedchari;
for(i=0;i<8;i++)
{
SDA_IIC=(bit)(I_data&0x80);
SCL_IIC=1;
SCL_IIC=0;
I_data=I_data<<1;
}
}
charreceive_IIC(void)
{
unsignedchari,rbyte=0;
for(i=0;i<8;i++)
{
SCL_IIC=1;
rbyte=rbyte<<1;
rbyte=rbyte|((unsignedchar)(SDA_IIC));
SCL_IIC=0;
}
return(rbyte);
}
voidwrite_IIC(unsignedcharw_add,unsignedcharw_data)
{
start_IIC();
send_IIC(0xa0);
TestAck();
send_IIC(w_add);
TestAck();
send_IIC(w_data);
TestAck();
stop_IIC();
wait_IIC(60000);
wait_IIC(60000);
}
unsignedcharread_IIC(unsignedcharr_add)
{
unsignedchardatar_data,i;
start_IIC();
send_IIC(0xa0);
TestAck();
send_IIC(r_add);
TestAck();
start_IIC();
send_IIC(0xa1);
TestAck();
r_data=receive_IIC();
NoAck();
stop_IIC();
return(r_data);
}
2、IIC.h
#ifndef__IIC__
#define__IIC__
externvoidwrite_IIC(unsignedcharw_add,unsignedcharw_data);
externunsignedcharread_IIC(unsignedcharr_add);
#endif
3、MAIN.c
#include
#include
#include
#include"IIC.h"
voidwait(unsignedintx)
{
unsignedinti;
i=0;
for(i=0;i}
voiddisplay(void)
{
unsignedchari,col;
col=18;
for(i=0;i<4;i++)
{
display_unsigned_char(0,col,RD_buf[i]);
col=col+28;
}
col=18;
for(i=0;i<4;i++)
{
display_unsigned_char(1,col,TD_buf[i]);
col=col+28;
}
}
voidRD_DATA(unsignedchar*buf,unsignedcharlen)
{
unsignedchari;
for(i=0;i{
buf[i]=read_IIC(i);
}
}
voidWD_DATA(unsignedchar*buf,unsignedcharlen)
{
unsignedchari;
for(i=0;i{
write_IIC(i,buf[i]);
}
}
voidCL_DATA(unsignedchar*buf,unsignedcharlen)
{
unsignedchari;
for(i=0;i{
buf[i]=i+count;
}
}
voidmain(void)
{
unsignedchari;
LCD_Init();
LCD_Clear();
display_cn(0,0,1,RD_dat);
display_cn(1,0,1,TD_dat);
for(i=0;i<4;i++)
{
TD_buf[i]=i;
}
while
(1)
{
display();
if(KEY0==0)
{
wait(100);
if(KEY0==0)
{
WD_DATA(TD_buf,4);
count++;
if(count>95)count=0;
CL_DATA(TD_buf,4);
display();
wait(60000);
RD_DATA(RD_buf,4);
}
}
}
}
4、MAIN.h
#ifndefMAIN_H__
#defineMAIN_H__
//中文字模库16x16点阵
codeunsignedcharRD_dat[]={//纵向字节倒序
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
//读
};
codeunsignedcharTD_dat[]={
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
//写
};
sbitKEY0=P1^2;
unsignedcharRD_buf[5],TD_buf[5];
unsignedcharcount;
#endif