51单片机程序存储器.docx
- 文档编号:7265986
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:14
- 大小:16.16KB
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 程序 存储器
![提示](https://static.bdocx.com/images/bang_tan.gif)