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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

串口,I2C總線,EEPROM及液晶驅(qū)動(dòng)的時(shí)間沖突問題

作者:xio854   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2010年10月14日   【字體:

 或許是我的構(gòu)思一開始就是錯(cuò)誤的,串口的接受速度遠(yuǎn)大于數(shù)據(jù)的存取和液晶的驅(qū)動(dòng)的時(shí)間總和。從電腦傳過去的字符總是會(huì)漏掉好多,如今只能寫入一個(gè)字節(jié)的數(shù)據(jù)。真是豬腦子,浪費(fèi)了半天時(shí)間。

 這是我自己寫的單片機(jī)實(shí)現(xiàn)電話本,可以從電腦錄入姓名與電話,并可以手動(dòng)查詢。但是存儲(chǔ)和液顯的時(shí)間太長(zhǎng),沒法及時(shí)從電腦錄入數(shù)據(jù)。但是串口,I2C總線,EEPROM,液晶的驅(qū)動(dòng)程序是對(duì)的。串口的傳輸能否像I2C一樣能被我自己控制呢。

 

#include <reg52.h>
#define unchar unsigned char
unchar ac;
sbit E=P2^7  ;
sbit RS=P2^6 ;
sbit RW=P2^5 ;
sbit SDA=P2^1;
sbit SCL=P2^0;
/****數(shù)據(jù)延時(shí)****/
void NOP(void)
{;;}

 


/******操作延時(shí)*****/
void delay(unsigned int  i)
{
 i=124*i;
 while(--i);
}

 

 

/****液晶指令寫入****/
void LCD_cmd(unchar cmd)
{
  E=0;
  RW=0;
  RS=0;
  P0=cmd;
  delay(2);
  E=1;
  delay(2);
  E=0;

}

 


/****液晶數(shù)據(jù)的寫入*****/
void LCD_date(unchar date)
{
 RW=0;
 RS=1;
 P0=date;
 delay(1);
 E=1;
 delay(1);
 E=0;
}

 

 

void init(void)
{
/********* 串口初始化 ******/
 TMOD=0X20;
 SCON=0X50;
 PCON=0X80;
 ET1=1;
 TR1=1;
 TH1=0XF3;
 TL1=0XF3;
 RI=0;
 TI=0;
/********* 液晶初始化 *******/
 
 LCD_cmd(0x6);//設(shè)置讀寫方式,指針自動(dòng)增一(第二位 1),畫面不移動(dòng)(第一位 0)
 LCD_cmd(0xc);//顯示開(第三位 1)光標(biāo)開(第二位 1)光標(biāo)閃爍開(第一位 1);
 LCD_cmd(0x38);//設(shè)置顯示模式 
 LCD_cmd(0x1);//清屏,清除指針和RAM數(shù)據(jù)

/*****按鍵中斷初始化*******/
 EA=1;
 EX0=1;
 EX1=1;

}


/*****數(shù)據(jù)起始端*********/
void start(void)
{
 SDA=1;
 NOP();
 SCL=1;
 NOP();
 SDA=0;
 NOP();
}

/***** 數(shù)據(jù)結(jié)束端 ********/
void stop(void)
{
 SDA=0;
 NOP();
 SCL=1;
 NOP();
 SDA=1;
 NOP();

}


/******發(fā)送數(shù)據(jù)*********/
void send_message(unchar date)
{
 unchar temp,i; 
 temp=date;
 SCL=0;
 NOP();
 for (i=0;i<8;++i)
 {
  temp=temp<<1;
  SDA=CY;
  NOP();
  SCL=1;
  NOP();
  SCL=0;
  NOP();
 }
 SDA=1;
 NOP(); 
}


/***** 接收數(shù)據(jù) *****/
unchar rece_message(void)
{
 unchar date,temp,i;
 SCL=0;
 CY=0;
 NOP();
 for(i=0;i<8;++i)
 {
  SCL=1;
  NOP();
  temp=SDA;
  date=date<<1;
  date=date|temp;
  SCL=0;
  NOP(); 
 }
 SDA=1;
 NOP();
 return date;
}

/***** 應(yīng)答接收 ********/
unchar ack_back(void)
{
 unchar ack;
 SCL=0;
 NOP();
 SCL=1;
 NOP();
 ack=SDA;
 NOP();
 SCL=0;
 return ack;
}

/****完整接收數(shù)據(jù)*******/
unchar get(unchar add)
{    
 unchar date;
 delay(50);
 start(); 
 send_message(0xa0); 
 ack_back();
 send_message(add);  
 ack_back();
 start();
 send_message(0xa1); 
 ack_back();
 date=rece_message(); 
 stop();
 delay(50);
 return date  ;
}

/******完整寫入數(shù)據(jù)*******/
void write(unchar date,unchar add)

{
 init();
 start();
 send_message(0xa0);  //發(fā)送地址碼
 ack_back();
 send_message(add);   //存儲(chǔ)的內(nèi)容首地址
 ack_back();  
 send_message(date);
 ack_back();
 stop(); 
}

/*****寫入數(shù)據(jù)串 并分配指針地址*******/
void write_s (unchar date)
{
 if(date!='#')
  write(date,ac);
 if (date=='#')
  {ac=ac+0x10;write(ac,0xff);}
}

 

void main()
{            
 
 init();
 //ac=get(0xff);
 while(1)
 {
  while(!RI);
  RI=0;
 // write_s(SBUF);
  LCD_date(SBUF);
  

 }

}

 

不以程序長(zhǎng)短論英雄,成敗完全取決于細(xì)節(jié)的把握。一步登天難,十天學(xué)會(huì)單片機(jī)更難。扎實(shí)的基礎(chǔ),刻苦的精神是成功的必備。謹(jǐn)以此句,哀悼我三個(gè)失敗的項(xiàng)目。EPROM莫名的錯(cuò)誤已讓我發(fā)瘋。高強(qiáng)度的腦力,低質(zhì)量的四小時(shí)睡眠,我已經(jīng)精疲力竭了。我真以為我能一步登天,我太急躁了。

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 免费看黄视频网站 | 自拍偷拍第一页 | 欧美精品一区二区三 | 精品一区电影 | 欧美成人第一页 | 99九九视频 | 激情91| 91视频在线看 | 日韩成人免费在线视频 | 自拍偷拍亚洲一区 | 成人亚洲视频 | 在线观看黄免费 | 天天操精品视频 | 国产亚洲第一页 | www国产成人免费观看视频,深夜成人网 | 欧美一区二区三区在线播放 | 精品国产久 | 久久9久| 久久99久久 | 久久久一区二区三区 | 91精品国产综合久久福利软件 | 国产精品99久久久久久动医院 | 夜久久| 久久不射网 | www日本在线 | 国产欧美一区二区在线观看 | 欧美 日韩 中文 | 国产视频1 | 精品免费国产一区二区三区四区介绍 | 成人精品一区二区三区 | 国产高清精品一区二区三区 | 亚洲综合激情 | 欧美一级毛片久久99精品蜜桃 | 久久九 | 色综合天天综合网国产成人网 | 精品视频一区二区 | 日日干日日射 | 亚洲天堂男人的天堂 | 久久av资源网 | 日韩一区在线播放 | 日韩中文字幕免费在线 |