第一范文网 - 专业文章范例文档资料分享平台

ATmega - 128经典程序例子 (2)

来源:用户分享 时间:2020-05-05 本文由激戰丄海灘 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

}

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 #define uchar unsigned char uchar uc_led,k; void main() {

//设置数码管输出高电平 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 } }

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新综合文库ATmega - 128经典程序例子 (2)全文阅读和word下载服务。

ATmega - 128经典程序例子 (2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/995824.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top