#include <IO8535V.h>
#include <MACROS.H>
#define uchar unsigned char
#define uint unsigned int
uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//SPI INTERFACE
//sbit CE=PB^4; 置1:|0x10 ,置0:&0xef
//sbit SDI=PB^5; 置1:|0x20 ,置0:&0xdf
//sbit SDO=PB^6; 置1:|0x40 ,置0:&0xbf
//sbit SCLK=PB^7; 置1:|0x80 ,置0:&0x7f
void DelayMs(uint i)
{uint j;
for(;i!=0;i--)
{for(j=2000;j!=0;j--) {;}}
}
void DelayNOP(uchar i)
{for(;i!=0;i--)
{ NOP();}
}
void Display(uchar *p)
{uchar i,sel=0x01;
for(i=0;i<4;i++)
{PORTA=sel;
PORTC=0xff-Table[p[i]];
DelayMs(2);
sel=sel<<1;
}
}
void Set_CE(uchar i)
{if(i==1) PORTB=PORTB|0x10;
if(i==0) PORTB=PORTB&0xef;}
void Set_SDI(uchar i)
{if(i==1) PORTB=PORTB|0x20;
if(i==0) PORTB=PORTB&0xdf;}
void Set_SCLK(uchar i)
{if(i==1) PORTB=PORTB|0x80;
if(i==0) PORTB=PORTB&0x7f;}
void SPI_Init(void)
{Set_CE(0);//CE=0;//Disable Chip_Select
Set_SCLK(1);//SCLK=1;//Clock Polarity(CPOL)=1
}
void SPI_Process(uchar *p1,uchar *p2)
{uchar i;
p2[0]=p1[0]/100;
i=p1[0]%100;
p2[1]=i/10;
p2[2]=i-p2[1]*10;
p2[3]=0;
}
void SPI_Write1Byte(uchar Address,uchar Data)
{uchar i;
Set_SDI(0);//SDI=0;
Set_SCLK(1);//SCLK=1;//CPOL=1
Set_CE(1);//CE=1;//Enable Chip_Select
for(i=0;i<8;i++) //送地址;
{Set_SCLK(0);//SCLK=0;//时钟恢复
if(Address&0x80) Set_SDI(1);//SDI=1;//MSB first
else Set_SDI(0);//SDI=0;
Address=Address<<1;//左移
Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
DelayNOP(30);}
for(i=0;i<8;i++) //送地址;
{Set_SCLK(0);//SCLK=0;//时钟恢复
if(Data&0x80) Set_SDI(1);//SDI=1;//MSB first
else Set_SDI(0);//SDI=0;
Data=Data<<1;//左移
Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
DelayNOP(30);}
Set_CE(0);//CE=0;
}
uchar SPI_Read1Byte(uchar Address)
{uchar i,temp;
//SDO=1;
Set_SCLK(1);//SCLK=1;//CPOL=1
Set_CE(1);//CE=1;//Enable Chip_Select
for(i=0;i<8;i++) //送地址;
{Set_SCLK(0);//SCLK=0;//时钟恢复
if(Address&0x80) Set_SDI(1);//SDI=1;//MSB first
else Set_SDI(0);//SDI=0;
Address=Address<<1;//左移
Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
DelayNOP(30);}
for(i=0;i<8;i++)
{Set_SCLK(0);//SCLK=0;//提供一个下降沿接收一位数据
temp=temp<<1;
DelayNOP(30);
if(PINB&0x40) temp=temp|0x01;
//if(SDO) temp=temp|0x01;//采样
Set_SCLK(1);//SCLK=1;//时钟恢复
DelayNOP(30);}
Set_CE(0);//CE=0;//Disbale Chip_Select
return(temp);
}
void main(void)
{uchar Read_Temp[2];
uchar Temp[4];
uchar i;
DDRA=0xff;
DDRC=0xff;
DDRB=0xbf;
PORTA=0xff;
PORTC=0x00;
DelayMs(2500);
PORTC=0xff;
SPI_Init();
SPI_Write1Byte(0x80,0xf0);//1 1 1 1SHOT R2 R1 R0 SD,8bit sampling
//1 1 1 1 0 0 0 0//SD=0 indicate continuous convertion
while(1)
{Read_Temp[1]=SPI_Read1Byte(0x01);//Low Byte
Read_Temp[0]=SPI_Read1Byte(0x02);//Hign Byte
SPI_Process(Read_Temp,Temp);
//DelayMs(250);
Display(Temp);
}
}
AVR.rar_avr AD_avr 中断
版权申诉
101 浏览量
2022-09-20
17:00:41
上传
评论
收藏 310KB RAR 举报
寒泊
- 粉丝: 74
- 资源: 1万+
最新资源
- 基于matlab实现多车辆车辆路径问题,用遗传算法编程,保证可用.rar
- 基于matlab实现多层极限学习机实现手写体识别,准确率超过99%.rar
- 基于matlab实现电力系统最优潮流程序,可以应用于电力市场下的最优潮流计算 适合电力系统专业的同仁使用.rar
- 串行通信的通信协议串口协议串行通信的通信协议串口协议
- Vue构建交互式的单页面应用程序Vue构建交互式的单页面应用程序
- Spring Boot快速搭建和部署应用程序
- Redis开源的高性键值存储系统广泛应用于缓存、实时消息传递
- Qt跨平台的应用程序开发框架Qt跨平台的应用程序开发框架
- 单片机是集成处理器、存储器和输入输出设备
- 深度学习机器习方法模仿人脑神经网络深度学习机器习方法模仿人脑神经网络
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈