




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
硬件设计 软件设计/*/#include #include #include #include #include /*/#define BYTE unsigned char#define WORD unsigned int#define D_WORD unsigned long/*/#define AD_TEMP 0x01/*/#define L_0mm 1964#define L_100mm 3396#define T_223degree 1231#define T_989degree 3239 /*/WORD idata ADC_ = 0;float idata Temp_Given = 0; /温度扩大10倍/*/WORD idata L_WARNING = 100; WORD idata H_WARNING = 1000; /*/int idata TEMP_SET14=0;int idata L_A_H_SET4=0;int idata L_A_L_SET3=0;WORD idata TEMP_SET_ = 0;WORD idata L_A_H_SET_ = 0;WORD idata L_A_L_SET_ = 0;/*/BYTE xdata DispStr132,DispStr232;WORD xdata AD_BUF40; /= 12,11,10,9,8,7,6,5,4,3,2,1;/*/sbit BEER_A = P05;sbit TEST_XH = P04;sbit SST_CON = P03;sbit KEY_SWITCH = P23;sbit KEY_SET = P20;sbit KEY_SHIFT = P22;sbit KEY_INC = P21;bit KEY_SWITCH_H_BIT = 0;bit KEY_SWITCH_L_BIT = 0;bit KEY_SET_H_BIT = 0;bit KEY_SET_L_BIT = 0;bit KEY_SHIFT_H_BIT = 0;bit KEY_SHIFT_L_BIT = 0;bit KEY_INC_H_BIT = 0;bit KEY_INC_L_BIT = 0;BYTE idata KEY_SWITCH_COUNT = 0;BYTE idata KEY_SHIFT_COUNT1 = 0;BYTE idata KEY_SHIFT_COUNT2 = 0;BYTE idata KEY_SHIFT_COUNT3 = 0;/*/float idata L_yw = 0;float idata T_yw = 0;float idata T_yw_buf1= 0;float idata T_yw_buf2= 0;WORD idata L_yw_ = 0;WORD idata T_yw_ = 0;WORD idata Count_ = 0;BYTE idata Count_ = 0;/*/WORD xdata MCH_JISHU60 = 0;WORD idata T0_BUF = 0;WORD idata ZHUANSU = 0;BYTE idata T3INT_JISHU = 0;BYTE idata Count_n = 0; WORD idata K = 0; bit CESU_BIT = 0; /速度脉冲时间计数控制标志,下降沿启动或停止计数bit INT0_BIT = 0;bit CHAOSHI_BIT = 1; /INT0超时标志,超过100ms没有INT0中断,即被置位。bit Warning_bit = 0;bit S1_BIT = 0;bit WENKONG_BIT = 0;bit BEER_A_BIT = 0;WORD idata WENDU_JISHU = 0;BYTE idata Warning_Count=0;BYTE idata INT0_CHAOSHI_JSH = 0;/PCA计数中断加1,INT0中断清0,超过总值20认为INT0超时,置位CHAOSHI_BIT。/*/void CONFIG();void YSH(D_WORD x);/*/void CONFIG() PCA0MD = 0x07; /看门狗禁止,PCA用于对ECI计数 REG0CN = 0x10; /内部LDO使能 PFE0CN = 0X20; /预取指令允许 XBR1 = 0x40; /使能交叉开关 P0MDIN = 0xfd; /P0.1配置成模拟输入 P2MDOUT = 0x40; /P2.6配置成模拟输入/- OSCICN = 0xc7; /开启内部振荡器不分频/内部振荡器控制寄存器/位7:IOSCEN:内部振荡器使能位,0:内部振荡器禁止。1:内部振荡器使能。/位6:IFRDY:内部振荡器频率准备好标志,0:内部振荡器未运行在编程频率。1:内部振荡器按编程频率运行。/位5:SUSPEND:内部振荡器挂起使能位,向该位写1将内部振荡器置于SUSPEND模式。当有一个SUSPEND模式唤醒事件发生时,内部振荡器恢复运行。/位4-3:未用。读 = 00b,写 = 忽略。/位2-0:IFCN2-0:内部振荡器频率控制位,/000:SYSCLK为内部振荡器128分频(缺省)。/001:SYSCLK为内部振荡器64分频。/010:SYSCLK为内部振荡器32分频。/011:SYSCLK为内部振荡器16分频。/100:SYSCLK为内部振荡器8分频。/101:SYSCLK为内部振荡器4分频。/110:SYSCLK为内部振荡器2分频。/111:SYSCLK为内部振荡器不分频。/- CLKSEL = 0x30; /配置振荡器为系统时钟/-/VREF初始化 REF0CN = 0x13;/-/ADC初始化 ADC0CF = 0xf8; ADC0CN = 0x80; ADC0TK = 0xff; ADC0MX = 0x01; /-/IDAC0初始化 IDA0CN = 0xf6; IDA0H = 0x04; IDA0L = 0xff;/-/T0作为PCA输入频率,T1用来测量电机速度 IT0 = 1; CKCON = 0xcc; /T0采用系统时钟,T1采用系统时钟,T2采用系统时钟/12,T3采用系统时钟 TMOD = 0x19; /T0定时器模式,由INT0决定。 TR0 = 1; /- IT01CF = 0x02; /p0.2口 EX0 = 1;/-/T2初始化 TMR2CN = 0x04; TMR2RLL = 0x3f; TMR2RLH = 0xb0; TMR2L = 0x3f; TMR2H = 0xb0; ET2 = 1;/-/T3初始化 TMR3CN = 0x00; TMR3RLL = 0x00; TMR3RLH = 0x00; TMR3L = 0x00; TMR3H = 0x00;/- EA = 1;/*/void INT0_INT() interrupt 0 float x = 0; BYTE i = 31; BYTE j = 0; T0_BUF = TL0 + 256*TH0; TH0=0; TL0=0; for(i=59;i=1;i-) MCH_JISHUi = MCH_JISHUi-1; MCH_JISHU0 = T0_BUF; for(j=0;j 2000) Count_n = 0; Warning_Count+; if(Warning_Count 100) Warning_Count = 0; Warning_bit = !Warning_bit; S1_BIT = 1; if(WENKONG_BIT = 1) WENDU_JISHU+; if(WENDU_JISHU270) WENDU_JISHU = 270;BEER_A_BIT = 1;WENKONG_BIT = 0; /*/void T3_INT() interrupt 14 TMR3CN &= 0x7f;/*/延时子程序void YSH(D_WORD x) while(x0) x-; /*/波形发生void BOXING() TEST_XH = 0; YSH(100); TEST_XH = 1; YSH(100);/*/液位换算void YEWEI_HS() L_yw = 1000.0*(float)(ZHUANSU) - L_0mm)/(L_100mm-L_0mm); if(L_yw40) Count_=0; for(i=0;i40;i+) x += AD_BUFi; return (x/40.0);/-void DispLCD()int i;for(i=0;i16;i+)DispStr1i = 32;DispStr2i = 32;switch(KEY_SWITCH_COUNT) case 0:/温度液位报警显示 if(L_yw_H_WARNING) if(Warning_bit = 0) sprintf(DispStr1,High Warning); sprintf(DispStr2,Level:%3d.%dmm,L_yw_/10,L_yw_%10); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1, ); sprintf(DispStr2, ); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,Temp:%3d.%d%d,T_yw_/10,T_yw_%10,WENDU_JISHU); sprintf(DispStr2,Level:%3d.%dmm,L_yw_/10,L_yw_%10); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 1:/温度液位显示 sprintf(DispStr1,Temp:%3d.%d,T_yw_/10,T_yw_%10); sprintf(DispStr2,Level:%3d.%dmm,L_yw_/10,L_yw_%10); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 2: /温度设置 switch(KEY_SHIFT_COUNT1) case 0: sprintf(DispStr1,Temp SET:); sprintf(DispStr2,Temp:%d%d%d.%d,TEMP_SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 1: if(Warning_bit = 0) sprintf(DispStr1,Temp SET:); sprintf(DispStr2,Temp:%d%d%d.%d,TEMP_SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,Temp SET:); sprintf(DispStr2,Temp:%d%d%d. ,TEMP_SET10,TEMP_SET11,TEMP_SET12); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 2: if(Warning_bit = 0) sprintf(DispStr1,Temp SET); sprintf(DispStr2,Temp:%d%d%d.%d,TEMP_SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,Temp SET:); sprintf(DispStr2,Temp:%d%d .%d,TEMP_SET10,TEMP_SET11,TEMP_SET13); DispStr2strlen(DispStr2)=32; RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 3: if(Warning_bit = 0) sprintf(DispStr1,Temp SET:); sprintf(DispStr2,Temp:%d%d%d.%d,TEMP_SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,Temp SET:); sprintf(DispStr2,Temp:%d %d.%d,TEMP_SET10,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 4: if(Warning_bit = 0) sprintf(DispStr1,Temp SET:); sprintf(DispStr2,Temp:%d%d%d.%d,TEMP_SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,Temp SET:); sprintf(DispStr2,Temp: %d%d.%d,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; default: break; KEY_SHIFT_COUNT2 = 0; KEY_SHIFT_COUNT3 = 0; break; case 3: /高液位报警设置 switch(KEY_SHIFT_COUNT2) case 0: sprintf(DispStr1,High Alarm SET:); sprintf(DispStr2,Level:%d%d%d.%dmm,L_A_H_SET0,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 1: if(Warning_bit = 0) sprintf(DispStr1,High Alarm SET:); sprintf(DispStr2,Level:%d%d%d.%dmm,L_A_H_SET0,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,High Alarm SET:); sprintf(DispStr2,Level:%d%d%d. mm,L_A_H_SET0,L_A_H_SET1,L_A_H_SET2); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 2: if(Warning_bit = 0) sprintf(DispStr1,High Alarm SET:); sprintf(DispStr2,Level:%d%d%d.%dmm,L_A_H_SET0,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,High Alarm SET:); sprintf(DispStr2,Level:%d%d .%dmm,L_A_H_SET0,L_A_H_SET1,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 3: if(Warning_bit = 0) sprintf(DispStr1,High Alarm SET:); sprintf(DispStr2,Level:%d%d%d.%dmm,L_A_H_SET0,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,High Alarm SET:); sprintf(DispStr2,Level:%d %d.%dmm,L_A_H_SET0,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 4: if(Warning_bit = 0) sprintf(DispStr1,High Alarm SET:); sprintf(DispStr2,Level:%d%d%d.%dmm,L_A_H_SET0,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,High Alarm SET:); sprintf(DispStr2,Level: %d%d.%dmm,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; default: break; KEY_SHIFT_COUNT1 = 0; KEY_SHIFT_COUNT3 = 0; break; case 4: /低液位报警设置 switch(KEY_SHIFT_COUNT3) case 0: sprintf(DispStr1,Low Alarm SET: ); sprintf(DispStr2,Le
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南株洲市行政审批服务局招聘中级雇员2考前自测高频考点模拟试题及参考答案详解一套
- 安全培训效果评估和改进课件
- 安全培训效果考评方案课件
- 乘风破浪初高中毕业季毕业典礼电子相册模板
- 2025春季新疆石河子大学第一附属医院、石河子大学附属中医医院(兵团中医医院)校园招聘10人考前自测高频考点模拟试题附答案详解(突破训练)
- 2025年高性能钼片项目合作计划书
- 2025广西百色市田阳区消防救援大队政府招聘专职消防员9人模拟试卷附答案详解(突破训练)
- 2025杭州淳安县公开招聘中小学教师12人模拟试卷参考答案详解
- 2025广东深圳市宝安区陶园中英文实验学校招聘精英教师16人考前自测高频考点模拟试题附答案详解(完整版)
- 2025年河北秦皇岛工业职业技术学院招聘专任教师3人模拟试卷及答案详解(典优)
- 脑电图基础知识及判读课件
- 病毒性脑炎临床路径(2016年版)
- 装修公司审计报告范本
- IATF16949项目移交管理程序
- 第三节酒店业的演变-课件
- GB/T 8758-2006砷化镓外延层厚度红外干涉测量方法
- GB/T 6396-2008复合钢板力学及工艺性能试验方法
- GB/T 35759-2017金属清洗剂
- ABB缠绕型干式变压器
- GB/T 21063.1-2007政务信息资源目录体系第1部分:总体框架
- 第三讲:新闻真实性分析课件
评论
0/150
提交评论