亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 利用24c02存儲數字達到斷電保護LCD1602顯示程序問題 [打印本頁]

作者: jinguanglong    時間: 2019-12-24 22:03
標題: 利用24c02存儲數字達到斷電保護LCD1602顯示程序問題
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的值
}
}


作者: zhy123654    時間: 2019-12-25 17:36
先問下你的板子有沒有這個功能
作者: jinguanglong    時間: 2019-12-27 20:27
板子上有24c02.按照調試程序可以用電腦讀24c02中寫入字符




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1