北工大电子工程试验2闭环温控系统

2022-03-28 10:43:28   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《北工大电子工程试验2闭环温控系统》,欢迎阅读!
北工大,闭环,温控,电子工程,试验



.



椣据畬敤尠???? 椣据畬敤尠扡慳捣栮 椣据畬敤尠慤慴摟晥湩?

#define AD XBYTE[0x2000] //AD模块入口地址为CS1(即片选为CS1 #define DA XBYTE[0x4000] //AD模块入口地址为CS2

#define LED1 XBYTE[0x0000] //显示电路入口地址为CS0,数码管从左到右对应地址为00030000

#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}; //做数组将二进制数转换为数码管(共阳极接法)能显示的数字,09以及全灭 void display(unsigned int x,unsigned int y); //子函数声明 void delay(void); //子函数声明 void main(void) {

unsigned char i,j,a,temp,x,xdec,keynum; //定义一些变量,其中xdecx所对应十进制数 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){ //当键盘输入09 间的数时,进行之后的操作 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

相关推荐
推荐阅读