?? adc.c
字號:
#include<iom16v.h>
#include<macros.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define add_write 0x90 //write adc
#define add_read 0x91 //read adc
#define ad_peizhi 0x90
#define TW_START 0X08
#define TW_REP_START 0X10
#define TW_MT_SLA_ACK 0X18
#define TW_MT_SLA_NACK 0X20
#define TW_MT_DATA_ACK 0X28
#define TW_MT_DATA_NACK 0X30
#define TW_MT_ARB_LOST 0X38
#define TW_MR_SLA_ACK 0X40
#define TW_MR_SLA_NACK 0X48
#define TW_MR_DATA_ACK 0X50
#define TW_MR_DATA_NACK 0X58
uchar table[]={0xc0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90};
uchar data[]={0,0,0,0};
uchar cnt; //讀出ad值
void delay(uchar i)
{
uint j;
for(;i!=0;i--)
{ for(j=2000;j!=0;j--) {;} }
}
void display(uchar *p)
{
uchar i,sel=0x80;
for(i=0;i<4;i++)
{
PORTC=~sel;
PORTB=table[p[i]];
delay(2);
sel>>=1;
}
}
void process(uchar i,uchar *p)
{
p[0]=i%1000;
p[1]=i%1000/100;
p[2]=i%1000%100;
p[3]=i%1000%100%10;
}
void io_init(void)
{
DDRB=0XFF;
PORTB=0XFF;
DDRC=0XF0;
PORTC=0XFF;
}
void iic_init(void) //initial iic
{
TWSR=0X00;
TWBR=0X00;
TWAR=0X00; //比特率為250khz
TWCR=0X44; //enable iic,enable TWEA
}
uchar iic_start(void)
{
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR&(1<<TWINT))) {};
return 1; //發(fā)送成功返回1
}
void iic_stop(void)
{ TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);}
uchar iic_write(uchar ch)
{
uchar ack=1;
TWDR=ch;
TWCR=(1<<TWINT)|(1<<TWEN);
while(!(TWCR&(1<<TWINT))) {};
if((TWCR&0XF8)!=TW_MT_SLA_ACK)
ack=0;
return ack;
}
uchar iic_read(uchar ack)
{
if(ack)
TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA);
else
TWCR=(1<<TWINT)|(1<<TWEN);
while(!(TWCR&(1<<TWINT))) {};
return (TWDR);
}
void adc_set(void)
{
iic_start();
iic_write(add_write); //寫配置寄存器地址
iic_write(ad_peizhi);
iic_stop();
delay(100);
}
uchar adc_read(void)
{
uchar datah,datal,datahl;
iic_start();
iic_write(add_read); //讀輸出寄存器地址
datah=iic_read(1);
datal=iic_read(0);
iic_stop();
datahl=((datah<<8)+datal);
return datahl;
}
void main()
{
io_init();
PORTB=0X00;
PORTC=0X0F;
delay(500);
PORTC=0XFF;
adc_set();
cnt=adc_read();
while(1)
{
process(cnt,data);
display(data);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -