资源描述
#include C8051F020.h#include absacc.h#include data_define.c#define AD XBYTE0x2000/AD模块入口地址为CS1(即片选为CS1)#define DA XBYTE0x4000/AD模块入口地址为CS2#define LED1 XBYTE0x0000/显示电路入口地址为CS0,数码管从左到右对应地址为0003到0000#define LED2 XBYTE0x0001#define LED3 XBYTE0x0002#define LED4 XBYTE0x0003#define TIMER 0x80/定义变量TIMER的值#include Init_Device.c/引入库函数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=0; delay(); x=AD; delay();/AD转换xdec=x*100.0/255;/将x转化为十进制数if(adcont = 1)display(4,(unsigned char)(xdec/10);/将当前X十进制数十位显示到LED4 display(3,(unsigned char)(xdec%10);/将当前X十进制数个位显示到LED3if(adcont = 100)adcont = 0;/防止数码管显示的前两位变化过快adcont+; if(t=1000)t+;/延时程序,与delay()所不同,在延时的同时还能保证程序其他部分继续工作else for(i=4;i8;i+) /键盘 地址法 0x00040x0007 a=XBYTEi;/取键盘行值 a=a&0x1f;/将A取反 for(j=0,temp=1;j= 0 & keynum = 9)/当键盘输入0至9之间的数时,进行之后的操作switch(input)case 2:shiwei = keynum;display(2,keynum);/将键盘输入数的十位显示到LED2input-;break;case 1:gewei = keynum;display(1,keynum);/将键盘输入数的各位显示到LED1input-;target = shiwei*10+gewei;/求出目标温度break;default:break;elseswitch (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=temp1; if(run)/当启动键A按下后,开始进行乒乓算法if(xdectarget)DA = 0x00;/当前温度大于目标温度时,降温elseDA=0x80;/当前温度等于目标温度时,保持当前温度elseDA = 0x80;/停止键A按下后,目标恢复到室温 void delay(void) unsigned int i; for(i=0;iTIMER;+i);/延迟子函数void display(unsigned int x,unsigned int y)if(x=1)LED1=numy;/显示电路子函数,通过变量控制数码管显示的位 else if(x=2) LED2=numy; else if(x=3) LED3=numy; else LED4=numy;
展开阅读全文