久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1781|回復: 2
打印 上一主題 下一主題
收起左側

利用24c02存儲數字達到斷電保護LCD1602顯示程序問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:488631 發表于 2019-12-24 22:03 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
1602斷電后再送電不能實現,請各位大佬幫忙指點一下小弟,錯在哪里?

#include<reg52.h>   //頭文件
#include<intrins.h>  //頭文件
#define uchar unsigned char //宏定義
#define uint  unsigned int  //宏定義
uchar code table[]="I LOVE DIANZI"; //定義編碼
uchar code table1[]="   ABCD     ";  //定義編碼
uchar code table2[]="DIANZI LOVE I"; //定義編碼
uchar code table3[]="     DCBA   ";  //定義編碼
uchar num,sec,sce,tcnt;
sbit key1 = P3^0;     //按鍵一
sbit key2 = P3^1;     //按鍵二
sbit key3 = P3^2;     //按鍵三
sbit key4 = P3^3;     //按鍵四
/* sbit key5 = P3^4;
sbit key6 = P3^5;
sbit key7 = P3^6;
sbit key8 = P3^7;*/
sbit sda = P2^0;      //24c02數據
sbit scl = P2^1;       //24c02時鐘
bit write = 0;       //寫24c02的標志
/*sbit led1 = P0^0;
sbit led2 = P0^1;
sbit led3 = P0^2;
sbit led4 = P0^3; */
sbit lcdrs = P2^6;      //1602數據/命令
sbit lcdwr = P2^5;      //1602寫/讀
sbit lcden = P2^7;       //1602使能
void delay1s(uint z)    //延時
{
  uint x,y;
  for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void delay()     //延時
{;;}
void at_start()    //24c02開始
{
sda = 1;
delay();
scl = 1;
delay();
sda = 0;
delay();
}
void at_stop()      //24c02結束
{
sda = 0;
delay();
scl = 1;
delay();
sda = 1;
delay();
}
void at_respons()     //24c02應答
{
uchar i;
scl = 1;
delay();
while((sda==1)&&(i<255))i++;
scl = 0;
delay();
}
void at_init()    //24c02初始化
{
sda = 1;
delay();
scl = 1;
delay();
}
void at_write_byte(uchar date)    //24c02寫一個字節
{
uchar i,temp;
temp =date;
for(i=0;i<8;i++)
{
  temp=temp<<1;
  scl = 1;
  delay();
  sda = CY;
  delay();
  scl = 1;
  delay();
}
scl = 0;
delay();
sda = 1;
delay();
}
uchar at_read_byte()      //24c02讀一個字節
{
uchar i,k;
scl = 0;
delay();
sda = 1;
delay();
for(i=0;i<8;i++)
{
  scl = 1;
  delay();
  k = (k<<1)|sda;
  scl = 0;
  delay();
  }
  return k;
}
void at_write_add(uchar address,uchar date)    //24c02任意地址寫字節
{
at_start();
at_write_byte(0xa0);
at_respons();
at_write_byte(address);
at_respons();
at_write_byte(date);
at_respons();
at_stop();
delay1s(5);
}
uchar at_read_add(uchar address)     //24c02任意地址讀字節
{
uchar date;
at_start();
at_write_byte(0xa0);
at_respons();
at_write_byte(address);
at_respons();
at_start();
at_write_byte(0xa1);
at_respons();
date=at_read_byte();
at_stop();
delay1s(5);
return date;
}  
bit lcd_busy()       //1602忙標志
{
  bit result;
  lcdrs = 0;
  lcdwr = 1;
  lcden = 1;
  delay();
  delay();
  delay();
  result=(bit)(P0&0x80);
  lcden = 0;
  return(result);
  }
void lcd_send_com(uchar com)     //1602命令
{
  while(lcd_busy());
  lcdrs = 0;
  lcdwr = 0;
  P0 = com;
  delay1s(5);
  lcden = 1;
  delay1s(5);
  lcden = 0;
  }
void lcd_send_data(uchar date)      //1602寫數據
{
  while(lcd_busy());
  lcdrs = 1;
  lcdwr = 0;
  P0 = date;
  delay1s(5);
  lcden=1;
  delay1s(5);
  lcden=0;

  }
void lcd_init()    //1602初始化
{
lcden = 0;
lcdrs = 0;
lcdwr = 0;
lcd_send_com(0x38);
lcd_send_com(0x0c);
lcd_send_com(0x06);
lcd_send_com(0x01);
}
uchar keyscan()    //鍵查詢
{
   
  if(key1==0)
  {
   delay1s(5);
   if(key1==0)
   {
   return 1;
  /* lcd_send_com(0x80);
    for(num = 0;num<13;num++)
     {
      lcd_send_data(table[num]);
     delay1s(5);
  }*/   
}  
while(!key1);

   
  }

   else if(key2==0)
    {
     delay1s(5);
     if(key2==0)
    {
return 2;
     
  }
while(!key2);
   
  
}
   
   
  else if(key3==0)
  {
   delay1s(5);
   if(key3==0)
   {
    return 3;
   
}
while(!key3);

}

   else if(key4==0)
    {
     delay1s(5);
     if(key4==0)
    {
     return 4;

  }
while(!key4);

    }
return 0;  
}
void displaychar(uchar n)   //1602顯示
{
switch(n)
{
case  1:
  lcd_send_com(0x80);
    for(num = 0;num<13;num++)
     {
      lcd_send_data(table[num]);
     delay1s(5);
  }    break;
  case 2:     
     lcd_send_com(0x80+40);
     for(num = 0;num<11;num++)
     {
      lcd_send_data(table1[num]);
     delay1s(5);
  }   break;
  case 3:
     lcd_send_com(0x80);
      for(num = 0;num<11;num++)
      {
      lcd_send_data(table2[num]);
     delay1s(5);
  }   break;
  case  4:
  lcd_send_com(0x80+40);
    for(num = 0;num<11;num++)
     {
      lcd_send_data(table3[num]);
     delay1s(5);
  }  break;
  default: break;
}
}
void main()    //主程序
{
   at_init();
   lcd_init();
   sec=at_read_add(23);    //將24c02讀數據賦值給sec
   
   
   lcd_send_com(0x80);     //指針位置
   
      lcd_send_data(sec);   //1602寫數據
   

while(1)
{
displaychar(keyscan());     //1602顯示內容
sec= keyscan();        //將按鍵返回值賦值給sec
at_write_add(23,sec);delay1s(5); //將在24c02存儲器23位存儲數據sec的值
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

板凳
ID:488631 發表于 2019-12-27 20:27 | 只看該作者
板子上有24c02.按照調試程序可以用電腦讀24c02中寫入字符
回復

使用道具 舉報

沙發
ID:437615 發表于 2019-12-25 17:36 | 只看該作者
先問下你的板子有沒有這個功能
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 呦呦在线视频 | 一级毛片免费完整视频 | 免费永久av | 国产精品夜夜夜一区二区三区尤 | 日日摸夜夜添夜夜添精品视频 | av电影一区二区 | 久久久久久久久99 | 老外黄色一级片 | 欧美日韩久久久 | 亚洲免费在线观看 | 91成人在线视频 | 国产精品久久久久久久久久 | 亚洲高清在线 | 在线看片网站 | 黄色网址在线免费观看 | 久草精品视频 | 国产第一区二区 | 国产免费福利在线 | 日韩欧美一区二区三区免费观看 | 中文字幕av一区 | 亚洲国产精品一区二区www | 国产精品高清在线 | 91小视频在线 | 久久国产成人精品国产成人亚洲 | 久久88| 欧美一二三四成人免费视频 | 日韩av一区二区在线观看 | 亚洲一区久久 | 国产夜恋视频在线观看 | 国产欧美久久一区二区三区 | 日日夜夜天天 | 久久久久久久一区二区三区 | 国产重口老太伦 | 成人精品国产免费网站 | 黄色网址在线免费播放 | 老司机午夜性大片 | 国产高清视频 | 欧美成人综合 | 日韩一区二区在线视频 | 影音先锋中文在线 | 欧美日韩亚 |