logo资料库

ATmega128实例程序.doc

第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
资料共45页,剩余部分请下载后查看
1、流水灯
2、AD转换+数码管显示
3、对EEPROM进行读写操作
4、定时器0(轮循方式)
5、定时器0中中断
6、定时器1测试程序
7、定时器1测试程序之二
8、串口通信(USART0)
9、串口通信(USART1)
10、ATMEGA128 SPI驱动
11、PWM波形输出
12、定时器1数码管显示(1s)
13、定时器1:定时计数(1s)
14、外部中断0-3
15、定时器3 pwm输出
16、定时器0,快速PWM模式
17、定时器0,相位修正(调整)模式
18、定时器1pwm波形输出
19、定时器3,OCRB3输出PWM波形,占空比可调
1、流水灯 ....................................................................................................................................................................1 2、AD 转换+数码管显示 ...........................................................................................................................................2 3、对 EEPROM 进行读写操作................................................................................................................................. 8 4、定时器 0(轮循方式).........................................................................................................................................9 5、定时器 0 中中断..................................................................................................................................................10 6、定时器 1 测试程序 ..............................................................................................................................................12 7、定时器 1 测试程序之二 ......................................................................................................................................14 8、串口通信(USART0).......................................................................................................................................15 9、串口通信(USART1).......................................................................................................................................17 10、ATMEGA128 SPI 驱动 .....................................................................................................................................20 11、PWM 波形输出 ................................................................................................................................................. 21 12、定时器 1 数码管显示(1s)............................................................................................................................ 22 13、定时器 1:定时计数(1s) .............................................................................................................................27 14、外部中断 0-3 ......................................................................................................................................................32 15、定时器 3 pwm 输出 ...........................................................................................................................................34 16、定时器 0,快速 PWM 模式 .............................................................................................................................35 17、定时器 0,相位修正(调整)模式 ................................................................................................................ 36 18、定时器 1pwm 波形输出 ....................................................................................................................................38 19、定时器 3,OCRB3 输出 PWM 波形,占空比可调.......................................................................................39 1、流水灯 /* 硬件环境:atmega128 开发板 软件环境:CodeVisionAVR-C */ #include #define uchar unsigned char #define uint unsigned int uchar cnt; void timer1_init() { TCCR1B=0X00; TCNT1H=0XF0; TCNT1L=0XBE; TCCR1A=0X00; TCCR1B=0X05; //先停止定时器 1 //设定定时器初值 //启动定时器 1 //使用 1024 分频 } interrupt [TIM1_OVF] void timer1_ovf_isr(void) { //重载定时器初值 TCNT1H=0XF0; TCNT1L=0XBE; DDRE|=1<<2; PORTE|=1<<2; DDRA=0xff; 1
//输出 led 的值到端口 B PORTA=cnt; cnt++; if(cnt==255) cnt=0; } void main() { //DDRB=0XFF; SREG|=0X80; TIMSK=0X04; timer1_init(); while(1) {; } */ */ */ } 2、AD 转换+数码管显示 /***************************************************************************/ /*ADC 测试程序 /*目标器件:ATmega128 /*晶振:RC 8MHZ /*编译环境:ICCAVR 7.13A /*E-Mail:number007cool@163.com /*时间:2010 年 11 月 13 日 //Aref 接 AVCC(+5V),采用 Aref 作参考电压 /*用数码管显示 AD 转换的结果*/ /***************************************************************************/ /*********************************包含头文件********************************/ #include #include /********************************数码管段码表*******************************/ extern const unsigned char tab[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, */ */ */ 0x7F,0x6F}; /*********************************全局变量**********************************/ unsigned int adc_rel=0; /**************************************************************************** 函数功能:ADC 初始化函数 入口参数: 出口参数: ****************************************************************************/ void adc_init(void) { DDRF&=0XFE; PORTF&=0XFE; ADCSRA=0x00; ADMUX = 0X00; //PORTF0 设置为输入,即作为 ADC0 口输入模拟电压 //PORTF0 设置为输入低电平 //关 ADC //采用 Aref 作为参考电压,ADC0 单端输入,右对齐 2
ACSR=(1<0x1ff) { PORTA|=1<<2; } else */ } PORTA&=~(1<<2); /**************************************************************************** 函数功能:延时子程序 入口参数: 出口参数: ****************************************************************************/ void delay(void) { int i; for(i=0;i<1800;i++); } /**************************************************************************** 函数功能:显示子程序 入口参数:k 出口参数: ****************************************************************************/ void display(unsigned int k)//发光二极管显示初始化 { DDRE|=1<<2; 3
PORTE|=1<<2; DDRA=0XFF; PORTA=k; } #define SS 0 #define SCK 1 #define MOSI 2 #define MISO 3 #define SS_H() PORTB|=(1< #include const unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66, //0,1,2,3,4 //5,6,7,8,9 //a,b,c,d,e,f 0x6D,0x7D,0x07,0x7F,0x6F, 0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; volatile unsigned char led_buffer[4]; void delay_1us(void) //1us 延时函数 void delay_nus(unsigned int n) //N us 延时函数 { asm("nop"); } { unsigned int i=0; for (i=0;i
} void delay_nms(unsigned int n) { unsigned int i=0; for (i=0;i
if(point==0) HC_595_OUT(table[led_buffer[3]]|(1<9999) { HC_595_OUT(0xFF);//当计数大于 9999 时,四个数码管同时输出 8 PORTB|=((1<<4)|(1<<5)|(1<<6)|(1<<7)); } else if(data>999) { 6
led_buffer[0]=data/1000; led_buffer[1]=(data%1000)/100; led_buffer[2]=(data%100)/10; led_buffer[3]=data%10; leddis_update(); } else if(data>99) { led_buffer[0]=data/1000; led_buffer[1]=(data%1000)/100; led_buffer[2]=(data%100)/10; led_buffer[3]=data%10; leddis_update(); //关闭最高位的那个数码管 else if(data>9) { led_buffer[0]=data/1000; led_buffer[1]=16; led_buffer[2]=(data%100)/10; led_buffer[3]=data%10; leddis_update(); } else { led_buffer[0]=data/1000; led_buffer[1]=16; led_buffer[2]=16; led_buffer[3]=data%10; leddis_update(); } } } volatile unsigned int countnum=0; void timer1_init(void) { TCCR1B = 0x00; //stop TCNT1H = 0x8F; //setup TCNT1L = 0x81; OCR1AH = 0x70; OCR1AL = 0x7F; OCR1BH = 0x70; OCR1BL = 0x7F; 7
OCR1CH = 0x70; OCR1CL = 0x7F; ICR1H = 0x70; ICR1L = 0x7F; TCCR1A = 0x00; TCCR1B = 0x04; //start Timer } #pragma interrupt_handler timer1_ovf_isr:15 void timer1_ovf_isr(void) { TCNT1H = 0x8F; //reload counter high value TCNT1L = 0x81; //reload counter low value countnum++; if(countnum>9999) countnum=0; } void init_devices(void) { CLI(); //disable all interrupts timer1_init(); TIMSK = 0x04; //timer interrupt sources SEI(); //re-enable interrupts } /**************************************************************************** 函数功能:主程序 入口参数: 出口参数: ****************************************************************************/ void main(void) { init_devices(); HC_595_init(); adc_init(); SEI();//开全局中断变量 display(0); while(1) { delay(); display_led(adc_rel/1024.0*5*1000); } } 3、对 EEPROM 进行读写操作 /************************************************ 文件:main.c 用途: 8
分享到:
收藏