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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

AVR單片機C語言程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:76127 發表于 2015-4-8 21:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機 ATmega16
單片機外接晶振為了11.059M
LCD 1602
時間芯片 DS1302
溫度傳感器 DS 18B20
DA AD 。。。。。。
EEPROM  AT2402 IIC總線器件
編譯器為ICC AVR


# include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#define CLK0  PORTD&=~BIT(5)
#define CLK1  PORTD|=BIT(5)
#define IO0  PORTD&=~BIT(6)
#define IO1  PORTD|=BIT(6)
#define RST0 PORTD&=~BIT(7)
#define RST1 PORTD|=BIT(7)
#define IO_in PIND&BIT(6)
#define DQOFF() DDRC|=BIT(6)
#define DQNO() DDRC&=~BIT(6)
#define DQIN() PINC&BIT(6)
uchar suzhu[]="0123456789";
void delay_us(uint a)
{
while(a--);
}
//////////////////// LCD1602///////////////
void LCDwritecom(uchar com)
{
DDRA|=0xe0;
PORTA&=~BIT(5);
PORTA&=~BIT(6);
PORTB=com;
PORTA&=~BIT(7);
delay_us(10);
PORTA|=BIT(7);
delay_us(10000);
}
void LCDwritedat(uchar dat)
{
DDRA|=0xe0;
PORTA|=BIT(5);
PORTA&=~BIT(6);
PORTB=dat;
PORTA&=~BIT(7);
delay_us(2);
PORTA|=BIT(7);
delay_us(10000);
}
void LCDinit()
{
  DDRB=0XFF;
  DDRA|=0xe0;
  LCDwritecom(0x01);
  delay_us(20000);
  LCDwritecom(0x38);
  LCDwritecom(0x0c);
  LCDwritecom(0x06);
}
//////////////////////ds1302/////////////
uchar ds1302read(uchar dat)
{
uchar j,a=0;
DDRD|=0XE0;
CLK0;
RST1;
for(j=0;j<8;j++)
{
  CLK0;
  delay_us(1);
  if(dat&BIT(j))IO1;
  else IO0;
  CLK1;
}
DDRD&=~BIT(6);
PORTD&=~BIT(6);
for(j=0;j<8;j++)
{
  CLK0;
  delay_us(1);
  if(IO_in)a|=BIT(j);
  CLK1;
  delay_us(1);
}
RST0;
delay_us(2000);
return a;
}   
///////////////18b20/////////////////////
uchar b20rtset()
{
uchar x;
DQNO();
delay_us(1);
DQOFF();
delay_us(1020);
DQNO();
delay_us(111);
x=DQIN();
return x;
}
uchar b20read()
{
uchar a,j;
a=0;
for(j=0;j<8;j++)
{
  DQNO();
delay_us(1);
  DQOFF();
delay_us(1);
  DQNO();
delay_us(17);  
  if(DQIN())a|=BIT(j);
  delay_us(120);
}
return a;
}
void b20write(uchar dat)
{
uchar j;
for(j=0;j<8;j++)
{
  DQNO();
  delay_us(1);
  DQOFF();
  delay_us(1);
  if(dat&BIT(j))DQNO();
  else DQOFF();
  delay_us(120);
}
DQNO();
}
uint b20readdat()
{
uchar a;
uint b;
if(!b20rtset())
while(!(DQIN()));
b20write(0xcc);
b20write(0x44);
delay_us(60);
while(!(DQIN()));
if(!b20rtset())
while(!(DQIN()));
b20write(0xcc);
b20write(0xbe);
delay_us(2);
a=b20read();
b=b20read();
b=b<<8|a;
b=b&0x07ff;
return b;
}
/////////////////////AD DA,IIC////////////////
void adcinit()
{
  ADMUX=0X43;//設置AD多工選擇寄存器;
  ADCSRA=0XA7;//設置AD控制和狀態寄存器;
  SFIOR&=0X0F;//設置AD特殊功能IO寄存器為連續轉換模式;
  ADCSRA|=0X40;
}
uint readadcdata()
  {
   uchar a;
   uint b;
   DDRA&=~BIT(3);
   PORTA&=~BIT(3);
   a=ADCL;
   b=ADCH;
   b=b<<8|a;
   return(b);
  }
/////////////IIC 24c02///////////
  void iicinit() //IIC總線初始化;
{
  TWBR=12;
  TWSR=1;
  TWCR|=0X04;
}
void iic24c02_write(uchar com,uchar com1,uchar dat)
{
uchar j;
TWCR = (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
//if ((TWSR & 0xF8) != START)
//ERROR();
TWDR=com;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
//if ((TWSR & 0xF8) != MT_SLA_ACK)
//ERROR();
TWDR = com1;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
//if ((TWSR & 0xF8) != MT_DATA_ACK)
//ERROR();
for(j=0;j<4;j++)
{
TWDR =dat;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
}
TWCR = (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO);
}
uchar iic24c02_read(uchar com1)
{
uchar j,dat;
TWCR = (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
TWDR=0xae;
TWCR = (1<<TWINT) | (1<<TWEN)|(1<<TWEA);
while (!(TWCR & (1<<TWINT)));
TWDR =com1;
TWCR = (1<<TWINT) | (1<<TWEN)|(1<<TWEA);
while (!(TWCR & (1<<TWINT)));
TWCR|= (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
TWDR=0xaf;
TWCR = (1<<TWINT) | (1<<TWEN)|(1<<TWEA);
while (!(TWCR & (1<<TWINT)));
for(j=0;j<4;j++)
{
  TWCR = (1<<TWINT) | (1<<TWEN)|(1<<TWEA);
  while (!(TWCR & (1<<TWINT)));
  dat=TWDR;
}
TWCR = (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO);
return dat;
}
//////////// IIC PCF8591 /////////
void PCF8591DA(uchar com,uchar com1,uchar dat)
{
uchar j;
TWCR = (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
//if ((TWSR & 0xF8) != START)
//ERROR();
TWDR=com;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
//if ((TWSR & 0xF8) != MT_SLA_ACK)
//ERROR();
TWDR = com1;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
//if ((TWSR & 0xF8) != MT_DATA_ACK)
//ERROR();
for(j=0;j<4;j++)
{
TWDR =dat;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
}
TWCR = (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO);
}
void main()
{
uchar out,yue,ri,si,peng,miao;
uint wandu,v;
uint dat=352;
dat/=315;
DDRC|=BIT(7);
PORTC&=~BIT(7);
adcinit();
LCDinit();
iicinit();
if(!b20rtset())
while(!(DQIN()));
b20write(0xcc);
b20write(0x4e);
b20write(0xff);
b20write(0xff);
b20write(0x7f);
out=iic24c02_read(0);

while(1)
{
  //yue=ds1302read(0x89);
  //ri=ds1302read(0x87);
  si=ds1302read(0x85);
  peng=ds1302read(0x83);
  miao=ds1302read(0x81);
  wandu=b20readdat();
  v=readadcdata();
  PCF8591DA(0x90,0x40,out);
  LCDwritecom(0x80);
  LCDwritedat(' ');
  LCDwritedat(suzhu[(si>>4)&0x03]);
  LCDwritedat(suzhu[si&0x0f]);
  LCDwritedat(':');
  LCDwritedat(suzhu[(peng>>4)&0x07]);
  LCDwritedat(suzhu[peng&0x0f]);
  LCDwritedat(':');
  LCDwritedat(suzhu[(miao>>4)&0x07]);
  LCDwritedat(suzhu[miao&0x0f]);   
  LCDwritedat(' ');
  LCDwritedat(suzhu[((wandu>>4)&0x7f)%100/10]);
  LCDwritedat(suzhu[((wandu>>4)&0x7f)%10]);
  LCDwritedat('.');
  LCDwritedat(suzhu[(wandu&0x0f)*6/10]);
  LCDwritedat('C');
  LCDwritedat(' ');
  LCDwritecom(0x80+0x40);
  LCDwritedat(' ');
  LCDwritedat('o');  
  LCDwritedat('u');
  LCDwritedat('t');
  LCDwritedat(suzhu[out/50]);
  LCDwritedat('.');
  LCDwritedat(suzhu[out%50/5]);
  LCDwritedat('v');
  LCDwritedat(' ');
  LCDwritedat('i');  
  LCDwritedat('n');
  LCDwritedat(suzhu[v/204]);
  LCDwritedat('.');
  LCDwritedat(suzhu[v%204/20]);
  LCDwritedat('v');   
  LCDwritedat(' ');
  asm("nop");
  if(PIND&BIT(2)&&out<255)
  {
   out++;
   if(out%50%5==0)
   iic24c02_write(0xae,0,out);
  }
  if(PIND&BIT(3)&&out>0)
  {
  out--;
  if(out%50%5==0)
  iic24c02_write(0xae,0,out);
  }
}

}



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

使用道具 舉報

沙發
ID:64696 發表于 2015-4-9 10:55 | 只看該作者
謝謝分享!!!
回復

使用道具 舉報

板凳
ID:76704 發表于 2015-4-18 22:07 | 只看該作者
謝謝分享
回復

使用道具 舉報

地板
ID:78178 發表于 2015-4-29 06:43 | 只看該作者
樓主寫程序都不帶釋義的么?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久成人综合 | 国产日韩一区二区三区 | 久久久久国产一区二区三区 | 成人精品久久日伦片大全免费 | 亚洲成人三区 | 亚洲精品66 | 亚洲欧美一区二区三区视频 | 精品国产99| av一区二区三区在线观看 | 日韩精品一区二区三区中文字幕 | 亚洲日韩欧美一区二区在线 | 亚洲第一中文字幕 | 亚洲成人一区 | 精品久久中文 | 亚洲久久久 | 黄色大片视频 | 日韩欧美精品一区 | 国产成人精品久久二区二区91 | 日韩精品一区二区三区中文字幕 | 国产精品成人一区二区三区夜夜夜 | 91在线最新 | 日韩另类视频 | 国产在线激情视频 | 国产精品久久久久久久久久软件 | 天天草天天射 | 免费看日韩视频 | 毛片一级网站 | 国产原创在线观看 | 别c我啊嗯国产av一毛片 | 伊人网99 | 精品国产乱码久久久久久影片 | 9191在线播放 | 国产精品久久久久久久久久久久久 | 欧美嘿咻 | 91视频在线看 | 久久精品在线免费视频 | 国产高清精品网站 | 欧美一区二区视频 | 玖玖在线精品 | 午夜激情影院 | 黄色在线免费观看视频 |