📄 x5045-1.c
字号:
/////////////////////////////////////////////////////////
//功能: X5045调试程序,主要包括看门狗复位和EEPROM的读写两部分
//存在的问题:没有检测复位功能
//作者: wuxinming
//设计时间: 2006.4.25
//备注:执行此程序需要用POD-8X5XP仿真头(贴片封装的那个)爱,挺怪的!!!
/////////////////////////////////////////////////////////
#include<reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define comm 0
#define dat 1
uchar WREN = 0x06; //使能写操作命令
uchar WRDI = 0x04; //禁止写操作命令
uchar RDSR = 0x05; //读状态寄存器命令
uchar WRSR = 0x01; //写状态寄存器命令
uchar READ0 = 0x03; //读EEPROM命令地址
uchar READ1 = 0x0b;
uchar WRITE0 =0x02; //写EEPROM命令地址
uchar WRITE1 =0x0a;
sbit x5045_cs = P1^0;
sbit x5045_so = P1^1;
sbit x5045_clk = P1^2;
sbit x5045_si = P1^3;
sbit cs_lcd = P2^7;
sbit std = P2^6;
sbit sclk = P2^5;
uchar x5045_read();
void x5045_write(uchar a);
uchar x5045_readSR();
uchar x5045_writeSR(uchar cData);
void x5045_write_rom(uchar cData,uchar cAddress,bit bRegion);
uchar x5045_read_rom(uchar cAddress,bit bRegion);
void watchdog(void);
void wr_lcd (uchar dat_comm,uchar content);
void delay (uint us);
void delay1 (uint ms);
uchar code tab1[]={"寄存器的值为:"};
/*-------向X5045写数据----------------*/
void x5045_write(uchar a)
{ uchar i;
for(i=0;i<8;i++)
{ if(a&0x80)
{
x5045_si=1;
}
else
{
x5045_si=0;
}
x5045_clk=0; //产生同步时钟上升沿
x5045_clk=1;
a<<=1;
}
x5045_si=0;
}
/*---------从X5045读出数据--------------*/
uchar x5045_read(void)
{ uchar i;
uchar b=0;
for(i=0;i<8;i++)
{
x5045_clk=1;
x5045_clk=0;
b<<=1;
if (x5045_so)
{
b=b|0x01;
}
}
x5045_so=0;
//wr_lcd (comm,0x88);
//wr_lcd (dat,b);
return(b);
}
/*----读X5045寄存器------*/
uchar x5045_readSR()
{
uchar SR_5045;
x5045_cs=0;
x5045_write(RDSR);
SR_5045=x5045_read();
x5045_cs=1;
return SR_5045;
}
/*----写X5045寄存器------*/
uchar x5045_writeSR(uchar cData)
{
x5045_cs=0;
x5045_write(WREN);
x5045_cs=1;
x5045_cs=0;
x5045_write(WRSR);
x5045_write(cData);
x5045_cs=1;
return 1;
}
/*-------写EEPROM-----*/
void x5045_write_rom(uchar cData,uchar cAddress,bit bRegion)
/* 写入一个字节,cData为写入的数,cAddress为写入地址,bRegion为页 */
{
while((x5045_readSR()&0x01)==1)
{
;
}
x5045_cs=0;
x5045_write(WREN);
x5045_cs=1;
x5045_cs=0;
if(bRegion==0)
{
x5045_write(WRITE0);
}
else
{
x5045_write(WRITE1);
}
x5045_write(cAddress);
x5045_write(cData);
x5045_clk=0;
x5045_cs=1;
}
/*-------读EEPROM-----*/
uchar x5045_read_rom(uchar cAddress,bit bRegion)
/* 读入一个字节,cAddress为读入地址,bRegion为页 */
{
uchar cData;
while((x5045_readSR()&0x01)==1)
{
;
}
x5045_cs=0;
if(bRegion==0)
{
x5045_write(READ0);
}
else
{
x5045_write(READ1);
}
x5045_write(cAddress);
cData=x5045_read();
x5045_cs=1;
return cData;
}
void watchdog(void) //清看门狗
{ x5045_cs = 1;
x5045_cs = 0;
x5045_cs = 1;
}
/*------------------初始化液晶-----------------*/
void init_lcd (void)
{
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
delay (100);
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0c); /*开显示,关游标*/
}
/*------------------数据发送-------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
delay (50);
a=content;
cs_lcd=1;
sclk=0;
std=1;
for(i=0;i<5;i++)
{
sclk=1;
sclk=0;
}
std=0;
sclk=1;
sclk=0;
if(dat_comm)
std=1; //data
else
std=0; //command
sclk=1;
sclk=0;
std=0;
sclk=1;
sclk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
a=a<<1;
std=CY;
sclk=1;
sclk=0;
}
std=0;
for(i=0;i<4;i++)
{
sclk=1;
sclk=0;
}
}
}
/*--------------清DDRAM------------------*/
void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
delay (180);
}
/*-----------------------------------*/
void delay (uint us) //delay time 微妙
{
while(us--);
}
void delay1 (uint ms) //delay time 毫秒
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay(1);
}
/*---------------显示汉字或字符----------------*/
void chn_disp (uchar code *chn)
{
uchar i;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
for (i=0;i<strlen(chn);i++)
wr_lcd (dat,chn[i]);
}
void main()
{
uchar reg,sj_r;
cs_lcd=1;
SP=0x5f;
init_lcd (); //初始化液晶
chn_disp (tab1); //显示提示字符
wr_lcd (comm,0x90); //置显示位置
while(1)
{
watchdog(); //不保护存储器,禁止看门狗功能并读出状态寄存器值
reg=x5045_readSR();
//wr_lcd (dat,reg);
x5045_write_rom(0x37,0x09,0); //向指定地址写入数据37H
sj_r=x5045_read_rom(0x09,0); //读出指定地址数据
wr_lcd (dat,sj_r);
delay1(8000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -