- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第14讲-ADC-数字电位计
内部参考电压2.56V (带简单滤波)ADC_Inner_SPI_Usart+_ok2 //查询方式A/D转换程序 #include avr/io.h #define F_CPU#include util/delay.h #define uchar unsigned char #define adc_count 3//采样3次,取中间值 volatile uchar ret=0,ad_value_buffer[adc_count]; //A/D缓存区 volatile uchar i,j,temp,temp_1,temp_10,temp_100; const uchar MAX7219SEG[16]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B, 0x7f,0x1f,0x4e,0x3d,0x4f,0x47}; // 对应0~F共阴数码管 #define DD_SS 4 #define DD_MOSI 5 #define DD_MISO 6 #define DD_SCK 7 #define BAUD 9600 #define uchar unsigned char void SPI_MasterTransmit(char cData) { SPDR=cData; while(!(SPSR(1SPIF))){};//等待结束 } void MAX7219_SPI_Send(unsigned char dir,unsigned char d8) { PORTB=~(1DD_SS); //置SS0,使得load=0 SPI_MasterTransmit(dir); SPI_MasterTransmit(d8); PORTB|=1DD_SS;//置SS1,使得load=1,输入到内部寄存器 } void Max7219_Init(void) { DDRB=(1DD_MOSI)|(1DD_SCK)|(1DD_SS); SPCR=(1SPE)|(1MSTR)|(1SPR0); MAX7219_SPI_Send(0x0A,7);//数码管亮度 MAX7219_SPI_Send(0x0B,7); //数码管个数 MAX7219_SPI_Send(0x09,0x00); //全部硬件译码 MAX7219_SPI_Send(0x0C,0x01); //启动工作 MAX7219_SPI_Send(0x01,0;//显示- MAX7219_SPI_Send(0x02,0); MAX7219_SPI_Send(0x03,0); MAX7219_SPI_Send(0x04,0); MAX7219_SPI_Send(0x05,0); MAX7219_SPI_Send(0x06,0); MAX7219_SPI_Send(0x07,0; MAX7219_SPI_Send(0x08,0; } void USART_Init(void) { UBRRH = (F_CPU/BAUD/16-1)/256;//波特率设置,设置高字节的低4位 UBRRL = (F_CPU/BAUD/16-1)%256;//波特率设置,设置低字节 UCSRB = (1 RXEN)|(1 TXEN)|(0 UCSZ2); //使能发送和接收,不使能接收和发送中断,8位数据 UCSRC = (1 UCSZ1)|(1 UCSZ0)|(0 USBS)|(1 URSEL); //8位数据,1位停止位,选择UCSRC } void SendData(uchar myData) { UDR =myData; while((UCSRA(1TXC))==0); //等待发送换完毕 //UCSRA|=(1TXC);//自动清理 while((UCSRA(1UDRE))==0); //发送寄存器空,可以发送了 } uchar ADConvert(void) { //连续采样adc_count次 for(i=0;iadc_count;++i) { ADCSRA|=(1ADSC); //启动转换 while((ADCSRA(1ADIF))==0); //等待转换完毕 ADCSRA|=(1ADIF);//写1清除标志位 ad_value_buffer[i]=ADCH;// 右对齐,只读取高8位 } //冒泡法从小到大排序 for(j=0;j2;++j) { for(i=0;i2;++i) { if(ad_val
文档评论(0)