【#第一文档网# 导语】以下是®第一文档网的小编为您整理的《北工大电子工程试验2闭环温控系统》,欢迎阅读!
. 椣据畬敤尠???日?屨 椣据畬敤尠扡慳捣栮 椣据畬敤尠慤慴摟晥湩?屣 #define AD XBYTE[0x2000] //AD模块入口地址为CS1(即片选为CS1) #define DA XBYTE[0x4000] //AD模块入口地址为CS2 #define LED1 XBYTE[0x0000] //显示电路入口地址为CS0,数码管从左到右对应地址为0003到0000 #define LED2 XBYTE[0x0001] #define LED3 XBYTE[0x0002] #define LED4 XBYTE[0x0003] #define TIMER 0x80 //定义变量TIMER的值 #include ?楮彴敄楶散挮 //引入库函数 unsigned char num[]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90,0xff}; //做数组将二进制数转换为数码管(共阳极接法)能显示的数字,0到9以及全灭 void display(unsigned int x,unsigned int y); //子函数声明 void delay(void); //子函数声明 void main(void) { unsigned char i,j,a,temp,x,xdec,keynum; //定义一些变量,其中xdec为x所对应十进制数 unsigned char input = 2; unsigned char run = 0; unsigned char shiwei,gewei; unsigned char target = 25; unsigned long t = 100000; unsigned adcont = 0; Init_Device(); LED1=LED2=LED3=LED4=0xff; //将数码管各位全灭 while(1) { //AD转换 AD=0; delay(); x=AD; delay(); xdec=x*100.0/255; //将x转化为十进制数 if(adcont == 1){ display(4,(unsigned char)(xdec/10)); //将当前 X十进制数十位显示到LED4 display(3,(unsigned char)(xdec_x0010_)); //将当前X十进制数个位显示到 LED3 } if(adcont >= 100){ adcont = 0; //防止数码管显示的前两位变化过快 } adcont++; '. . if(t<=1000) t++; //延时程序,与delay()所不同,在延时的同时还能保证 程序其他部分继续工作 else{ //键盘 地址法 0x0004~0x0007 for(i=4;i<8;i++) { //取键盘行值 a=XBYTE[i]; 取反 a=~a&0x1f; A//将 for(j=0,temp=1;j<5;j++) 取键盘列值 // { if(a&temp) { //LED4=num[j+1]; //LED3=num[i-3]; 键盘调试的时候用的,暂时列为注释 //将键盘行列值转换为十 keynum = (i-3)*4+j-4; 进制数 t = 0; if(keynum >= 0 && keynum <= 9){ //当键盘输入0至9之 间的数时,进行之后的操作 switch(input){ case 2: shiwei = keynum; display(2,keynum); //将键盘输入数的十位显示到 LED2 input--; break; case 1: gewei = keynum; display(1,keynum); //将键盘输入数的各位显示到 LED1 input-- ; target = shiwei*10+gewei; //求出目标温度 break; default: break; } } else{ switch (keynum){ case 0x0a: run = !run; //将A设为启动AND停止键 break; '. . case 0x0b: input = 2; shiwei = 0; gewei = 0; display(2,10); display(1,10); //将B设为清零键,此时可重新输入目标温度十位和个位,并且数码管后两位灯灭 break; default: break; } } } temp=temp<<1; } } } if(run){ //当启动键A按下后,开始进行乒乓算法 if(xdec
DA = 0xff; //当前温度小于目标温度时,升温 }else if(xdec>target){
//当前温度大于目标温度时,降温 DA = 0x00; } else
DA=0x80; //当前温度等于目标温度时,保持当前温度 } else{
//停止键A按下后,目标恢复到室温 DA = 0x80; } }
} void delay(void) {
unsigned int i; for(i=0;i //延迟子函数 }
void display(unsigned int x,unsigned int y) {通过变量控制数码管显示 显示电路子函数,// if(x==1)LED1=num[y];
的位 if(x==2) LED2=num[y];else else if(x==3) LED3=num[y];
'. .
else LED4=num[y]; }
'.
本文来源:https://www.dywdw.cn/5efeea5a89d63186bceb19e8b8f67c1cfad6ee8a.html