📄 ram.c
字号:
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
#define RAM(ADDR) XBYTE[ADDR]
typedef unsigned int uint;
typedef unsigned char uchar;
sbit CS=P1^4;
sbit CLK=P1^7;
sbit DIO=P1^6;
sbit KEY=P3^2;
uchar half_hign;
uchar half_low;
bdata uchar com_data;
sbit mos_bit=com_data^7;
sbit low_bit=com_data^0;
void delay_50us()
{
uchar i;
for (i=0; i<6; i++){;}
}
void delay_8us()
{
uchar i;
for (i=0; i<1; i++){;}
}
void delay_50ms()
{
uchar i,j;
for(j=0;j<50;j++)
for(i=0;i<125;i++){;}
}
void send(uchar sebuf)
{
uchar i;
com_data=sebuf;
CLK=0;
CS=0;
delay_50us();
for(i=0;i<8;i++)
{
delay_8us();
DIO=mos_bit;
CLK=1;
delay_8us();
com_data=com_data<<1;
CLK=0;
}
DIO=0;
}
uchar receive(void)
{
uchar i,rebuf;
CLK=1;
delay_50us();
for(i=0;i<8;i++)
{
com_data=com_data<<1;
low_bit=DIO;
CLK=1;
delay_8us();
CLK=0;
delay_8us();
}
rebuf=com_data;
DIO =1;
CS=1;
return rebuf;
}
void reset(void)
{
DIO=1;
delay_50ms();
send(0xa4);
CS=1;
}
/* 7289显示程序 */
/* addr为显示位置 范围0~7 */
/* dat为现实内容 */
void display(uchar addr,uchar dat)
{
if(addr<0 || addr >7)
return;
send(0xc8 + addr);
delay_50us();
send(dat);
CS=1;
}
/* 发送双字节命令 */
void sendcommand(uchar addr,uchar dat)
{
send(addr);
delay_50us();
send(dat);
CS=1;
}
void main()
{
uchar dat;
uint i;
reset();
for(i=0x0000;i<0x8000;i++)
{
/* 对32KRAM的每一个字节进行测试 */
/* 先写入0xaa,然后看能否读出来 */
RAM(i + 0x8000) = 0xaa;
dat = RAM(i + 0x8000);
if(dat != 0xaa)
break;
/* 再写入0x55,然后看能否读出来 */
RAM(i + 0x8000) = 0x55;
dat = RAM(i + 0x8000);
if(dat != 0x55)
break;
}
if(i == 0x8000) /* 没有问题则显示 P */
sendcommand(0x80,0x0e);
else /* 有问题则显示 E */
sendcommand(0x80,0x0b);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -