

免费预览已结束,剩余5页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*/* Name: 电子设计电源题 功能:稳压,电路保护功能 */ /* Designed by : 胡车,蒋睿,张佩小组 Date:2013/9/5 21:09 */* 开发环境: ICCAVR */* PD0确定键,PD1增加键,PD2菜单键,PD7减小键,PD5输出PWM波,PD6接继电器 */* PA0PA2液晶控制,PB口液晶数据口,PA5采样电压输入,PA6采样电流输入 */*/#include #include #include 1602.h#define uchar unsigned char#define uint unsigned int#define Get_Bit(val, bitn) (val &(1(bitn) ) uint addata;uint rec=1;uchar flag=1;/进入按键中断标志uchar key_flag=0;/按键标志位uchar num_flag=0;/数字改变标志uchar err_flag=0;/出错类型标志uchar delay_flag=0;/适应电压标志uint vol_exp=368;/360理想输出电压 uint num1=1,num2=5;uint k1,k2;uchar cont1=Limited Current:;uchar cont2= . A ; uchar temp1=Voltage: . V ,temp2=Current: . A ,temp3=DUTY CYCLE: %;float temp1float=0,temp2float=0;uint temp1int=0,temp2int=0; void port_init(void) PORTA = 0xf8;/f8 DDRA = 0x07; PORTB = 0x00; DDRB = 0xFF; PORTC = 0xFF; /m103 output only DDRC = 0x00; PORTD = 0x8F; DDRD = 0x70;/TIMER1 initialize - prescale:1/ WGM: 5) PWM 8bit fast, TOP=0x00FF/ desired value: 31.25KHz/ actual value: 31.250KHz (0.0%)void timer1_init(void) TCCR1B = 0x00; /stop TCNT1H = 0xFF; /setup TCNT1L = 0x01; OCR1AH = 0x00; OCR1AL = 0x30;/改变A占空比 OCR1BH = 0x00; OCR1BL = 0x5E;/改变B占空比 ICR1H = 0x00; ICR1L = 0xFF; TCCR1A = 0xF1; TCCR1B = 0x09; /start Timer/*延时函数*/void delay_ms(unsigned int xms) int i,j; for(i=0;ixms;i+) for(j=0;j1140;j+); void delay(uint x) int i,j; for(i=0;ix;i+) for(j=0;j200;j+); /按下按键后待处理的程序void key_sol(void)/液晶界面 flag=0; key_flag=1; LcdInit(); WriteChar(1,0,16,cont1); WriteChar(2,0,16,cont2); WriteNum(2,0,ASCIInum1); WriteNum(2,2,ASCIInum2); writecom(0x0f);/开光标显示 writecom(0xc0); while(key_flag!=0) /*确定按键*/ if(Get_Bit(PIND,PD0)=0) delay_ms(20);key_flag=key_flag+1;while(!(Get_Bit(PIND,PD0);/等待按键松开delay_ms(20); switch(key_flag) case 1:/调节电流NUM1 /*增加按键*/ if(Get_Bit(PIND,PD1)=0) num_flag=1; delay_ms(10);num1+;if(num1=10) num1=9;WriteNum(2,0,ASCIInum1);writecom(0xc0); while(!(Get_Bit(PIND,PD1);/等待按键松开delay_ms(10); /*减少按键*/if(Get_Bit(PIND,7)=0) num_flag=1; delay_ms(10);num1-;if(num1=0) num1=1;WriteNum(2,0,ASCIInum1);writecom(0xc0); while(!(Get_Bit(PIND,PD7);/等待按键松开delay_ms(10); break; case 2:/调节电流NUM2 writecom(0xc2); /*增加按键*/ if(Get_Bit(PIND,PD1)=0) num_flag=1; delay_ms(10);num2+;if(num2=10) num2=9;WriteNum(2,2,ASCIInum2);writecom(0xc2); while(!(Get_Bit(PIND,PD1);/等待按键松开delay_ms(10); /*减少按键*/if(Get_Bit(PIND,7)=0) num_flag=1; delay_ms(10);num2-;if(num2=0) num2=1;WriteNum(2,2,ASCIInum2);writecom(0xc2); while(!(Get_Bit(PIND,PD7);/等待按键松开delay_ms(10); break; case 3: key_flag=0; break; default: key_flag=0; #pragma interrupt_handler int0_isr:iv_INT0void int0_isr(void) delay_ms(10); key_sol(); /while(!(Get_Bit(PIND,PD2);/等待按键松开 delay_ms(10); key_flag=0; flag=1; LcdInit();void init_devices(void) /stop errant interrupts until set up CLI(); /disable all interrupts port_init(); timer1_init(); MCUCR = 0x02; GICR = 0x40; TIMSK = 0x00; /timer interrupt sources SEI(); /re-enable interrupts /all peripherals are now initializeduint AD_GetData(uint ad_input) ADMUX|=0x40; /ADC参考电压AVcc ADCSRA|=0x87; /使能ADC,128分频 ADMUX=ad_input; /选择AD转换通道 ADCSRA|=(1ADSC);/开始AD转换 delay(1); while(!(ADCSRA&(1ADIF); /等待转换结束 ADCSRA|=(1ADIF); /关闭AD转换 ADCSRA&=0x0f; return ADC;/*系统修正*/void sys_comp() while(1) switch (delay_flag) case 0: case 1: if(temp1intvol_exp) OCR1AL=OCR1AL-3; delay_flag+; break; default: if(temp1intvol_exp) OCR1AL=OCR1AL-1; delay_ms(1); ad_get(); if(OCR1ALvol_exp) delay_ms(30);if(temp1intvol_exp) err_flag=0; err_sol(); PORTD&=0xbf;/打开继电器 if(temp2int(num1*100+num2*10)&(OCR1AL150) err_flag=1; err_sol(); void err_sol() uchar cont3=Safe Mode ; uchar cont4=Caution: ; uchar cont5=Voltage 36V ; switch (err_flag) case 0: PORTD|=(1PD6);/关闭继电器 LcdInit(); WriteChar(1,0,14,cont4); WriteChar(2,0,14,cont5); OCR1AL =2;/初始化A占空比80% delay_flag=0; flag=0; while(!flag);/等待菜单按键按下 delay_ms(50); break; case 1: PORTD|=(1PD6);/关闭继电器 LcdInit(); WriteChar(1,0,14,cont3); / OCR1AL = 0x51;/初始化A占空比80% delay_flag=0; flag=0; while(!flag);/等待菜单按键按下 delay_ms(50); break; default: break; /*ad读取*/void ad_get() /uchar ASCII=0123456789; uchar i; uchar t; uchar r; addata=AD_GetData(0x45); /获得通道5数字量 for(i=0;i9;i+) addata=addata+AD_GetData(0x45); temp1float=addata*0.0048828125; temp1float=temp1float/9.08; temp1int=(uint)(temp1float*100)+1); temp18=ASCIItemp1int/100; temp19=ASCII(temp1int%100)/10; temp111=ASCIItemp1int%10; while(!flag); WriteChar(1,0,17,temp1); addata=AD_GetData(0x46); /获得通道6的数字量 for(i=0;i9;i+) addata=addata+AD_GetData(0x46); temp2float=addata*0.0048828125; temp2float=temp2float/21.0; temp2int=(uint)(temp2float*100); temp28=ASCIItemp2int/100; temp210=ASCII(temp2int%100)/10; temp211=ASCIItemp2int%10; while(!flag); WriteChar(2,0,17,temp2); r+; if(r=30) /LcdInit(); /* addata=AD_GetData(0x47); /获得通道7的数字量 for(i=0;i9;i+) addata=addata+AD_GetData(0x47); temp3float=addata*0.0048828125; temp3float=temp3float/21.0; temp3int=(uint)(temp3float*100); temp32=ASCIItemp3int/100
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年食品安全考试题库库及答案解析
- 2025年全国法制宣传日普法知识竞赛题库及参考答案
- 2025年粮油仓储管理员初级考试试题(附答案)
- 有趣的知识考试题及答案
- 2025年新能源汽车车载娱乐系统国产化创新报告
- 2025年工业固废资源化利用与减排技术报告
- 幼年特发性关节炎的护理
- 2025年农村教育信息化基础设施现状与改进策略报告
- 水轮机轴向课件
- 2025年智慧电网下风电场并网稳定性评估报告
- 陪玩团基本知识培训课件
- 2025年司法考试真题及答案
- 2025四川蜀道建筑科技有限公司招聘16人考试参考试题及答案解析
- 芯片研发流程管理办法
- 电子工程师知识培训课件
- 浙江省中考科学说理题训练及答题技巧
- 兵团连队职工考试试题及答案解析
- 假如我变成了班主任课件
- 首尔之春影视解读
- 医院病区突然停电应急处置
- 2025年移动云考试题库
评论
0/150
提交评论