电子工程设计Ⅱ实验报告 120231班14组
附录
附录一、环境温度显示源程序
#include \#include \
#include \#include \
#define DP1 XBYTE[0x0000] #define DP2 XBYTE[0x0001] #define DP3 XBYTE[0x0002] #define DP4 XBYTE[0x0003] #define CS1 XBYTE[0x2000] #define TIMER 0x8000
unsigned char data table1[]={0x10,0xF9,0x0A,0x09,0xE1,0x05,0x04,0xD9,0x00,0x01}; unsigned char data table2[]={0x04,0xAF,0xC0,0x82,0x23,0x12,0x10,0x8F,0x00,0x02}; unsigned char data table3[]={0x40,0xF5,0x82,0x81,0x31,0x09,0x08,0xE5,0x00,0x01}; unsigned char data table4[]={0x04,0xEE,0x58,0x4A,0xAA,0x0B,0x01,0x6E,0x00,0x02}; void delay(void);
void display(unsigned int x,unsigned int y); void main(void) { unsigned int x,y=0,z=0,num=0; Init_Device();
DP1=DP2=DP3=DP4=0xFF;
while(1) { CS1=x; delay(); x=CS1; delay(); if(x==255) { display(1,1); display(2,0); display(3,0); } else{ x=(x*100)/255; display(1,0) ;
y=x/10;num=3;display(num,y); delay();
25
电子工程设计Ⅱ实验报告 120231班14组
z=x;num=4;display(num,z); delay(); } } }
void display(unsigned int x,unsigned int y) { if(x==1) DP1=table1[y];
else if(x==2) DP2=table2[y]; else if(x==3) DP3=table3[y]; else DP4=table4[y]; }
void delay(void) {
unsigned int i;
for(i=0;i 附录二、温度闭环控制源程序 #include \#include \#include \#define XBYTE[0x0000] #define XBYTE[0x0001] #define XBYTE[0x0002] #define XBYTE[0x0003] #define XBYTE[0x2000] #define XBYTE[0x4000] #define KEY_WR XBYTE[0x0005] DP1 #define KEY_RD XBYTE[0x0004]#define TIMER DP2 0x8000 #include \ DP3 Unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0 DP4 x92,0x82,0xF8,0x80,0x90}; unsigned char C2 table_doc[]={0x40,0x79,0x24,0x30,0x1 9,0x12,0x02,0x78,0x00,0x10}; CS2 26 电子工程设计Ⅱ实验报告 120231班14组 unsigned char convert(unsigned char a); unsigned char key_scan(void); void delay(void); void main(void) { Init_Device(); DP1=DP2=DP3=DP4=0xFF; CS2=0x81; while(1){ /*测温程序段*/ DP3=DP4=0xFF; r=0; e=0; C2=dr; delay(); dr=C2; delay(); dr=dr*100/255; hr=dr/10; lr=dr; if(hr>9) {hr=9; if(lr<1) lr=9;} display(hr,lr); delay();delay();delay(); /*测温程序段*/ unsigned char num1,num2; unsigned char dp[4]; unsigned char output,input; signed char dnum; DP1=DP2=DP3=DP4=0xff; Init_Device(); aa:keyboard(dp);//Set and display the aimed temperature num1=dp[3]*10+dp[4]; do{ C1=input; delay(); input=C1; num2=(input*100)/256; display(1,num2/10); display(2,num2);//Display current temperature dnum=num1-num2; if(dnum>0) { if(dnum>1) output=255; else output=128-dnum; } else { if(dnum<-1) output=0; else output=128-dnum; } 25 电子工程设计Ⅱ实验报告 120231班14组 C2=output;//Output C2 }while(dnum!=0); goto aa; } } } unsigned char keyboard(unsigned char *dp) { unsigned col,row,r_state,temp,c,i=1; int key; do { key=0x0004; for(row=0;row<4;row++,key++) { c=XBYTE[key]; if(r_state=~c&0x1f) { for(col=0,temp=0x01;col<4;++col,temp=temp<<1) if((r_state&temp)!=0) { i++; if(keymatrix[row][col]=='A') return 0; 26 dp[3+i%2]=keymatrix[row][col]; display(3+i%2,keymatrix[row][col]); delay();delay();delay();delay(); delay();delay();delay();delay(); } } } }while(1); } char unsigned char key_scan(void) { unsigned char l_val,r_val,r_state,temp,conter,x,c; unsigned char re_key=0; unsigned int tab=0; int key; Init_Device(); while(1) { key=0x0008; for(x=1;x<5;x++,key=key+2) { c=XBYTE[key]; if(r_state=~c&0x1f) { 电子工程设计Ⅱ实验报告 120231班14组 { unsigned char ret; switch(a) { case 11: ret=0;break; case 12: ret=1;break; case 13: ret=2;break; case 14: ret=3;break; case 21: ret=4;break; case 22: ret=5;break; for(conter=1,temp=0x01;conter<6;+ +conter,temp=temp<<1) if((r_state&temp)!=0) { r_val=conter; l_val=x; re_key=10*l_val+r_val; tab=1; break; case 23: ret=6;break; case 24: ret=7;break; case 31: ret=8;break; case 32: ret=9;break; default: break; } } if(tab==1) { } return ret; } void delay(void) { unsigned long int i; for(i=0;i<0x8000;++i) ; } void display(unsigned char break; } } if(tab==1) { break; } } } unsigned char convert(unsigned char a) 27 x,unsigned char y) { DP1=table1[x]; DP2=table2[y]; return re_key; } 电子工程设计Ⅱ实验报告 120231班14组 void delay(void) { unsigned char data i,j; for(i=0;i 附录三、参考文献 1、《模拟电子技术基础》 童诗白 清华大学出版社 2010年11月 2、《数字电子技术》 江捷 机械工业出版社 2010年10月 3、《电子工程设计训练任务书》 北京工业大学出版社 2012年9月 28