直流电子负载设计_第1页
直流电子负载设计_第2页
直流电子负载设计_第3页
直流电子负载设计_第4页
直流电子负载设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include<reg52.h>#define uchar unsigned char #define uint unsigned intsbit rs=P30; sbit rw=P31; sbit lcden=P32; /液晶显示屏相关位定义/sbit AD_OUT=P14;/sbit AD_IN=P15;/sbit AD_CS=P16;/sbit AD_CLOCK=P17;/sbit EOC=P33;sbit DSO=P14;sbit DSI=P15;sbit CS=P16;sbit CLK=P17;sbit DA_IN=P10;sbit DA_CK=P11;sbit DA_

2、CS=P12;unsigned long int value,value1;uchar set;uint a,b,z,temp1,temp_1;/DA输出变量值float x,y,out=0;uint AD_DAstart;char iset6=0,0,0,0,0,0;uchar code table1="Are you sure "uchar code table2=" to set I? "void delay(uchar x) /延时子程序 uchar i,j; for(i=0;i<x;i+) for(j=0;j<120;j+); /延

3、时120秒 void delay1(uint t) /极短延时 while(t-); void delayms(uint z) /延时函数,参数为zuint x,y; for(x=z;x>0;x-) for(y=110;y>0;y-); /z=1测试为大约1微秒 void write_com(uchar com) /写命令函数rs=0; /rs置0表示写命令P0=com; /位声明,按原理图接P0口,输入数据delayms(5); /时序图中须有thd2时间延时lcden=1; /置高delayms(5); /时序图中须有thd2时间延时lcden=0; /按时序图置低void w

4、rite_date(uchar date) /写数据函数rs=1; /rs置1表示写数据lcden=0; P0=date; /将数据赋到P0口delayms(5); lcden=1; delayms(5); lcden=0; void led_init() /初始化函数lcden=0;rw=0;write_com(0x38); /显示模式设置:16X2显示,5X7点阵,8位数据write_com(0x0c); / 开显示,关光标,光标不闪烁write_com(0x06); / 写一个数据后地址指针加一,光标加一write_com(0x01); / 数据指针及数据清0write_com(0x80

5、); / 设置数据地址指针,第一行 write_date(0x53);write_date(0x30+iset1);write_date(0x30+iset2);write_date(0x2e);write_date(0x30+iset4);write_date(0x30+iset5);/uint read2543(uchar port) /AD转换子程序/uint ad=0,j;/ AD_CLOCK=0;/ AD_CS=0;/EOC=1;/ port<<=4;/ delay1(50); / for(j=0;j<12;j+)/ / if(AD_OUT) / / ad|=0x0

6、1;/ / AD_IN=(bit)(port&0x80);/ AD_CLOCK=1;/ delay1(6);/ AD_CLOCK=0;/ delay1(3);/ port<<=1;/ ad<<=1;/ / AD_CS=1;/ ad>>=1;/ return(ad);/uint Read_TLC2543(uchar CHN)/TLC2543据转换函数(方法二)/ uchar i,temp;/ uint read_ad_data = 0; /分别存放采集的数据,先清0/ CHN=CHN<<4; /12位格式,选择高位道导前,单极性/ CLK=

7、0;/ CS=1;/ CS=0; /下降沿,并保持低电平/ temp=CHN; /输入要转化的通道/ for(i=0;i<12;i+) /12位数据/ / read_ad_data=read_ad_data<<1; /转换结果左移一位/ if(temp&0x80)!=0)DSI=1; /送方式、通道控制字 串行输入/ elseDSI=0;/ if(DSO)read_ad_data=read_ad_data+1; /读入转换结果/ CLK =1;/ CLK =0;/ temp=temp<<1; /左移,准备发送方式,通道控制字下一位/ / CS=1;/ re

8、ad_ad_data=read_ad_data&0x0fff; /屏蔽高四位,因为是12位的转换结果/ return(read_ad_data);/ uint Read_TLC2543(uchar chanle)/TLC2543数据转换函数(方法一)uchar i,dah=0,dal=0;uint date;CS=1;CS=0;CLK=0;chanle<<=4;/高低位交换for(i=0;i<4;i+) dah<<=1;if(DSO)dah+;/高四位数据DSI=chanle&0x80;/选择转换通道CLK=1;delay(1);CLK=0;cha

9、nle<<=1;DSI=0;/此部不能少!for(i=0;i<8;i+)/转换的数据低8位 CLK=1;dal<<=1;if(DSO)dal+;CLK=0; CS=1;date=dah;/转换的数据高四位date<<=8;date=date|dal;/合并12位数据return(date); void adzh() uint ge,shi,x1,x2; /电流检测测出电流实际值 temp1=Read_TLC2543(0x00); y=temp1*5.0/4096; z=y*100; /输出AD转换后的电流值 shi=z/1000; ge=(z/100)

10、%10; x1=(z/10)%10; x2=z%10; write_com(0x80+0x40); /显示电流值 write_date(0x54); write_date(0x30+shi); write_date(0x30+ge); write_date(0x2e); write_date(0x30+x1); write_date(0x30+x2); write_date(0x41);void adzh_1() /电压检测测出电压实际值 uchar ge,shi,x1,x2; temp_1=Read_TLC2543(0x01); y=temp_1*5.0/4096; /输出AD转换后的电压

11、y=y*4.0; z=y*100; shi=z/1000; ge=(z/100)%10; x1=(z/10)%10; x2=z%10; write_com(0x80+0x40); /显示电压值 write_date(0x54); write_date(0x30+shi); write_date(0x30+ge); write_date(0x2e); write_date(0x30+x1); write_date(0x30+x2); write_date(0x56); void Send1456(uint DACdat)uchar i=0;DA_CK=0;delay(2);DA_CS=0;del

12、ay(2);for(i=0;i<12;i+)DA_IN=(bit)(DACdat&0x800);DA_CK=1;DACdat<<=1;DA_CK=0;DA_CS=1;DA_CS=0; void keyscan() /矩阵键盘 uchar temp,keycount,num; / 定义局部变量P2=0xfe; / 检测最上面一行各键是否有按键按下 temp=P2; / 将P2口的值赋给temp temp=temp&0xf0; / 位与 if(temp!=0xf0) delayms(100); temp=P2; temp=temp&0xf0; if(tem

13、p!=0xf0) /确认被按下,防止抖动 temp=P2; switch(temp) case 0xee: /检测到7被按下 if(keycount!=0&&keycount!=3) write_date(0x30+7); isetkeycount+=7; break; case 0xde: /检测到8被按下 if(keycount!=0&&keycount!=3) write_date(0x30+8); isetkeycount+=8; break; case 0xbe: /检测到9被按下 if(keycount!=0&&keycount!=3

14、) write_date(0x30+9); isetkeycount+=9; break;case 0x7e: /检测到取消键被按下 write_com(0x01); / 数据指针及数据清0 write_com(0x0c); write_com(0x80); write_date(0x53); write_date(0x30+iset1); write_date(0x30+iset2); write_date(0x2e); write_date(0x30+iset4); write_date(0x30+iset5); AD_DAstart=1; while(temp!=0xf0) /松手检测

15、temp=P2; temp=P2&0xf0; P2=0xfd; / 检测最二行各键是否有按键按下 temp=P2; / 将P2口的值赋给temp temp=temp&0xf0; / 位与 if(temp!=0xf0) delayms(100); temp=P2; temp=temp&0xf0; if(temp!=0xf0) /确认被按下,防止抖动 temp=P2; switch(temp) case 0xed: /检测到4被按下 if(keycount!=0&&keycount!=3) write_date(0x30+4); isetkeycount+=

16、4; break; case 0xdd: /检测到5被按下 if(keycount!=0&&keycount!=3) write_date(0x30+5); isetkeycount+=5; break; case 0xbd: /检测到6被按下 if(keycount!=0&&keycount!=3) write_date(0x30+6); isetkeycount+=6; break;case 0x7d: / 选择电流/write_com(0x86) ;/ write_date(0x41) ;/x=iset1*10+iset2+iset4*0.1+iset5*

17、0.01;/out=x*0.1;/value=1024*out;/tlc5615(value);/ adzh(); a=1; AD_DAstart=1; break; while(temp!=0xf0) /松手检测 temp=P2; temp=P2&0xf0; P2=0xfb; / 检测第三行各键是否有按键按下 temp=P2; / 将P2口的值赋给temp temp=temp&0xf0; / 位与 if(temp!=0xf0) delayms(100); temp=P2; temp=temp&0xf0; if(temp!=0xf0) /确认被按下,防止抖动 temp=

18、P2; switch(temp) case 0xeb: /检测到1被按下 if(keycount!=0&&keycount!=3) write_date(0x30+1); isetkeycount+=1; break; case 0xdb: /检测到2被按下 if(keycount!=0&&keycount!=3) write_date(0x30+2); isetkeycount+=2; break; case 0xbb: /检测到3被按下 if(keycount!=0&&keycount!=3) write_date(0x30+3); iset

19、keycount+=3; break; case 0x7b: / 选择电压b=1;/ write_com(0x86) ;/ write_date(0x56);/x=iset1*10+iset2+iset4*0.1+iset5*0.01;/out=x*0.1;/value=1024*out;/ /tlc5615(value);/ adzh_1(); AD_DAstart=1; break; while(temp!=0xf0) /松手检测 temp=P2; temp=P2&0xf0; P2=0xf7; / 检测第四行各键是否有按键按下 temp=P2; / 将P2口的值赋给temp tem

20、p=temp&0xf0; / 位与 if(temp!=0xf0) delayms(100); temp=P2; temp=temp&0xf0; if(temp!=0xf0) /确认被按下,防止抖动 temp=P2; switch(temp) case 0xe7: /检测到0被按下 if(keycount!=0&&keycount!=3) write_date(0x30); isetkeycount+=0; break; case 0xd7: /检测到删除键被按下if(keycount<6&&keycount>0) if(keycoun

21、t!=1) keycount-;write_com(0x80+keycount); break; case 0xb7: /检测到确认键被按下 if(set=1) write_com(0x01); / 数据指针及数据清0write_com(0x80);write_date(0x53);write_com(0x0f);write_com(0x80+1);set=0;keycount=1; break; case 0x77: write_com(0x01); / 数据指针及数据清0 write_com(0x80); / 设置数据地址指针,第一行 for(num=0;num<16;num+) write_date(table1num)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论