存储器检测.docx
- 文档编号:2870732
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:13
- 大小:47.59KB
存储器检测.docx
《存储器检测.docx》由会员分享,可在线阅读,更多相关《存储器检测.docx(13页珍藏版)》请在冰豆网上搜索。
存储器检测
课程设计报告
设计课题:
存储器检测
专业班级:
学生姓名:
指导教师:
存储器检测
一、课程设计目的
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储器 检测