ATmega - 128经典程序例子
更新时间:2023-10-21 12:36:01 阅读量: 综合文库 文档下载
- atmega328p推荐度:
- 相关推荐
ATMEGA128相关例程
1、流水灯程序 /*
硬件环境:atmega128开发板 软件环境:CodeVisionAVR-C */
#include
void timer1_init() {
TCCR1B=0X00; //先停止定时器1 TCNT1H=0XF0; //设定定时器初值 TCNT1L=0XBE;
TCCR1A=0X00; //启动定时器1 TCCR1B=0X05; //使用1024分频 }
interrupt [TIM1_OVF] void timer1_ovf_isr(void) {
TCNT1H=0XF0; //重载定时器初值 TCNT1L=0XBE; DDRE|=1<<2; PORTE|=1<<2; DDRA=0xff;
PORTA=cnt; //输出led的值到端口B 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
/********************************数码管段码表*******************************/
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; //PORTF0设置为输入,即作为ADC0口输入模拟电压 PORTF&=0XFE; //PORTF0设置为输入低电平 ADCSRA=0x00; //关ADC
ADMUX = 0X00; //采用Aref作为参考电压,ADC0单端输入,右对齐 ACSR=(1<
ADCSRA = (1<
/***********************************************************************
*****
函数功能:ADC中断函数 入口参数: 出口参数:
****************************************************************************/
#pragma interrupt_handler adc_isr:iv_ADC void adc_isr(void) {
//int data_h,data_l; //data_l=ADCL; //data_h=ADCH; ADCSRA = 0x00;
ADCSRA = (1<
if(adc_rel>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; PORTE|=1<<2; DDRA=0XFF; PORTA=k; }
#define SS 0 #define SCK 1 #define MOSI 2 #define MISO 3
#define SS_H() PORTB|=(1< #define led0_en() {DDRB|=1<<4;PORTB|=(1<<4);} //开第一个数码管的位选 #define led0_dis() {DDRB|=1<<4;PORTB&=~(1<<4);} //关第一个数码管的位选 #define led1_en() {DDRB|=1<<5;PORTB|=(1<<5);} #define led1_dis() {DDRB|=1<<5;PORTB&=~(1<<5);} #define led2_en() {DDRB|=1<<6;PORTB|=(1<<6);} #define led2_dis() {DDRB|=1<<6;PORTB&=~(1<<6);} #define led3_en() {DDRB|=1<<7;PORTB|=(1<<7);} #define led3_dis() {DDRB|=1<<7;PORTB&=~(1<<7);} #define OE 7 #define point 3 #define dp 7 #include const unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66, //0,1,2,3,4 0x6D,0x7D,0x07,0x7F,0x6F, //5,6,7,8,9 0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; //a,b,c,d,e,f volatile unsigned char led_buffer[4]; void delay_1us(void) //1us延时函数 { asm(\ } void delay_nus(unsigned int n) //N us延时函数 { unsigned int i=0; for (i=0;i void delay_1ms(void) //1ms延时函数 { unsigned int i; for (i=0;i<1140;i++); } void delay_nms(unsigned int n) //N ms延时函数 { unsigned int i=0; for (i=0;i /*完成spi的初始化*/ void spi_init(void) { DDRB |= (1< SPCR = (1< /*spi主机传送数据*/ void SPI_MasterTransmit(char Data) { /* 启动数据传输 */ SPDR = Data; /* 等待传输结束 */ while(!(SPSR & (1< /*完成对HC595的初始化*/ void HC_595_init(void) { DDRC |= (1< led_buffer[0]=16; //初始化数码管段码 led_buffer[1]=16; led_buffer[2]=16; led_buffer[3]=16; } /*HC595完成传送数据*/ void HC_595_OUT(unsigned char data) { SS_L(); SPI_MasterTransmit(data); SS_H(); } void leddis_update(void) { /*最低位数码管,第四个数码管*/ if(point==0) HC_595_OUT(table[led_buffer[3]]|(1< HC_595_OUT(table[led_buffer[3]]); led0_en(); delay_nus(60); led0_dis(); if(point==1) HC_595_OUT(table[led_buffer[2]]|(1< HC_595_OUT(table[led_buffer[2]]); led1_en(); delay_nus(60); led1_dis(); if(point==2) HC_595_OUT(table[led_buffer[1]]|(1< HC_595_OUT(table[led_buffer[1]]); led2_en(); delay_nus(60); led2_dis(); /*最高位数码管,第一个数码管*/ if(point==3) HC_595_OUT(table[led_buffer[0]]|(1< HC_595_OUT(table[led_buffer[0]]); led3_en(); delay_nus(60); led3_dis(); } void display_led(unsigned int data) { if(data>9999) { HC_595_OUT(0xFF);//当计数大于9999时,四个数码管同时输出8 PORTB|=((1<<4)|(1<<5)|(1<<6)|(1<<7)); } else if(data>999) { led_buffer[0]=data/1000; led_buffer[1]=(data00)/100; led_buffer[2]=(data0)/10; led_buffer[3]=data; leddis_update(); } else if(data>99) { led_buffer[0]=data/1000; //关闭最高位的那个数码管 led_buffer[1]=(data00)/100; led_buffer[2]=(data0)/10; led_buffer[3]=data; leddis_update(); } else if(data>9) { led_buffer[0]=data/1000; led_buffer[1]=16; led_buffer[2]=(data0)/10; led_buffer[3]=data; leddis_update(); } else { led_buffer[0]=data/1000; led_buffer[1]=16; led_buffer[2]=16; led_buffer[3]=data; 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; 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 用途: 注意:内部8M晶振 ************************************************/ #include \/*向EEPROM里面写入数据 输入量:地址,数据*/ void EEPROM_write(unsigned int uiAddress,unsigned char ucData) { while(EECR&(1< EECR |=(1< /*从EEPROM指定的地址里面读出相应的数据*/ unsigned char EEPROM_read(unsigned int uiAddress) { while(EECR&(1< return EEDR; //返回读入EEDR里面的数据 } void main(void) { unsigned char temp=123; unsigned char data; HC_595_init(); EEPROM_write(0x01,temp); data=EEPROM_read(0x01); while(1) { Seg7_Led_display(data); //调用显示函数将写入的数据又读出来 } } 文件: eeprom12.rar 大小: 40KB 下载: 下载 4、定时器0(轮循方式)程序 /*定时器0和2(均为八位的定时计数器)有四种工作模式,此例是工作在普通模式。 在此模式下,计数器不断的累加,当计数到最大值0xff后返回到0x00重新开始,在TCNT0 为0 的同时,T/C溢出标志TOV0置位*/ //使用轮循方式,当TIFR溢出时,uc_led加1,输出到led时期发光 //TIFR中断标志寄存器 #include //设置数码管输出高电平 DDRE|=1<<2; PORTE|=1<<2; DDRA=0XFF; PORTF=0XFF; TCNT0=0X00;//设定定时计数器的初值为0 TCCR0=0X05;//使用1024分频(共有7种时钟) uc_led=0; k=0; while(1) { while(!(TIFR&0X01));//循环检测TIFR中的溢出标志是否有效 //PORTA=uc_led; uc_led++; if(uc_led==255) {uc_led=0; k++; if(k==255) k=0; PORTA=k; } TIFR|=0X01; //写1到TIFR的TOV0位清除溢出标志为TOV0 } }
正在阅读:
ATmega - 128经典程序例子10-21
九年级下数学月考试卷(苏科版中考一模)04-15
2017年山东省监理工程师考试《合同管理》:建筑工程一切险考试试题07-28
山地民用建筑场地规划设计实例解析07-25
2014年河南专业技术人员继续教育公需课考试题库及答案大全05-30
4《中国电力投资集团公司水电建设工程质量评估大纲》2007.2704-17
黑龙江省结构工程师复习记忆诀窍总结每日一练(2014.8.9)03-14
《拿来主义》教学反思09-17
丰都县金融精准扶贫实施办法(试行)11-24
国税 新增和完善分析预警指标简要说明12-10
- 小学生造句大全
- 增压泵投资项目可行性研究报告(模板)
- 高中语文人教版粤教版必修1-5全部文言文知识点归纳
- 两学一做专题民主生活会组织生活会批评与自我批评环节个人发言提
- 管理处环境保洁工作操作标准作业指导书
- 2012六一儿童节活动议程 - 图文
- 移树申请报告
- 《贵州省市政工程计价定额》2016定额说明及计算规则
- 计算机长期没有向WSUS报告状态
- 汉语拼音教学策略研究
- 发展西部领先的航空货运枢纽
- 司法所上半年工作总结4篇
- 如何提高银行服务水平
- 发电厂各级人员岗位职责
- 丰田汽车的外部环境分析
- 2017—2018年最新冀教版四年级数学下册《混合运算》教案精品优质
- 中建八局样板策划 - 图文
- 戚安邦《项目管理学》电子书
- 2015年高级项目经理笔记
- 弯桥的设计要点
- 例子
- 程序
- 经典
- ATmega
- 128
- 计算机基础PPT题目与答案
- 温控仪的参数设置
- 遥感实验 - 图文
- 格林公式、高斯公式、斯托克斯公式的应用
- 楼梯扶手及铁艺栏杆制作安装工程技术标
- 质量技术监督试题 有答案
- 三毛,荒芜里开出的奇葩
- 刑法诉讼探究离任法官、检察官任职回避制度
- 我国上市公司信息透明度对其资本成本影响的分析
- 隧道全断面注浆方案
- 铁道部办公厅关于印发《铁路基建大中型项目四电专业第一批首件工程评估实施细则》铁办100号文附表 - 图文
- 清末军制浅述
- 2008年青岛市教育局教师考录
- 百日大走访活动方案
- 浅谈如何利用学生的前概念构建科学概念
- 古文观止原文及翻译
- 影视声音艺术教学大纲
- 第一讲--整数与同余理论
- 2013年银行高管试题案例分析部分(一)
- 天津创举CJST塔盘