📄 sram_cpld.c
字号:
/*单片机通过cpld向sram写数据,然后通过cpld将数据从ram读出来*/
//SA13---SA18由373锁存器提供,373的所存控制信号由P3.5提供,373的输入数据由P0口提供。373为下降沿锁存
//SRAM每个页面有0X1FFF个单元,每个页面的地址从0X2000到0X3FFF。
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define unchar unsigned char
#define unint unsigned int
#define DisCmd XBYTE [0xC100] //7218控制字地址
#define DisData XBYTE [0xC000] //7218数据口地址
#define SRAMPage 0x00
unchar keynum;
sbit P3_5=P3^5;
//#define SRAM XBYTE[0x2000] //SRAM首地址
//unchar a[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
char distab[8]={0x13,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
char code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
//0, 1, 2, 3, 4, 5, 6, 7
0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
//8 ,9 ,a ,b ,c ,d ,e ,f
0x80,0xbe,0x8b,0xee,0x84 };
//熄灭 H L P -
//***********************************************************************
void delay100us(void)
{
unchar n;
for(n=0;n<100;n++);
}
//***********************************************************************
void display()
{
unchar i;
DisCmd=0xb0; //采用软件译码
for(i=0;i<8;i++) //将distab中的数据送如7218
{
DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
}
}
//***********************************************************************
SRAM_Initial(unchar Page) //SRAM初始化程序,向指定的页面写入8k字节
{
unchar n,k;
unchar xdata * SRAM;
SRAM=0x2000;
P3_5=0;
_nop_();
P3_5=1;
_nop_();
_nop_();
P0=Page; //选中SRAM第一页
_nop_();
_nop_();
P3_5=0; //下降沿锁存页地址
for(n=0;n<20;n++)
{
for(k=0;k<0xff;k++)
{
*SRAM++=n;
}
delay100us();
}
}
//***********************************************************************
unchar SRAM_Read(unchar Page,int add) //从指定的页中,读出指定地址连续8个字节的值,送到distab保存
{
unchar xdata * SRAM;
//unchar n;
//SRAM=0x2000;
SRAM=0xA000;
P3_5=0;
_nop_();
P3_5=1;
_nop_();
_nop_();
P0=Page; //选中SRAM第一页
_nop_();
_nop_();
P3_5=0; //下降沿锁存页地址
SRAM=0xA000+add;
//for(n=0;n<8;n++)
//{
//distab[n]=*SRAM;
// SRAM++;
// }
return *SRAM;
}
//***********************************************************************
SRAM_Write(unchar Page,int add,unchar dataa) //从指定的页中,指定地址写入一个字节
{
unchar xdata * SRAM;
//SRAM=0x2000;
SRAM=0xA000;
P3_5=0;
_nop_();
P3_5=1;
_nop_();
_nop_();
P0=Page; //选中SRAM第一页
_nop_();
_nop_();
P3_5=0; //下降沿锁存页地址
SRAM=0xA000+add;
*SRAM=dataa;
}
//***********************************************************************
void intt0() interrupt 0
{
unchar i;
EX0=0; //关键盘中断,禁止相应其他按键
keynum=P1; //从p1口读入键盘值
keynum=keynum&0x0f; //取低四位;
//keyprg(keynum);
if(keynum==0x0f)
{
for(i=0;i<8;i++)
distab[i]=SRAM_Read(0,i);
display();
}
if(keynum<10)
{
for(i=0;i<8;i++)
SRAM_Write(0,i,keynum);
}
EX0=1; //开中断
}
//***********************************************************************
void main(void)
{
display();
EX0=1;
EA=1;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -