数控电流恒流源的51c程序.doc_第1页
数控电流恒流源的51c程序.doc_第2页
数控电流恒流源的51c程序.doc_第3页
数控电流恒流源的51c程序.doc_第4页
数控电流恒流源的51c程序.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

#include #include#include #include #define uchar unsigned char#define uint unsigned intsbit cs=P24; /片选tlc5615sbit clk=P23; /时钟sbit din=P25; /SPI口/tlc2543sbit clock = P31; /输入、输出时钟端sbit input = P27; /数据输入端sbit output = P26; /数据输出端sbit CS = P30; /片选端,负电平有效/sbit eoc=P32; / 转换结束标志端/lcd sbit RS=P20; sbit RW=P21; sbit En=P22;uchar code table16=0x30,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f;/数字uchar dis_buf; /显示缓存uchar n,temp1;uchar key;/键顺序码uchar key_cli;/数字键被按下的次数uchar jia,jian,enter,cance;/功能键uint j;uint ad=0;float fVoltage1;uchar buf5,i;/函数声明 keyscan(); void TLC56 (uint dav) ; void delay56(); void Write(uchar address,uchar dat); void delayms(unsigned int x); jianz(uchar key) ;/void delay0(uchar x); /时延 /键盘时延void delayms(uint cnt) uint i;while(cnt-)for(i=0;i=100;i+);/键盘程序 keyscan() P1=0xef; if(P1&0x0f)!=0x0f) delayms(10);/ 函数调用消抖动 if(P1&0x0f)!=0x0f) temp1=P1; switch(temp1) case 0xee: key=0; break; case 0xed: key=4; break; case 0xeb: key=8; break; case 0xe7: key=12; break; while(P1&0x0f)!=0x0f); jianz(key); /函数调用 P1=0xdf; temp1=P1; temp1=temp1&0x0f; if(temp1!=0x0f) delayms(10);/ 函数调用消抖动 temp1=P1; temp1=temp1&0x0f; if(temp1!=0x0f) temp1=P1; switch(temp1) case 0xde: key=1; break; case 0xdd: key=5; break; case 0xdb: key=9; break; case 0xd7: key=13; break; while(P1&0x0f)!=0x0f); jianz(key); /函数调用 P1=0xbf; temp1=P1; temp1=temp1&0x0f; if(temp1!=0x0f) delayms(10); /函数调用消抖动 temp1=P1; temp1=temp1&0x0f; if(temp1!=0x0f) temp1=P1; switch(temp1) case 0xbe: key=2; break; case 0xbd: key=6; break; case 0xbb: key=10; break; case 0xb7: key=14; break; while(P1&0x0f)!=0x0f); jianz(key);/ 函数调用 P1=0x7f; temp1=P1; temp1=temp1&0x0f; if(temp1!=0x0f) delayms(10);/ 函数调用消抖动 temp1=P1; temp1=temp1&0x0f; if(temp1!=0x0f) temp1=P1; switch(temp1) case 0x7e: key=3; break; case 0x7d: key=7; break; case 0x7b: key=11; break; case 0x77: key=15; break; while(P1&0x0f)!=0x0f); jianz(key); jianz(uchar key) /键盘值处理 uint out_temp; /十六位if(key=9) dis_bufkey_cli=tablekey; /查表得键值存储在其中 key_cli+; if(key=12)/确定键送数 out_temp=0; for(n=0;nkey_cli;n+) out_temp=out_temp*10+(dis_bufn-0x30);/给out-temp赋值为整数 out_temp=out_temp*1000;/放大1000倍送5615口 out_temp=(uint)(2000/0x4ff)*out_temp*(10/2000);/数据的转换 out_temp=out_temp*1000;/缩小1000倍送通5615口 TLC56(out_temp);/(重点地方)数字信号从单片机来,这里可以传键盘值和键盘联系 TLC5615DAC的键盘值 delay56(); if(key=13) /取消键 for(n=0;nkey_cli;n+) dis_bufn= ; for(n=0;n0x39) /输入值满十进位 dis_bufn=0x30; n=key_cli-3; dis_bufn=dis_bufn+0x02; if(key=11) /步进-键 n=key_cli-2; dis_bufn=dis_bufn-0x02; if(dis_bufn0x30) n=key_cli-3; dis_bufn=dis_bufn-0x02; n=key_cli-2; dis_bufn=0x39; /时延程序 void delay56() int i=5; while(i-) ; / TLC5615串口接收数据 void TLC56 (uint dav) uchar i; dav=6; /数据移位使高位在前 cs=0; clk=0; for(i=0;i12;i+) din=(bit)(dav&0x8000);/位位发送 dav=1; clk=1; delay56(); clk=0; cs=1; / tlc2543程序/时延程序void delay(uchar N) while(N-);/TLC2543转换程序 12位ADuint TLC2543(uchar CON_WORD) /选择的通道,为0-10 uint ad=0;uchar i;CON_WORD=4; /当控制字位0x00时是十二位转换clock=0;CS=0;for(i=0;i12;i+) if(output=1) /读取DATAOUT ad=ad|0x01; if(CON_WORD&0x80) /读取控制字到INPUT input=1; else input=0; clock=1; delay(10); clock=0; delay(10); CON_WORD=1; ad=1;return(ad); /初始化串口void init_serial() TMOD=0x20; /定时器T1使用工作方式2 TH1=250; /设置初值 TH0=250; /重置 TR1=1; /开始计时 PCON=0x80; /SMOD=1; SCON=0x50; /工作方式1,波特率9600bit/s,允许接收 TI=1; /lcd程序void delayms(unsigned int x);void delay2(uint time) while(time0) time-; void En_Toggle() /产生一个使能脉冲 En=0; delay2(100); En=1; delay2(100); En=0;void Wait_Until_Ready() /不断检测LCD的忙标志(BF) RW=1;/设为读状态 RS=0; /所读为状态位 P0=0xff; En=1; delay2(10); while(P0&0x80)=0); En=0;void Write_Command(uchar Command)/写命令 P0=Command; RW=0; RS=0; P0=Command; En_Toggle(); Wait_Until_Ready();void Write_Data(uchar Data)/写数据 P0=Data; RW=0; RS=1; P0=Data; En_Toggle(); Wait_Until_Ready();void Write_Position(uchar row,uchar colum)/定位置 uchar p; if(row=1) p=0x80+colum-1; Write_Command(p); else p=0xC0+colum-1; Write_Command(p); void Write_String(uchar *s)/写字符 for(;*s!=0;s+) Write_Data(*s);void Write(uchar address,uchar dat) Write_Command(0x80+address);/设置液晶显示位置 Write_Data(0x30+dat);/显示十位void main() P2=0x00; Write_Command(0x38);/初始化液晶 Write_Command(0x0c); Write_Command(0x06); Write_Command(0x01); Write_Command(0x80);/设置显示初始坐标 init_serial(); IE=0; /屏蔽中断 for(j=0;j=key_cli-1;j+) Write( 4+j, dis_bufj);/显示输入数据 delay56(); while(1) keyscan();/键盘扫描 Write_Command(0x80+13); Write_Data(M); Write_Command(0x80+14); Write_Data(A); Write_Command(0x80+0x40+13); Write_Data(M); Write_Command(0x80+0x40+14); Write_Data(A); ad=TLC2543(0); /将16位转换成4个字符存储个、十、百、千 fVoltage1=(float)ad/0x0fff*5*2000/5; buf0=(uchar)fVoltage1; buf0=buf0+0x30;/0x30 buf1=(uchar)(fVoltage1*10)%10; buf1=buf2+0x30; buf2=(u

温馨提示

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

评论

0/150

提交评论