czljcbatmega16che.docx
- 文档编号:14920034
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:14
- 大小:16.59KB
czljcbatmega16che.docx
《czljcbatmega16che.docx》由会员分享,可在线阅读,更多相关《czljcbatmega16che.docx(14页珍藏版)》请在冰点文库上搜索。
czljcbatmega16che
//ICC-AVRapplicationbuilder:
2013-5-2713:
52:
32
//Target:
M16
//Crystal:
8.0000Mhz
#include
#include
#include"1602.h"
#include"delay.h"
#include"1302.h"
#include"RW_EEPROM.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineIN1_1PORTD|=BIT(PD5)
#defineIN2_1PORTD|=BIT(PD6)
#defineENA_1PORTD|=BIT(PD7)
#defineIN1_0PORTD&=~BIT(PD5)
#defineIN2_0PORTD&=~BIT(PD6)
#defineENA_0PORTD&=~BIT(PD7)
#defineCPL_BIT(x,y)(x^=(1< #defineGET_BIT(x,y)(x&(1< uintn,num,v; uchari,dm,nm,money,wide=255,cz=0,m=3;//dm(白天价格),nm(夜晚价格),monney(价钱),wide(PWM),m(档位标志),cz(启动电机标志) ucharshi1,fen1,miao1,cx;//等待时间的时,分,秒,cx(价钱的变量) longs,sm=0;//路程价钱 voidport_init(void) { PORTA=0x00; DDRA=0xff; PORTB|=(1< DDRB&=~(1< PORTC=0x00;//m103outputonly DDRC=0xff; PORTD=0x0f;// DDRD=0xf0;//1 } //TIMER0initialize-prescale: 64 //WGM: Normal //desiredvalue: 1mSec //actualvalue: 1.000mSec(0.0%) voidtimer0_init(void) { TCCR0=0x00;//stop TCNT0=0x83;//setcount TCCR0=0x03;//starttimer } //TIMER1initialize-prescale: Risingedge //WGM: 0)Normal,TOP=0xFFFF //desiredvalue: 1Hz //actualvalue: Outofrange //定时T1初始化 voidtimer1_init(void) { TCCR1B=0x00;//停止定时器 TCNT1H=0x00; TCNT1L=0x00;//初始值 TCCR1B=0x06;//启动定时器 } //TIMER2initialize-prescale: Stop //WGM: PWMPhasecorrect //desiredvalue: 1Hz //actualvalue: Outofrange voidtimer2_init(void) { TCCR2=0x00;//stop ASSR=0x00;//setasyncmode TCNT2=0x01;//setup OCR2=0xFF; TCCR2=0x61;//start } //callthisroutinetoinitializeallperipherals voidinit_devices(void) { //stoperrantinterruptsuntilsetup CLI();//disableallinterrupts port_init(); timer0_init(); timer1_init(); timer2_init(); MCUCSR=0x80;//禁止JTAG MCUCR=0x00; GICR=0x00; TIMSK|=0x01;//中断允许 SEI();//re-enableinterrupts //allperipheralsarenowinitialized } voidshow_s(longtemp)//路程 {//123456.7m LCD_write_char(0,1,temp/1000000%10); LCD_write_char(1,1,temp/100000%10); LCD_write_char(2,1,temp/10000%10); LCD_write_char(3,1,temp/1000%10); LCD_write_char(4,1,temp/100%10); LCD_write_char(5,1,temp/10%10); LCD_write_string(6,1,"."); LCD_write_char(7,1,temp%10); delay_nms(10); } voidshow_v(uinttemp)//速度 {//345.6m/s LCD_write_char(11,1,temp/1000%10); LCD_write_char(12,1,temp/100%10); LCD_write_char(13,1,temp/10%10); LCD_write_string(14,1,"."); LCD_write_char(15,1,temp%10); delay_nms(10); } voidshow_nm(uchartemp)//晚上价格 {//3.6 LCD_write_string(9,0,"nm"); LCD_write_char(12,0,44); LCD_write_char(13,0,temp/10%10); LCD_write_string(14,0,"."); LCD_write_char(15,0,temp%10); } voidshow_dm(uchartemp)//白天价格 {//1.6 LCD_write_string(9,0,"dm"); LCD_write_char(12,0,44); LCD_write_char(13,0,temp/10%10); LCD_write_string(14,0,"."); LCD_write_char(15,0,temp%10); } voidshow_m(longtemp)//价钱 {//6553.6 LCD_write_char(9,0,44); LCD_write_char(10,0,temp/10000); LCD_write_char(11,0,temp/1000%10); LCD_write_char(12,0,temp/100%10); LCD_write_char(13,0,temp/10%10); LCD_write_string(14,0,"."); LCD_write_char(15,0,temp%10); delay_nms(10); } voidshow_time(void)//显示时间 {//12: 23: 56 ds1302_read_time(); if(m==0&&cz==1)// {//显示等待时间 LCD_write_char(0,0,shi1/10); LCD_write_char(1,0,shi1%10); LCD_write_string(2,0,": "); LCD_write_char(3,0,fen1/10); LCD_write_char(4,0,fen1%10); LCD_write_string(5,0,": "); LCD_write_char(6,0,miao1/10); LCD_write_char(7,0,miao1%10); } else {//显示北京时间 LCD_write_char(0,0,shi/10); LCD_write_char(1,0,shi%10); LCD_write_string(2,0,": "); LCD_write_char(3,0,fen/10); LCD_write_char(4,0,fen%10); LCD_write_string(5,0,": "); LCD_write_char(6,0,miao/10); LCD_write_char(7,0,miao%10); } } voidkey(void)//按键扫描 { if(GET_BIT(PIND,0)==0) { i++;delay_nms(200); if(i>5){i=0;}//a } if(GET_BIT(PIND,1)==0&&i==0)//电机的开与关 { CPL_BIT(PORTD,PD5);delay_nms(200); cz++;delay_nms(200); if(cz==2){cz=0;}if(cz==1){s=0;}//启动电机之前将上一次路程清零 } if(GET_BIT(PIND,2)==0&&i==16)//调档位 { wide=wide-50;delay_nms(200);//kuai255zhong215man175停135 if(wide<100){wide=255;} if(wide==255){m=3;} if(wide==205){m=2;} if(wide==155){m=1;} if(wide==105){m=0;} } if(GET_BIT(PIND,1)==0&&i==1) { Set(2,0);delay_nms(200); } if(GET_BIT(PIND,2)==0&&i==1) { Set(2,1);delay_nms(200); } if(GET_BIT(PIND,1)==0&&i==2) { Set(1,0);delay_nms(200); } if(GET_BIT(PIND,2)==0&&i==2) { Set(1,1);delay_nms(200); } if(GET_BIT(PIND,1)==0&&i==3) { Set(0,0);delay_nms(200); } if(GET_BIT(PIND,2)==0&&i==3)// { Set(0,1);delay_nms(200); } if(GET_BIT(PIND,1)==0&&i==4)// { dm++;delay_nms(200); if(dm==100){dm=1;} //show_dm(dm); } if(GET_BIT(PIND,2)==0&&i==4)// { dm--;delay_nms(200); if(dm==0){dm=99;} //show_dm(dm); } WRITE_EEPROM(20,dm);delay_nms(10);//将白天价格写入eepROM if(GET_BIT(PIND,1)==0&&i==5)// { nm++;delay_nms(200); if(nm==100){nm=1;} //show_nm(nm); } if(GET_BIT(PIND,2)==0&&i==5)// { nm--;delay_nms(200); if(nm==0){nm=99;} //show_nm(nm); } WRITE_EEPROM(22,nm);delay_nms(10);//将晚上价格写入eepROM switch(i) {//调整时闪烁 case1: LCD_write_string(0,0,""); delay_nms(60); LCD_write_char(0,0,shi/10); LCD_write_char(1,0,shi%10); delay_nms(60); break; case2: LCD_write_string(3,0,""); delay_nms(60); LCD_write_char(3,0,fen/10); LCD_write_char(4,0,fen%10); delay_nms(60); break; case3: LCD_write_string(6,0,""); delay_nms(60); LCD_write_char(6,0,miao/10); LCD_write_char(7,0,miao%10); delay_nms(60); break; case4: LCD_write_string(13,0,""); delay_nms(60); LCD_write_char(13,0,dm/10%10); LCD_write_string(14,0,"."); LCD_write_char(15,0,dm%10); delay_nms(60); break; case5: LCD_write_string(13,0,""); delay_nms(60); LCD_write_char(13,0,nm/10%10); LCD_write_string(14,0,"."); LCD_write_char(15,0,nm%10); delay_nms(60); break; default: break; } } voiddang(void)//显示档位 { LCD_write_string(8,1,"["); LCD_write_char(9,1,m); LCD_write_string(10,1,"]"); } voidMoney(void)//价格转换 { if(shi>6&&shi<18){money=dm;} else{money=nm;} if(m! =0) { if(s<1500){sm=50;}//150m内起步价5元 else{sm=s*money/10000+50;} cx=sm; } else{sm=cx+fen1*1;}//等待时间时的价钱 } voiddianji(void) { //IN1_1;//正转 IN2_0; OCR2=wide; } voidmcu(void)//初次化 { LCD_init(); dm=READ_EEPROM(20);delay_nms(10); nm=READ_EEPROM(22);delay_nms(10); init_devices(); } voidmain(void) { mcu(); while (1) { key(); if(cz==1){Money();} show_s(s); show_v(v);// show_time(); dianji(); dang(); if(i==0){show_m(sm);}//sm if(i==4){show_dm(dm);} if(i==5){show_nm(nm);} } } #pragmainterrupt_handlertimer0_ovf_isr: 10 voidtimer0_ovf_isr(void) { TCNT0=0x83;//reloadcountervalue n++; if(n==1000)//1s { num=TCNT1; TCNT1H=0x00/*INVALIDSETTING*/;//setup TCNT1L=0x00/*INVALIDSETTING*/; s=s+num*2;//假设一个脉冲一周(20cm) v=2*num/1;//速度 n=0; if(m==0&&cz==1)//等待时间 { miao1++; if(miao1>59) { fen1++;miao1=0; if(fen1>59) { shi1++;fen1=0; if(shi1>23){shi1=0;} } } } else{shi1=0;fen1=0;miao1=0;} } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- czljcbatmega16che