AVR单片机 mega128 例程大全文档格式.docx

上传人:b****6 文档编号:19702999 上传时间:2023-01-09 格式:DOCX 页数:62 大小:29.12KB
下载 相关 举报
AVR单片机 mega128 例程大全文档格式.docx_第1页
第1页 / 共62页
AVR单片机 mega128 例程大全文档格式.docx_第2页
第2页 / 共62页
AVR单片机 mega128 例程大全文档格式.docx_第3页
第3页 / 共62页
AVR单片机 mega128 例程大全文档格式.docx_第4页
第4页 / 共62页
AVR单片机 mega128 例程大全文档格式.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

AVR单片机 mega128 例程大全文档格式.docx

《AVR单片机 mega128 例程大全文档格式.docx》由会员分享,可在线阅读,更多相关《AVR单片机 mega128 例程大全文档格式.docx(62页珍藏版)》请在冰豆网上搜索。

AVR单片机 mega128 例程大全文档格式.docx

TCCR1B=0x00;

time=TCNT1H*256+TCNT1L;

if(time<

chao)

{

o=500;

while(o--)

PORTD=0x04;

}

if(time>

PORTD=0x08;

 

//AD

#include<

iom128v.h>

#defineunintunsignedint

#defineuncharunsignedchar

#pragmadata:

code

consttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unintmega128_ad()

unintaddata;

DDRF&

=~BIT(0);

PORTF&

ADMUX=0;

ADCSRA=0X80;

ADCSRA|=BIT(ADSC);

while(!

(ADCSRA&

(BIT(ADIF))));

addata=ADCL;

addata=addata+ADCH*256;

returnaddata;

voidshow(count)

unchartemp1,temp2,temp3,temp4;

temp1=count/1000;

temp2=(count%1000)/100;

temp3=(count%100)/10;

temp4=count%10;

HC_595_OUT(table[temp4]);

DDRB|=(1<

<

4);

PORTB|=(1<

delay(10);

PORTB&

=~(1<

HC_595_OUT(table[temp3]);

5);

HC_595_OUT(table[temp2]);

6);

HC_595_OUT(table[temp1]);

7);

voidHC_595_OUT(count)

0);

SPDR=count;

while(!

(SPSR&

(1<

SPIF)));

PORTB|=(1<

voiddelay(z)

unintx,y;

for(x=0;

x<

x++)

for(y=0;

y<

200;

y++);

unintcount,chl;

DDRC|=(1<

PORTC&

=(1<

PORTB=0x0F;

DDRB|=(1<

2)|(1<

1)|(1<

SPCR=(1<

SPE)|(1<

MSTR)|(1<

SPR0)|(1<

SPR1);

count=mega128_ad();

//用参数代替老是出问题,这一点需要再次认知考虑

/*for(i=0;

4;

ad[3-i]=shuzhi%10;

shuzhi=shuzhi/10;

}*/

show(count);

//ADC

//CTC

//该程序并未在示波器上测试,在仿真软件上仿真时只有PB5上有方波信号出现

#defineucharunsignedchar

#defineuintunsignedint

DDRB|=0X60;

TCCR1A=0X50;

TCCR1B=0X09;

OCR1A=0X7CF;

//D口矩阵键盘检测

#include"

config.h"

constunsignedcharSeg7_Data[]={0x3F,0x06,0x5B,0x4F,0x66,

0x6D,0x7D,0x07,0x7F,0x6F,

0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};

unchartemp1,temp2,temp3,temp4;

unintdata,z;

voidHC_595_init()

DDRC=0x80;

PORTC=0x00;

PORTB=0x0F;

DDRB=0x07;

SPCR=0x53;

voidSeg7_Led_display(unintdata)

unchartemp1,temp2,temp3,temp4;

temp1=data/1000;

temp2=(data%1000)/100;

temp3=(data%100)/10;

temp4=data%10;

HC_595_OUT(Seg7_Data[temp4]);

delay(20);

HC_595_OUT(Seg7_Data[temp3]);

HC_595_OUT(Seg7_Data[temp2]);

HC_595_OUT(Seg7_Data[temp1]);

voidHC_595_OUT(unchardata)

PORTB=0x06;

SPDR=data;

while(SPSR==0);

PORTB=0x01;

voiddelay(unintz)

uninti,j;

voiddelay_1us(void)//1us延时函数

asm("

nop"

);

voiddelay_nus(unsignedintn)//Nus延时函数

unsignedinti=0;

for(i=0;

n;

delay_1us();

}

voiddelay_1ms(void)//1ms延时函数

unsignedinti;

1140;

i++);

voiddelay_nms(unsignedintn)//Nms延时函数

delay_1ms();

voidBuzz_init(void)

DDRG|=(1<

PORTG&

=~(1<

voidBeep(unsignedintH_time,unsignedintL_time)

PORTG|=(1<

delay_nms(H_time);

delay_nms(L_time);

intkey_press(void)

{intk;

delay_nms(5);

PORTD=0x01;

delay_nms(5);

if((PIND&

0xF0)!

=0x00)

delay_nms(10);

if((PIND&

{

if(PIND==0x11)

Beep(100,50);

PORTA=0x1F;

k=1;

}

elseif(PIND==0x21)

PORTA=0xFD;

k=2;

elseif(PIND==0x41)

PORTA=0xFB;

k=3;

elseif(PIND==0x81)

PORTA=0xF7;

k=4;

}

else{;

}else{;

//第二行

delay_nms(5);

PORTD=0x02;

if(PIND==0x12)

k=5;

elseif(PIND==0x22)

k=6;

elseif(PIND==0x42)

k=7;

elseif(PIND==0x82)

k=8;

//第三行

PORTD=0x04;

if(PIND==0x14)

k=9;

elseif(PIND==0x24)

k=10;

elseif(PIND==0x44)

k=11;

elseif(PIND==0x84)

k=12;

//第四行

PORTD=0x08;

if(PIND==0x18)

elseif(PIND==0x28)

k=14;

elseif(PIND==0x48)

k=15;

elseif(PIND==0x88)

k=16;

else{;

returnk;

voidmain(void)

inti,j,x;

DDRA=0xFF;

PORTA=0xFF;

DDRD=0x0F;

DDRE=0xFF;

PORTE=0xFF;

Buzz_init();

while

(1)

{

x=key_press();

HC_595_init();

Seg7_Led_display(x);

}

//1602液晶

#defineucharunsignedchar

#defineuintunsignedint

#defineRS0

#defineRW1

#defineEN2

ucharwz[]={"

*WEN.JIU.LONG*"

};

uchargd[]={"

GoodLuck!

"

voids_ms(uintms)

for(;

ms>

1;

ms--);

//写指令

voidwritecom(ucharcom)

PORTC&

RS);

//RS=0命令选择

RW);

//RW=0写选择

PORTC|=(1<

EN);

//EN=1使能信号

s_ms(500);

PORTA=com;

//输出指令

//EN=0

//1602初始化

voidLcdInit(void)

{

writecom(0x01);

writecom(0x02);

writecom(0x06);

writecom(0x0c);

writecom(0x38);

//没理解好这里设置的是四位总线,而且设不成5X10的点阵

}

//================================================================

//描述:

在任意位置写任意多个字符

//入口:

’row‘要写的字符所在的行,只能为1或2;

//‘col’要写的字符所在的列,只能为0---15

//‘num’要写字符的个数

//‘pbuffer’要写字符的首地址

//==================================================================

voidWriteChar(ucharrow,ucharcol,uintnum,uchar*pBuffer)

uchari,t,add;

if(row==1)add=0x80+col+0x10;

elseadd=0x80+0x40+col+0x10;

writecom(add);

for(i=num;

i!

=0;

i--)

t=*pBuffer;

PORTA=t;

PORTC|=(1<

s_ms(500);

//必须有个延时

PORTC&

pBuffer++;

inti;

DDRA=0xff;

PORTA=0xff;

DDRC=0xff;

PORTC=0xff;

LcdInit();

WriteChar(1,1,14,wz);

WriteChar(2,3,10,gd);

for(i=0;

16;

writecom(0X18);

s_ms(50000);

//按键加显示的最简写法.txt

uncharSeg7_Led_Buf[4],temp1,temp2,temp3,temp4;

DDRB=0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1