完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 lingzijue 于 2013-6-23 16:44 编辑
大家帮忙看一下什么问题 仿真没有问题 但是实物不行 整的老郁闷了 高手给找找原因 #include #include #define uchar unsigned char #define uint unsigned int #define START 0X08 //start已成功发送 #define RESTART 0X10 //restart已成功发送 #define MT_SLA_ACK 0X18 //加载数据已发送ack #define MT_SLA_NACK 0X20 //加载数据已发送nack #define MT_DAT_ACK 0X28 //数据已发送ack #define MT_DAT_NACK 0X30 //数据已发送nack #define SL_SLA_ACK 0X40 //从机数据已加载发送ack #define SL_SLA_NACK 0X48 //从机数据已加载发送nack #define SL_DAT_ACK 0X50 //从机数据已发送ack #define SL_DAT_NACK 0X58 //从机数据已发送nack #define start() TWCR=BIT(TWINT)|BIT(TWSTA)|BIT(TWEN) //发送开始信号 #define restart() TWCR=BIT(TWINT)|BIT(TWEN)|BIT(TWSTA) //发送重新开始信号 #define wait() while(!(TWCR&(BIT(TWINT)))) //等待信号 #define state() (TWSR&0XF8) //寄存器TWSR状态提取 #define stop() TWCR=BIT(TWEN)|BIT(TWINT)|BIT(TWSTO) //停止信号 #define writebyte(temp) {TWDR=(temp);TWCR=BIT(TWINT)|BIT(TWEN);} //写数据 #define r_direction 0xa1 //读的器件地址 #define w_direction 0xa0 //写的器件地址 #define jia() ((PIND&0X01)==0X00) #define jian() ((PIND&0X02)==0X00) #define xie() ((PIND&0X04)==0X00) #define du() ((PIND&0X08)==0X00) __flash uchar Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制 //此表为8个数码管位选控制, 共阴数码管 1-8个 - __flash uchar dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; uchar table[]={0,0,0,0}; uint b=0; void delay(uint n)//延时1毫秒 { uint i,j; for(i=0;i } //显示函数 void display() { uint i,s; s=b; table[0]=s/1000; table[1]=s%1000/100; table[2]=s%100%100/10; table[3]=s%1000%100%10; for(i=0;i<4;i++) { PORTA=Disp_Tab[table]; PORTB=dispbit; delay(5); PORTA=0x00; } } uchar write_data(uchar dat,uchar addr) //向iic写数据 { start(); wait(); if(state()!=START) return 1; writebyte(w_direction); wait(); if(state()!=MT_SLA_ACK) return 1; writebyte(addr); wait(); if(state()!=MT_DAT_ACK) return 1; writebyte(dat); wait(); if(state()!=MT_DAT_ACK) return 1; delay(10); stop(); return 0; } uchar read_data(uchar addr) //从iic中读取数据 { uchar temp; start(); wait(); delay(10); if(state()!=START) return 11; writebyte(w_direction); wait(); if(state()!=MT_SLA_ACK) return 1; writebyte(addr); wait(); if(state()!=MT_DAT_ACK) return 1; restart(); wait(); if(state()!=RESTART) return 1; writebyte(r_direction); wait(); if(state()!=SL_SLA_ACK) return 1; TWCR=BIT(TWINT)|BIT(TWEN); wait(); if(state()!=SL_DAT_NACK) return 1; temp=TWDR; delay(10); stop(); return temp; } //端口初始化 void smg_init(void) { DDRC=0Xff; PORTC=0Xff; DDRA=0Xff; PORTA=0Xff; DDRB=0Xff; PORTB=0Xff; DDRD=0X00; PORTD=0Xff; } void twi_init() //twi的初始化 { TWCR=0X44; //启动twi功能 TWBR=0X20; //设置波特率为主机模式 TWSR=0; //清空状态寄存器 } void main(void) { smg_init(); twi_init(); while(1) { key(); display(); } } void key() { uchar i; if(jia()) { b++; } if(jian()) { b--; } if(xie()) { write_data(b,0x05); } if(du()) { b=read_data(0x05); } }
|
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5122 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7767 浏览 0 评论
3026 浏览 2 评论
3103 浏览 1 评论
10053 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 07:22 , Processed in 0.506265 second(s), Total 49, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号