存储器检测.docx

上传人:b****5 文档编号:2870732 上传时间:2022-11-16 格式:DOCX 页数:13 大小:47.59KB
下载 相关 举报
存储器检测.docx_第1页
第1页 / 共13页
存储器检测.docx_第2页
第2页 / 共13页
存储器检测.docx_第3页
第3页 / 共13页
存储器检测.docx_第4页
第4页 / 共13页
存储器检测.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

存储器检测.docx

《存储器检测.docx》由会员分享,可在线阅读,更多相关《存储器检测.docx(13页珍藏版)》请在冰豆网上搜索。

存储器检测.docx

存储器检测

 

课程设计报告

 

设计课题:

存储器检测

 

专业班级:

学生姓名:

指导教师:

存储器检测

一、课程设计目的

1、熟悉单片机的系统设计、编程。

2、主要掌握CS51的功能,IIC总线的工作原理和工作方式。

3、熟悉相关器件的使用。

二、课程设计题目(问题)描述和要求

通过对存储器24C512的所有单元分别写入“00”,然后读出存储器24C512,判断读出数据是否为“00”;再对存储器24C512的所有单元分别写入“FF”,然后读出存储器24C512,若输入和输出符合,证明存储器无坏点。

三、系统分析与设计

1:

系统总体设计

系统模块:

89C52模块、AT24C02模块和显示模块。

将AT24C02的SCL、SDA分别与P3.4P3.5口连接,SCL、SDA控制24C02的初始化、总线起始位、总线结束位、总线应答信号,通过89C52控制24C02的读和写,并通过检测将检测结果显示在液晶屏上。

2:

系统详细设计

(1)系统元件的结构图

图124c02引脚图

图2单片机与外接器件连接图

图374HC573与单片机连接图图4GAL16V8与单片机连接图

(2)系统流程图:

开始

24C02初始化

LCD初始化

调用LCD子程序

向24C02写入数值

读24C02所有单元值

判断是否相等

显示结果

3:

源程序清单

/*********************************************************************/

//字符型LCD液晶显示模块

//适用型号:

并口LCD

//日期:

2009-7-16

/*********************************************************************/

#include

#include

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

#defineLCDCOM0XBYTE[0X9000]

#defineLCDCOM1XBYTE[0X9400]

#defineLCDDATAXBYTE[0X9800]/*LED数据寄存器地址*/

#defineLCDDATA_READXBYTE[0X9800]

sbitscl=P3^4;//24c02的时钟

sbitsda=P3^5;//24c02的数据线

uchark;

/*********************************************************************/

sbitbflag=ACC^7;

voidwait(void)//等待

{do{ACC=LCDCOM1;}while(bflag==1);}

/*********************************************************************/

voidinit_lcd()//初始化LCD

{

wait();

LCDCOM0=0x38;

wait();

LCDCOM0=0x06;

wait();

LCDCOM0=0x0c;

wait();

LCDCOM0=0x01;

}

/*********************************************/

voidinit_command(ucharcommand)/*发送新命令,一般用于给出新的显示地址*/

{wait();LCDCOM0=command;}/*首行地址0x80~0xa7,次行地址0xc0~0xe7*/

/*********************************************************************/

voidledoutchar(uchara)

{wait();LCDDATA=a;}/*将读出数据输出到数据寄存器*/

//sbitmax24c02_wp=P3^3;

ucharx24c02_read(ucharaddress);//从24c02的地址address中读取一个字节数据

voidx24c02_write(ucharaddress,ucharinfo);//向24c02的address地址中写入一字节数据info

voidx24c02_init();//24c02初始化子程序

voiddelay1(uintx);

voidx24c01_init();

voidstart();

voidstop();

voidwritex(ucharj);

ucharreadx();

voidclock();

voiddelay1(uintx)//延时

{

uinti;

for(i=0;i

}

//24C02初始化

voidx24c02_init()

{

//max24c02_wp=0;

scl=1;

sda=1;

}

//总线的起始位

voidstart()

{

sda=1;

scl=1;

sda=0;

scl=0;

}

//C总线的结束位

voidstop()

{

sda=0;

scl=1;

sda=1;

}

//输出函数

voidwritex(ucharj)

{

ucharidatai,temp;

temp=j;

for(i=0;i<8;i++)

{

temp=temp<<1;

scl=0;

sda=CY;

scl=1;

}

scl=0;

sda=1;

}

//输入函数

ucharreadx()

{

ucharidatai,j,k=0;

scl=0;

sda=1;

for(i=0;i<8;i++)

{

scl=1;

if(sda==1)j=1;

elsej=0;

k=(k<<1)|j;

scl=0;

}

return(k);

}

//总线时钟相当ACK信号

voidclock()

{

uintidatai=0;

scl=1;

for(;(sda==1)&&(i<1000);i++);

scl=0;

}

 

//从地址中读取一字节数据

ucharx24c02_read(ucharaddress)

{

ucharidatai;

start();

writex(0xa0);

clock();

writex(address);

clock();

start();

writex(0xa1);

clock();

i=readx();

stop();

delay1(100);

return(i);

}

//写字节信息至地址中

voidx24c02_write(ucharaddress,ucharinfo)

{

EA=0;

start();

writex(0xa0);

clock();

writex(address);

clock();

writex(info);

clock();

stop();

EA=1;

delay1(500);

}

main()

{

uchark1;

x24c02_init();

init_lcd();/*初始化LED*/

while

(1){

k1=GetKey(20);

if(k1==0x01)

{Delay1ms(100);

if(k1==0x01)

{uchari,j;

for(i=0;i<255;i++)

x24c02_write(i,0x00);/*将存储器所有单元写入00*/

for(i=0;i<255;i++)

{

j=x24c02_read(i);/*读存储器的值*/

if(j==0x00)/*如果读出的值为00*/

{init_command(0x80);/*显示屏上显示00000000*/

ledoutchar(0x30);

ledoutchar(0x30);

ledoutchar(0x30);

ledoutchar(0x30);

ledoutchar(0x30);

ledoutchar(0x30);

ledoutchar(0x30);

ledoutchar(0x30);

}

else/*如果读出值不为00*/

{init_command(0x80);/*显示当前单元HUAIDIAN*/

ledoutchar('H');

ledoutchar('U');

ledoutchar('A');

ledoutchar('I');

ledoutchar('D');

ledoutchar('I');

ledoutchar('A');

ledoutchar('N');

}

}

}

}

}

}

/*************键盘子程序*************************************/

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

voidDelay1ms(uintcount)

{

uinti,j;

for(i=0;i

{for(j=0;j<120;j++);}

}

ucharkchange(ucharkey){

uinti,a,b;

for(i=0;i<4;i++){

if((key&0x01)==1)a=i;

key=key>>1;

}

for(i=0;i<4;i++){

if((key&0x01)==1)b=i;

key=key>>1;

}

returna*4+b;//是a*4+b还是b*4+a;看情况

}

ucharGetKey(uintpress_time){

ucharsccode;

ucharrecode;

ucharkey=0xff;

uintm,pressRelease=1;

intn=1;

uchara;

P1=0xf0;

a=P1;

if(a!

=0xf0){

Delay1ms(10);

P1=0xf0;

a=P1;

if(a!

=0xf0){

sccode=a;

P1=0x0f;

a=P1;

recode=a;

key=~(sccode+recod

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1