久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
avr ATMega32驅動aw9523b 讓led顯示,adc數據讓led依次亮起,為什么程序跑不起來
[打印本頁]
作者:
abu89
時間:
2018-7-12 14:36
標題:
avr ATMega32驅動aw9523b 讓led顯示,adc數據讓led依次亮起,為什么程序跑不起來
代碼如下,各位大神請指教
#include <iom32v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define WD_DEVIC_ADDR 0xb6
#define RD_DEVIC_ADDR 0xb7
#define SLA_AW1 0X02
#define SLA_AW2 0X03
#define MT_SLA_ACK 0x18
#define MT_SLA_NOACK 0x20
#define MT_DATA_ACK 0x28
#define MT_DATA_NOACK 0x38
#define START 0x08
#define RE_START 0x10
#define MR_SLA_ACK 0x40
#define MR_SLA_NOACK 0x48
#define MR_DATA_ACK 0x50
#define MR_DATA_NOACK 0x58
#define DATA1 0x79
#define DATA2 0xd5
#define DATA3 0xb6
#define DATA4 0xea
#define DATA5 0x2c
#define DATA6 0xc0
#define WD_DEVICE_FW 0x7f //aw9523 軟復位寄存器地址
#define WD_DEVICE_DG 0x11 //aw9523 燈光電流控制寄存器地址
#define Start() TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
#define Wait() while (!(TWCR & (1<<TWINT)));
#define Stop() TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
#define TestAck() (TWSR&=0xf8)
#define SetAck() (TWCR|=(1<<TWEN)
#define SetNoack() (TWCR&=~(1<<TWEN))
#define Twi() (TWCR=(1<<TWINT)|(1<<TWEN));
#define Write8Bit(x) {TWDR=(x); TWCR=(1<<TWINT)|(1<<TWEN);}
const a[] = {0xef,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,
0xbf,0xbf,0xb7,0xb3,0xb1,0x00};
const b[] = {0xfb,0xfb,0x3b,0x1b,0x0b,0x03,0x01,
0x00,0x00,0x00,0x00,0x00,0x00};
//燈依次亮起數據
void twi_init(void)
{
TWBR=0x20;
TWCR=0x04;
TWSR=0;
}
uchar IIC_Write(uchar addr,uchar wdata,uchar addr2,uchar wdata2)
{
Start();
Wait();
if(TestAck()!=START)
return 1;
Write8Bit(WD_DEVIC_ADDR);
Wait();
if(TestAck()!=MT_SLA_ACK)
return 1;
Write8Bit(addr);
Wait();
if(TestAck()!=MT_DATA_ACK)
return 1;
Write8Bit(wdata);
Wait();
if (TestAck()!=MT_DATA_ACK)
return 1;
Write8Bit(addr2);
Wait();
if(TestAck()!=MT_DATA_ACK)
return 1;
Write8Bit(wdata2);
Wait();
if (TestAck()!=MT_DATA_ACK)
return 1;
Stop();
return 0;
}
uchar IIC_read(uchar addr)
{
uchar temp1;
Start();
Wait();
if(TestAck()!=START)
return 1;
Write8Bit(WD_DEVIC_ADDR);
Wait();
if(TestAck()!=MR_SLA_ACK)
return 1;
Write8Bit(addr);
Wait();
if(TestAck()!=MR_SLA_ACK)
return 1;
Twi();
Wait();
if(TestAck()!=MR_DATA_NOACK)
return 1;
temp1=TWDR;
Stop();
return temp1;
}
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<8000;j++);
}
}
uchar key(void)
{
uchar m;
PORTC|=BIT(2);
DDRC|=BIT(2);
DDRC&=~BIT(2);
m=PINC;
m=m&0x04;
if(m=0x04)
{
return 0;
}
else
{
return 1;
}
}
/*void device_restart(void)
{
DDRC |= (1<<DDC4);
PORTC |= ~(1<<PORTC4);
delay(3);
PORTC |= (1<<PORTC4);
delay(1);
}*/
void main(void)
{
uchar c;
uchar m;
uint addata;
uchar n;
uint f;
c=0;
twi_init();
IIC_Write(0x12,0x00,0x13,0x00);
twi_init();
IIC_Write(0x11,0x03,0x26,0x7f);
twi_init();
IIC_Write(0x27,0x7f,0x28,0x7f);
DDRA &=~(1<<DDA0)|~(1<<DDA1)|~(1<<DDA2);
PORTA |=(1<<PORTA0)|(1<<PORTA1)|(1<<PORTA2);
DDRB |= (1<<DDB0)|(1<<DDB1)|(1<<DDB2);
while(key())
{
m=0;
switch(m)
{
case 0:
twi_init();
IIC_Write(SLA_AW1,0x00,SLA_AW2,0x00); //輸出燈光數據
twi_init();
IIC_read(SLA_AW1);
IIC_read(SLA_AW2);
break;
case 1:
twi_init();
IIC_Write(SLA_AW1,DATA1,SLA_AW2,DATA2); //輸出燈光數據
delay(2);
ADMUX=0x00;
PORTA &=~(1<<PORTA0);
ADCSRA=0X80;
ADCSRA|=BIT(ADSC);
while(!(ADCSRA&(BIT(ADIF))));
addata=ADCL;
addata=addata+ADCH*256;
twi_init();
IIC_read(SLA_AW1);
IIC_read(SLA_AW2);
break;
case 2:
twi_init();
IIC_Write(SLA_AW1,DATA3,SLA_AW2,DATA4); //輸出燈光數據
delay(2);
ADMUX=0x01;
PORTA &=~(1<<PORTA1);
ADCSRA=0X80;
ADCSRA|=BIT(ADSC);
while(!(ADCSRA&(BIT(ADIF))));
addata=ADCL;
addata=addata+ADCH*256;
twi_init();
IIC_read(SLA_AW1);
IIC_read(SLA_AW2);
break;
case 3:
twi_init();
IIC_Write(SLA_AW1,DATA5,SLA_AW2,DATA6); //輸出燈光數據
delay(2);
ADMUX=0x02;
PORTA &=~(1<<PORTA2);
ADCSRA=0X80;
ADCSRA|=BIT(ADSC);
while(!(ADCSRA&(BIT(ADIF))));
addata=ADCL;
addata=addata+ADCH*256;
twi_init();
IIC_read(SLA_AW1);
IIC_read(SLA_AW2);
break;
default :
m=0;
break;
}
m++;
f=addata;
if(f<=0x3f)
n=0;
else if ((f>0x3f)&(f<=0x7e))
n=1;
else if ((f>0x7e)&(f<=0xbd))
n=2;
else if ((f>0xbd)&(f<=0xfc))
n=3;
else if ((f>0xfc)&(f<=0x12b))
n=4;
else if ((f>0x12b)&(f<=0x16a))
n=5;
else if ((f>0x16a)&(f<=0x1a9))
n=6;
else if ((f>0x1a9)&(f<=0x1e8))
n=7;
else if ((f>0x1e8)&(f<=0x227))
n=8;
else if ((f>0x227)&(f<=0x266))
n=10;
else if ((f>0x266)&(f<=0x29d))
n=11;
else
n=12;
twi_init();
IIC_Write(SLA_AW1,a[n],SLA_AW2,b[n]);
twi_init();
IIC_read(SLA_AW1);
twi_init();
IIC_read(SLA_AW2);
}
}
作者:
abu89
時間:
2018-7-13 17:07
沒人我自己答一波.找了兩天,終于發現按鍵邏輯不用配置輸出,按鍵就可以進去,但是進去了無限循環,然后又需要跳出來,用一個break語句解決
作者:
abu89
時間:
2018-7-13 17:11
按鍵引腳不用設置輸出,按鍵就可以用了,然后進入循環出不來,不可以重復選擇別的狀態,用break跳出舊可以了循環里面用m計數.再次進入就可以跳到別的狀態了.
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
综合久久一区
|
日韩三级
|
亚洲第一成人影院
|
最新中文字幕一区
|
秋霞a级毛片在线看
|
在线精品一区二区
|
亚洲毛片在线观看
|
中文字幕一页二页
|
国产精品久久
|
日韩精品极品视频在线观看免费
|
欧美日韩亚洲国产
|
欧美一区二区在线
|
最新午夜综合福利视频
|
国产精品伦理一区
|
国产精品亚洲综合
|
成人综合一区二区
|
日韩精品一区二区三区
|
在线视频国产一区
|
国产精品毛片
|
国产精品91视频
|
欧美在线观看一区
|
久久精品国产一区
|
欧美一级在线观看
|
国产精品黄色
|
久久国产激情视频
|
欧美一级大片
|
国产精品亚洲片在线播放
|
欧美精品在欧美一区二区少妇
|
av中文字幕在线播放
|
国产黄色精品在线观看
|
免费在线成人网
|
最新日韩精品
|
亚洲国产一区二区三区
|
欧美日韩成人在线
|
亚洲国产一区二区在线
|
日韩精品无码一区二区三区
|
国产乱码精品一区二三赶尸艳谈
|
欧美一级在线免费
|
一级片aaa
|
日本网站免费观看
|
日韩欧美中文
|