亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機讀取eeprom里面的內容 大神幫忙看一下啊,為什么沒辦法顯示0
[打印本頁]
作者:
風輕云淡123
時間:
2017-9-29 22:45
標題:
單片機讀取eeprom里面的內容 大神幫忙看一下啊,為什么沒辦法顯示0
程序目的 0-9,傳入eeprom后,讀取eeprom里面的內容,顯示到LCD1602里面,但是沒辦法顯示0求解釋:
#include <reg52.h>
#include "intrins.h"
/*-----------------------宏定義----------------*/
#define uint unsigned int
#define uchar unsigned char
#define RS_LOW RS=0
#define RS_HIGH RS=1
#define RW_LOW RW=0
#define RW_HIGH RW=1
#define EN_LOW EN=0
#define EN_HIGH EN=1
#define Read_ATadd 0xa1
#define Write_ATadd 0xa0
/***************設置特殊功能寄存器位變量**********/
sbit SDA = P2^0;
sbit SCL = P2^1;
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P2^5;
sbit DU = P2^6;
sbit WE = P2^7;
/***************設置特殊功能寄存器位變量**********/
Check_Busy();
/*-----------------------宏定義----------------*/
//unsigned char display[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};//讀入的是ASCII碼,{"0123456789abcdef"}差別是什么?
unsigned char display[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39} ;
/*-----------------------定時函數----------------*/
void delay1ms()
{
uchar i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);
}
void dalaynms(uchar n)
{
while(n--)
{
delay1ms();
}
}
/*-----------------------定時函數----------------*/
/*---------------寫指令-----------------------*/
void WrAdress(uchar a)
{
while(Check_Busy());
RS_LOW;
RW_LOW;
EN_HIGH;
dalaynms(1);
P0=a;
EN_LOW;
}
/*---------------寫指令-----------------------*/
/*---------------寫數據-----------------------*/
void WrData(uchar a)
{
while(Check_Busy());
RS_HIGH;
RW_LOW;
EN_HIGH;
dalaynms(1);
P0=a;
EN_LOW;
}
/*---------------寫數據-----------------------*/
/*---------------讀忙指令-----------------------*/
Check_Busy()
{
uchar a;
P0 = 0xff;
RS_LOW;
RW_HIGH;
EN_LOW;
dalaynms(1);
EN_HIGH;
a = P0;
return (bit)(a&0x80);
}
/*---------------讀忙指令-----------------------*/
/*---------------寫字符數據-----------------------*/
void Lcd1602_Wrchar(uchar x,uchar y,uchar z)//定義為行標志,y定義為是第幾位,z定義為這個是字符串還是字符
{
if(x==0)
{
WrAdress(0x80 +y);
}
else
WrAdress(0xC0 +y);
WrData(z);
WrAdress(0x0c);
}
/*---------------寫字符數據-----------------------*/
/*-----------------------start----------------*/
void start()
{
SCL = 1;
SDA = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL = 0;//允許SDA進行變化
}
/*-----------------------start----------------*/
/*-----------------------stop----------------*/
void stop()
{
SDA = 0;
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
/*-----------------------stop----------------*/
/*-----------------------應答----------------*/
AT24C02_ack()
{
bit ack;
SDA = 1;
_nop_();
_nop_();
SCL =1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ack = SDA;
SCL =0;
// while(ack);
return ack;
}
/*-----------------------應答----------------*/
/*-----------------------讀一個字節----------------*/
At24c02_Read_bit()
{
uchar i,x;
for(i =0;i<8;i++)
{
SCL =1;
x = (x<<1)|(uchar)SDA;
SCL =0;//允許SDA進行變化
}
return(x);
}
/*-----------------------讀一個字節----------------*/
/*-----------------------寫一個字節----------------*/
void At24c02_write_bit(uchar y)
{
uchar i;
for(i=0;i<8;i++)
{
SDA = (bit)(y&0x80);
_nop_();
y<<=1;
SCL =1;
_nop_();
_nop_();
SCL = 0;
}
}
/*-----------------------寫一個字節----------------*/
void init()
{
SDA = 1;
SCL = 1;
WE = 1;
P0 = 0xff;
WE = 0;
WrAdress(0x01);//清屏同時,數據指針也會清零即變成0x80;
WrAdress(0x38); //設置 16×2 顯示,5×7 點陣,8 位數據接口
WrAdress(0x0f); // 顯示(1 有效)、C 光標顯示(1 有效)、B 光標閃爍(1 有效)
WrAdress(0x06);//讀或寫一個字符后地址指針加 1 &光標加 1
}
/*-----------------------在特定位置讀字節----------------*/
At24c02_Read(uchar add)
{
uchar date;
start();
At24c02_write_bit(Write_ATadd);
AT24C02_ack();
At24c02_write_bit(add);
AT24C02_ack();
start();
At24c02_write_bit(Read_ATadd);
AT24C02_ack();
date = At24c02_Read_bit();
stop();
return(date);
}
/*-----------------------在特定位置讀字節----------------*/
/*-----------------------在特定位置寫字節----------------*/
void At24c02_write(uchar x,uchar addr )
{
start();
At24c02_write_bit(Write_ATadd);
AT24C02_ack();
At24c02_write_bit(addr);
AT24C02_ack();
At24c02_write_bit(x);
AT24C02_ack();
stop();
}
void main()
{
uchar i,j;
init();
while(1)
{
for(i=0;i<10;i++)
{
At24c02_write(display[i],i);
}
for(i=0;i<10;i++)
{
j = At24c02_Read(i);
Lcd1602_Wrchar(0,8,j);
dalaynms(200);
dalaynms(200);
dalaynms(200);
}
}
}
復制代碼
作者:
caoxiaoyong
時間:
2017-9-30 09:09
你讀取eeprom的數據對了沒有 你先單步調試 看看讀寫的 數據是不是正確的 然后再看顯示的部分
慢慢來很好解決的
單片機一定要會調試程序查找原因
作者:
風輕云淡123
時間:
2017-9-30 18:30
caoxiaoyong 發表于 2017-9-30 09:09
你讀取eeprom的數據對了沒有 你先單步調試 看看讀寫的 數據是不是正確的 然后再看顯示的部分
慢慢來很 ...
單步調試,在哪兒能看到eeprom的內容,這個是外部的eeprom,所以不知道在哪能看
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1