//*********ATmega128,8channel ADC sampling + LED display + USART*******
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define FOSC 1843200
#define baud 9600
#define MyUBBR (uint)((ulong)FOSC/(16*(ulong)baud)-1)
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar Data[4]={0};
uchar adcon0_table[]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
uchar num1,num2;
uint data_buf[10]={0};
void delay_ms(uint x);
void PORT_init();
void USART_Init(uint ubbr);
void USART_Transmit(uchar data);
uchar USART_Receive(void);
void NumericalLED_display(void);
uint data_average(uint buffer[30]);
void get_AD(void);
void main()
{
uchar i;
PORT_init();
USART_Init(MyUBBR);
while(1)
{
NumericalLED_display();
get_AD();
if(USART_Receive()==0x01)
{
num1=PORTD;
num2=PORTB&0X03;
if((num1==0xff)&&(num2==0x03))
{
USART_Transmit(num1);
USART_Transmit(num2);
for(i=0;i<8;i++)
{
num1=data_buf[i]/255;
num2=data_buf[i]%255;
USART_Transmit(num1);
USART_Transmit(num2);
delay_ms(1000);
}
}
}
}
}
void delay_ms(uint x)
{
uint y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--);
}
void PORT_init()
{
DDRA=0x00;
DDRB=0xFF;
PORTB=0xFF;
DDRC=0xFF;
PORTC=0xFF;
PORTD=0xFF;
DDRD=0xFF;
}
void USART_Init(uint ubbr)
{
UBRR1H= (uchar)(ubbr>>8);
UBRR1L= (uchar)ubbr;
UCSR1A= 0x00;
UCSR1B|=(1<
}
void USART_Transmit(uchar data)
{
while(!(UCSR1A&(UDRE1)));
UDR1=data;
}
uchar USART_Receive(void)
{
while(!(UCSR1A&(1<
}
void NumericalLED_display(void)
{
static uchar i,temp=0x01;//temp=0x7f;
for (i=0; i<4; i++)
{
PORTC=table[Data[i]];
temp=1< PORTB&=~temp;
delay_ms(10);
//PORTC=table[Data[i]];
//PORTB=temp;
//temp=(temp>>1)|0x80;
//__delay_cycles(100);
}
}
uint data_average(uint buffer[30])
{
uchar i,j;
uint temp;
float temp1;
for(i=1; i<30; i++)
for(j=29; j>=i; --j)
{
if(buffer[j-1] > buffer[j])
{
temp = buffer[j-1];
buffer[j-1] = buffer[j];
buffer[j] = temp;
}
}
temp1 = 0;
for(i=5; i<25; i++)
{
temp1 += buffer[i];
}
temp = (uint)(((float)temp1) / 20 + 0.5);
return(temp);
}
void get_AD(void)
{
uchar i,j;
uint adcbuf[30]={0};
static uchar ADC_channel=0;
//ADMUX=0x40;
ADCSRA=0x83;
SFIOR=0x00;
delay_ms(1);
for (i=0; i<8; i++)
{
ADMUX=adcon0_table[ADC_channel];
for(j=0; j<30; j++)
{
asm("NOP");
asm("NOP");
ADCSRA|=BIT(6);
while(((1<
adcbuf[j]=(ADCH<<8)|ADCL;
}
data_buf[i]=data_average(adcbuf);
Data[3]=data_buf[i]/1000;
Data[2]=data_buf[i]%1000/100;
Data[1]=data_buf[i]%100/10;
Data[0]=data_buf[i]%10;
if (++ADC_channel>8)ADC_channel=0;
delay_ms(1);
}
}
//PIC Multi_CD channel source code,
//******Multi_ADChannel converter**********//
#include
__PROG_CONFIG(1,0xc200);
__PROG_CONFIG(2,0x0a16);
__PROG_CONFIG(3,0x8100);
__PROG_CONFIG(4,0x0081);
__PROG_CONFIG(5,0xc00f);
__PROG_CONFIG(6,0xe00f);
__PROG_CONFIG(7,0x400f);
#define uchar unsigned char
#define uint unsigned int
uchar temp;
void multi_convertor(void);
void port_check(void);
uint ADbuf[10];
void delay_ms(uint t)
{
uint m,n;
for (m=0;m
}
void GPIO_Init(void)
{
TRISA=0xff;
TRISB=0xff;
TRISC=0xff;
TRISD=0xff;
TRISE=0xff;
PSPMODE=0;
PSPIE=0;
PSPIP=0;
TRISBbits.RB2 =1; //set direction of RB2 to be An input;
TRISBbits.RB3 =1; //set direction of RB3 to be An input;
}
void ADC_Init(void)
{
ADCON1 = 0x05; //seting AN0~AN9 to be analog input;
ADCON2 = 0xBE; //20TAD,FOSC/64 and right justified;
}
void timer0_init(void)
{
INTCON =0xE0;//GIE,PEIE,TMR0IE to set;
T0CON = 0x1F;// timer0 to be 16-bit;
TMR0H = (65536-1000)/256;
TMR0L = (65536-1000)%256;
T0CON |=0x80;
TMR0ON=1;
}
void EUART_init(void)
{
TRISC7=1;
TRISC6=1;
SPBRG=0x40;
TXSTA=0x24;
RCSTA=0x90;
RCIE=0;
TXIE=0;
PEIE=1;
GIE=1;
}
void transmit_udata(uchar udata)
{
TXREG=udata;
while(!TRMT);
}
uchar receive_udata(void)
{
uchar temp;
if (RCIF==1)
{
temp=RCREG;
}
return temp;
}
uint data_average(uint buffer[30])
{
uchar i,j;
uint temp;
float temp1;
for(i=1; i<30; i++)
for(j=29; j>=i; --j)
{
if(buffer[j-1] > buffer[j])
{
temp = buffer[j-1];
buffer[j-1] = buffer[j];
buffer[j] = temp;
}
}
temp1 = 0;
for(i=5; i<25; i++)
{
temp1 += buffer[i];
}
temp = (uint)(((float)temp1) / 20 + 0.5);
return(temp);
}
void main(void)
{
EUART_init();
GPIO_Init();
ADC_Init();
timer0_init();
while(1)
{
temp=receive_udata();
if (temp==0x01)
{
temp=0;
port_check();
multi_convertor();
}
}
}
void port_check(void)
{
uchar num1, num2;
num1=PORTD;
num2=PORTB&0X03;
transmit_udata(num2);
transmit_udata(num1);
}
void multi_convertor(void)
{
uchar data1,data2,i;
static uchar ADC_channel=0;
uint adc[30]={0};
// ADC_channel++;
for (ADC_channel=0; ADC_channel<10; ADC_channel++)
{
switch(ADC_channel)
{
case 0: ADCON0=0x01;break;//AN0 channel;
case 1: ADCON0=0x05;break;//AN1 channel;
case 2: ADCON0=0x09;break;//AN2 channel;
case 3: ADCON0=0x0D;break;//AN3 channel;
case 4: ADCON0=0x11;break;//AN4 channel;
case 5: ADCON0=0x15;break;//AN5 channel;
case 6: ADCON0=0x19;break;//AN6 channel;
case 7: ADCON0=0x1D;break;//AN7 channel;
case 8: ADCON0=0x21;break;//AN8 channel;
case 9: ADCON0=0x25;break;//AN9 channel;
default:break;
}
for(i=0;i<30;i++)
{
ADCON0 |=0x01;
asm("NOP");
asm("NOP");
GODONE=1;
while(GODONE);
adc[i]=(ADRESH*256)+ADRESL;
}
ADbuf[ADC_channel]=data_average(adc);
data1=ADbuf[ADC_channel]/255;
data2=ADbuf[ADC_channel]%255;
transmit_udata(data1);
transmit_udata(data2);
}
}
上一篇:DHT11温湿度传感器的AVR单片机例程
下一篇:avr单片机双通信C程序
推荐阅读
史海拾趣
闷呀,找了20分钟的错,居然是对编译环境的不熟造成的。原来我定义的 ORG 000H JMP MAIN ORG 00CH JMP TIMER0 ORG 008H JMP RC00 结果是怎么搞都通不过。。最后把ORG的地址按顺序来排列居然通过了。。。。哎, ...… 查看全部问答∨ |
|
小弟是菜鸟初学单片机,写了个1602的程序可是不能用,于是借用别人写好的程序(那个人的程序可以用),可是载到我的单片机里面就不能用,1602就第一行全部显示方块,第二行空白,这是什么原因,哪位高手可以点拨点拨小弟,小弟感激不尽。… 查看全部问答∨ |
|
去年开始接触EDA至今,我依然感觉自己还在FPGA的门外。我自己对EDA很感兴趣,学习之路不易。经过一段时间的学习,我发现EDA的关键不是用HDL设计而是用HDL描述。 HDL的全称是硬件描述(describe)语言而不是硬件设计(design)语言! ...… 查看全部问答∨ |
本帖最后由 paulhyde 于 2014-9-15 03:46 编辑 在一个有严格功耗要求的系统中,供电电源的设计不能够采用简单的方式来完成,必须对所采用电源电路结构仔细考虑[3~6]。 线性稳压电路 线性稳压电路(包含LDO)其特点是电 ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况
- ADI基于ADPD188BI的烟雾探测器集成解决方案 有奖直播 5月13日上午10:00-11:30 为您揭晓!
- Deyisupport博文阅读季:推荐你喜欢的放大器博文,抢楼赢好礼!
- 直播|基于英特尔® Agilex™ FPGA F-Tile的以太网硬核IP详解及如何使用oneAPI对FPGA编程
- EEWorld 芯积分兑换年度回馈来袭~多种赚积分捷径曝光+礼品兑换剧透
- “西北模电王”新概念模拟电路4 《运放电路的频率特性和滤波器》
- 汽车VCU知识问答第二站:了解VCU开发流程和任务分解、岗位需求
- 【MPS有奖评论】一起聊聊选型的那些过往
- Vicor可最大限度提高AI、HPC和数据计算性能的电源解决方案