版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Filename:main.c*LastmodifiedDate:2004-09-16*LastVersion:1.0*Descriptions:Themain()functionexampletemplate* *Createdby:lls* *Createddate:2006-09-16* *Version:1.0* *Descriptions:Theoriginalversion* *Modifiedby:* *Modifieddate:2006-09-21* *Version:* *Descriptions:* * *功能:*上位机使用EasyARM软件全仿真的DOS窗口观察。*说明:
2、*通讯波特率115200,8位数据位,1位停止位,无奇偶校验。*#include"config.h"#include"stdio.h"#include"math.h"uint32DA_OUT,DCT;uint32value67;/*数组:六个参数的标准值(比较错误时用)*/uint32biaozhunzhi6=0.8*413,/VIL2.0*413,/VIH2.7*413,/VOH0.5*413,/VOL4*1024/2480,/IIL8*1024/2480;/IOL/*数组:继电器使用情况*/uint32 a63=(1<<
3、;8) (1<<17),(1<<8),(1<<17),/J1 J7(1<<9) (1<<18),(1<<9),(1<<18),/J2 J8(1<<10)|(1<<19),(1<<10),(1<<19),/J3 J9(1<<12)|(1<<20),(1<<12),(1<<20),/J4J10(1<<13)|(1<<23),(1<<13),(1<<23),/J5J11(1&
4、lt;<16)|(1<<27),(1<<16),(1<<27);/J6J12uint8 ay7=1,2,3,4,5,6,7;/数组:六个参数的名称uint8 fm1,fm2,fm3,fm4,fm5,fm6;/非门编号uint8 zj_flag;/二角波过顶标志uint8 rcv_buf18;uint8 rcv_dat0;/*实际电路中各参数要修正的偏差系数 */const float ad01x = 1.905;/AD0.1 测 VOHconst float ad03x = 1.905;const float ad05x = 0.500;const f
5、loat ad15x = 0.500;const float ad16x = 0.500;const float ad17x = 1.900;/AD0.3 测 VIH/AD0.5 测 IIL/AD1.5 测 VIL/AD1.6 测 VOL/AD1.7测IOL(看为高电平)/*模拟开关CD4051GPIO口*/#define A0 IO1DIR#define A1#define A2/*继电器1<<161<<171<<24GPIO 口*/P1.16/P1.17 IO1DIR/P1.24 IO1DIR#define J1 1<<8/P0.8IO0DI
6、R非门1(左)#defineJ21<<9#defineJ31<<10#defineJ41<<12#defineJ51<<13#defineJ61<<16#defineJ71<<17(右)#defineJ81<<18#defineJ91<<19#defineJ101<<20#defineJ111<<235#defineJ121<<27/*LED灯GPIO口*/constuint32LED1=(1<<18);低电平点亮constuint32LED2=(1&
7、lt;<19);低电平点亮constuint32LED3=(1<<20);低电平点亮constuint32LED4=(1<<21);低电平点亮/P0.9IO0DIR非门2/P0.10IO0DIR非门3/P0.12IO0DIR非门4/P0.13IO0DIR非门5/P0.16IO0DIR非门6/P0.17IO0DIR非门1/P0.18IO0DIR非门2/P0.19IO0DIR非门3/P0.20IO0DIR非门4/P0.23IO0DIR非门/P0.27IO0DIR非门6/P1.18IO1DIR控制LED1/P1.19IO1DIR控制LED2/P1.20IO1DIR控制L
8、ED3/P1.21IO1DIR控制LED4constuint32LED5=(1<<22);P1.22IO1DIR控制LED5低电平点亮constuint32LED6=(1<<23);低电平点亮/*key1UART0SPIBEEPDACGPIO#defineUART00x05UART0,发送到PC机显示#defineSPI0x00005500SPI,数码管显示用#defineDAC2<<18#definekey11<<25/*ADGPIO口*/#defineAD011<<24VOH#defineAD031<<28VIH#de
9、fineAD051<<20#defineAD153<<30#defineAD162<<10VOL#defineAD171<<12IOL#defineUART_BPS115200/P1.23IO1DIR控制LED6口*/P0.0P0.1控制/P0.4P0.5P0.6P0.7连接/P0.25连接到DAC/P1.25连接到按键key1/P0.28连接到AD0.1测/P0.30连接到AD0.3测/P0.26连接到AD0.5测IIL/P0.15连接至ijAD1.5测VIL/P0.21连接到AD1.6测/P0.22连接到AD1.7测/通讯波特率115200#
10、defineHC595_CS(1<<29)/P0.29口为74HC595的片选uint32IODIR0;/* *函数名称:DelayNS()* *函数功能:长软件延时* *入口参数:dly延时参数,值越大,延时越久* *出口参数:无* /voidDelayNS(uint32dly)uint32m;for(;dly>0;dly-)for(m=0;m<5000;m+);/*函数名称:UART0_Init()* *函数功能:初始化串口0:波特率115200,8位数据位,1位停止位,无奇偶校验。* *人口参数:无* *出口参数:无* /voidUART0_Init(void)u
11、int16Fdiv;U0LCR=0x83;/DLAB=1Fdiv=(Fpclk/16)/UART_BPS;U0DLM=Fdiv/256;U0DLL=Fdiv%256;U0LCR=0x03;/* *函数名称:UART0_GetByte()* *函数功能:从串口接收1字节数据,使用查询方式接收。* *人口参数:无* *出口参数:接收到的数据* /uint8UART0_GetByte(void)uint8rcv_dat;while(U0LSR&0x01)=0);rcv_dat=U0RBR;rcv_dat0=rcv_dat-48;return(rcv_dat);./* *函数名称:UART0_
12、GetStr()* *函数功能:从串口接收* *入口参数:s指向接收数据数组的指针* *n接收的个数* *出口参数:无* /voidUART0_GetStr(uint8*s,uint32n)uint8i="0"for(;n>0;n-)*s+=UART0_GetByte();rcv_bufi+=rcv_dat0;biaozhunzhi0=(rcv_buf0*100+rcv_buf1*10+rcv_buf2)/100;biaozhunzhi1=(rcv_buf3*100+rcv_buf4*10+rcv_buf5)/100;biaozhunzhi2=(rcv_buf6*10
13、0+rcv_buf7*10+rcv_buf8)/100;biaozhunzhi3=(rcv_buf9*100+rcv_buf10*10+rcv_buf11)/100;biaozhunzhi4=(rcv_buf12*100+rcv_buf13*10+rcv_buf14)/100;biaozhunzhi5=(rcv_buf15*100+rcv_buf16*10+rcv_buf16)/100;一一一/*函数名称:UART0_SendByte()* *函数功能:向串口发送字节数据,并等待数据发送完毕。* *入口参数:data要发送的数据* *出口参数:无* /voidUART0_SendByte(ui
14、nt8data)U0THR=data;while(U0LSR&0x40)=0);/等待数据发送完毕/* *函数名称:PC_DispChar()* *函数功能:向PC机发送显示字符* *入口参数:x显示字符的横坐标*y 显示字符的纵坐标chr显示的字符,不能为 ffcolor显示的状态,包括前景色、背景色、闪烁位。与DOS字符显示一样:03,前景色,46,背景色,7,闪烁位。* *出口参数:无* /voidPC_DispChar(uint8x,uint8y,uint8chr,uint8color).UART0_SendByte(0xff);/起始字符UART0_SendByte(x);U
15、ART0_SendByte(y);UART0_SendByte(chr);UART0_SendByte(color);/* *函数名称:ISendStr()* *函数功能:向上位机发送字符串。* *入口参数:x显示字符的横坐标*y 显示字符的纵坐标*color显示的状态,包括前景色、背景色、闪烁位。与DOS字符显示一样:03,前景色,46,背景色,7,闪烁位。*str要发送的字符串,以0'结束* *出口参数:无* /voidISendStr(uint8x,uint8y,uint8color,char*str)while(1)if(*str='0')break;/结束字符
16、PC_DispChar(x+,y,*str+,color);if(x>=80)x=0;y+;/* *函数名称:MSPI_Init()* *函数功能:初始化SPI接口,设置为主机。* *人口参数:无* *出口参数:无* /voidMSPI_Init(void)IODIR0=IODIR;IODIR=HC595_CS;S0PCCR=0x52;/设置SPI时钟分频S0PCR=(0<<3)|/CPHA=0,数据在SCK的第一个时钟沿采样(1 << 4) |/ CPOL = 1, SCK 为低有效(1<<5)|/MSTR=1,SPI处于主模式(0<<6
17、)|LSBF=0,SPI数据传输MSB(位7)在先(0<<7);/SPIE=0,SPI中断被禁止/* *函数名称:MSPI_SendData()* *函数功能:向SPI总线发送数据。* *入口参数:data待发送的数据* *出口参数:返回值为读取的数据* /uint8MSPI_SendData(uint8data).IOCLR=HC595_CS;/片选74HC595SPI_SPDR=data;while(0=(SPI_SPSR&0x80);/等待SPIF置位,即等待数据发送完毕IOSET=HC595_CS;return(SPI_SPDR);/*此表为LED0F以及L、P的字
18、模*/uint8constDISP_TAB19=/01234567890xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,/AbCdEF0x88,0x83,0xC6,0xA1,0x86,0x8E,/LPC0xC7,0x8C,0xC6;/* *函数名称:DA()* *函数功能:向端口送出DA值。* *调试说明:* /voidDA(void)if(DA_OUT<1023)DA_OUT+;DACR=(DA_OUT<<6);/* *函数名称:csh0()* *函数功能:测量VILVIH* *调试说明:*把各个参数的值存到数组value里
19、,其对应关系如下:* ILvalue0VIHvalue1VOHvalue2VOLvalue3IILvalue4IOLvalue5*/voidcsh0(void)uint32data,data1;DA_OUT=0;DA();if(DA_OUT>=240)(IO1PIN=(IO1PIN|(0x3f<<18)&(1<<19);/LED2测量VIH/*先测AD1.6,将其值作为条件测AD0.3VIH*/AD1CR=(1<<6)|(Fpclk/1000000-1)<<8)|(0<<16)|(0<<17)|(1<&
20、lt;21)|(0<<22)|(1<<27)|(1<<24);while(AD1DR&(0x80000000)=0);data1=(AD1DR>>6)&0x3ff;/读取ADC结果,并清除DONE标志位data1=data1*ad16x;AD0CR=(1<<3)|(Fpclk/1000000-1)<<8)|(0<<16)|(0<<17)|(1<<21)|(0<<22)|(1<<27)|(1<<24);while(AD0DR&(0
21、x80000000)=0);if(data1<=510)&(data1>=490)/0.5V左右的范围(fm2=(fm2+1)%7;valuefm2-11=data1;else(IO1PIN=(IO1PIN|(0x3f<<18)&(1<<18);/LED1测量VIL/*先测AD0.1,将其值作为条件VIL*/AD0CR=(1<<1)|(Fpclk/1000000-1)<<8)|(0<<16)|(0<<17)|(1<<21)|(0<<22)|(1<<27)|(1
22、<<24);while(AD0DR&(0x80000000)=0);data=(AD0DR>>6)&0x3ff;/读取ADC结果,并清除DONE标志位data="data"*ad01x;AD1CR=(1<<5)|(Fpclk/1000000-1)<<8)|(0<<16)|(0<<17)|(1<<21)|(0<<22)|(1<<27)|(1<<24);while(AD1DR&(0x80000000)=0);if(data>=26
23、90)&(data<=2710)/AD0.1VOH="2".7V为条件测AD1.5VIL="0".8Vfm1=(fm1+1)%7;valuefm1-10=data;/fm1+=1;/* *函数名称:csh1()* *函数功能:测量VOHVOL* *调试说明:* /voidcsh1(void)uint32data,data1,data2,data3;uint16ddd1,ddd2;/DA输出值/*AD1.5*k输出VIL=0.8V为条件测量AD0.1VOH="2".7V*/IO1PIN=(IO1PIN|(0x3f<&
24、lt;18)&(1<<20);/LED3测量VOHddd1=165;loop1:DACR=(ddd1<<6);DelayNS(1);AD1CR=(1<<5)|(Fpclk/1000000-1)<<8)|(0<<16)|(0<<17)|(1* <21)|(0<<22)|(1<<27)|(1<<24);while(AD1DR&(0x80000000)=0);data=(AD1DR>>6)&0x3ff;读取ADC结果,并清除DONE标志位data=&q
25、uot;data"*ad15x;if(data<=803)if(data>=797)/判断是否为0.8V(DelayNS(1);AD0CR=(1<<1)|(Fpclk/1000000-1)<<8)|(0<<16)|(0<<17)|(1<<21)|(0<<22)|(1<<27)|(1<<24);while(AD0DR&(0x80000000)=0);data1=(AD0DR>>6)&0x3ff;读取ADC结果,并清除DONE标志位data1=data1
26、*ad01x;fm3=(fm3+1)%7;valuefm3-12=data1;/fm3+=1;elseddd1=(ddd1+1)%1024;gotoloop1;elseddd1=(ddd1-1)%1024;gotoloop1;/*AD0.3*k输出VIH=2V为条件测量AD1.6VOL="0".5V*/DelayNS(100);IO1PIN=(IO1PIN|(0x3f<<18)&(1<<21);/LED4测量VOLddd2=826;loop2:DACR=(ddd2<<6);AD0CR=(1<<3)|(Fpclk/100
27、0000-1)<<8)|(0<<16)|(0<<17)|(1<<21)|(0<<22)|(1<<27)|(1<<24);while(AD0DR&(0x80000000)=0);data2= (AD0DR >> 6) & 0x3ff;/读取ADC结果,并消除DONE标志位data2=data2*ad03x;if(data2<=2005)if(data2>=1995)判断是否为2.0VAD1CR=(1<<6)|(Fpclk/1000000-1)<<8)
28、|(0<<16)|(0<<17)|(1<<21)|(0<<22)|(1<<27)|(1<<24);while(AD1DR&(0x80000000)=0);data3=(AD1DR>>6)&0x3ff;读取ADC结果,并消除DONE标志位data3=data3*ad16x;fm4=(fm4+1)%7;valuefm4-13=data3;/fm4+=1;else/如果>2.0Vddd2-;gotoloop2;else/<2.0Vddd2+;gotoloop2;/* *函数名称:csh2(
29、)* *函数功能:测量IILIOL* *调试说明:* /voidcsh2(void)(uint32data,data1,data2;uint16ddd3;/DA输出值/*AD1.5*k输出VIL=0.4V为条件测量AD0.5IIL="-0".4mA*/DelayNS(100);IO1PIN=(IO1PIN|(0x3f<<18)&(1<<22);/LED5测量IILddd3=83;loop3:DACR=(ddd3<<6);AD1CR=(1<<5)|(Fpclk/1000000-1)<<8)|(0<<
30、;16)|(0<<17)|(1<<21)|(0<<22)|(1<<27)|(1<<24);while(AD1DR&(0x80000000)=0);data=(AD1DR>>6)&0x3ff;data="data"*ad15x;if(data<=402)(if(data>=398)/AD1.5=0.4V为条件测AD0.5IIL(AD0CR=(1<<5)|(Fpclk/1000000-1)<<8)|(0<<16)|(0<<17)|(
31、1<<21)|(0<<22)|(1<<27)|(1<<24);while(AD0DR&(0x80000000)=0);data1=(AD0DR>>6)&0x3ff;/读取ADC结果,并清除DONE标志位data1=data1*ad05x;fm5=(fm5+1)%7;valuefm5-14=(data1-data)/300;/300欧姆根据实际修改/fm5+=1;else(ddd3-;gotoloop3;elseddd3+;gotoloop3;/*测量AD1.7IOL(硬件)调节电位器使得恒压输出为0.5V*/IO1PI
32、N=(IO1PIN|(0x3f<<18)&(1<<23);/LED6测量IOLDelayNS(2);AD1CR=(1<<7)|(Fpclk/1000000-1)<<8)|(0<<16)|(0<<17)|(1<<21)|(0<<22)|(1<<27)|(1<<24);while(AD1DR&(0x80000000)=0);data2=(AD1DR>>6)&0x3ff;读取ADC结果,并清除DONE标志位data2=data2*ad17x;fm
33、6=(fm6+1)%7;valuefm6-15=(data2-500)/390;/390欧姆根据实际修改/fm6+=1;/* *函数名称:bijiao()* *函数功能:把存到数组的测量值与标准值相比较,如有错误则发送到valuei6显示* *调试说明:* /voidbijiao(void)uint8i;uint32j;for(i=0;i<6;i+)if(valuei0<biaozhunzhi0)比较第一列,以下逐列比较valuei6=1;;if(valuei1>biaozhunzhi1)valuei6=(valuei6)2;;if(valuei2<biaozhunzh
34、i2)valuei6=(valuei6)4;;if(valuei3>biaozhunzhi3)valuei6=(valuei6)8;;j="value”i4;j="fabs"(j);if(j>biaozhunzhi4)valuei6=(valuei6)|0x10;;if(valuei5<biaozhunzhi5)valuei6=(valuei6)|0x20;;for(i=0;i<6;i+)/*存入比较值*/valuei6=(1&valuei6)*100000+(2&valuei6)*20000+(4&valuei6)
35、*3000+(8&valuei6)*400+(0x10&valuei6)*50+(0x20&valuei6)*6;/* *函数名称:xianshi()* *函数功能:把转换值发送到串口以坐标形式显示。* *调试说明:在config.h中包含stdio.h* /voidxianshi(void)charstr10;uint8i,j;sprintf(str,"%1dVIL",ay0);ISendStr(1,1,0x30,str);DelayNS(10);sprintf(str,"%1dVIH",ay1);ISendStr(10,1,0
36、x30,str);DelayNS(10);sprintf(str,"%1dVOH",ay2);ISendStr(20,1,0x30,str);DelayNS(10);sprintf(str,"%1dVOL",ay3);ISendStr(30,1,0x30,str);DelayNS(10);sprintf(str,"%1dIIL",ay4);ISendStr(40,1,0x30,str);DelayNS(10);sprintf(str,"%1dIOL",ay5);ISendStr(50,1,0x30,str);Del
37、ayNS(10);sprintf(str,"%1dERR",ay6);/出错标志ISendStr(60,1,0x30,str);DelayNS(10);for(i=1;i<7;i+)for(j=0;j<6;j+)DelayNS(10);sprintf(str,"%8d",valuei-1j*2480/1024);ISendStr(j*10,i+1,0x30,str);for(i=1;i<7;i+)DelayNS(10);sprintf(str,"%8d",valuei-1j);ISendStr(60,i+1,0x30
38、,str);/* *函数名称:IRQ_Timer0()* *函数功能:定时器0中断服务程序,产生锯齿波* *人口参数:无* *出口参数:无* /void_irqIRQ_Timer0(void)DA_OUT=(DA_OUT+1)%1024;DACR="DA"_OUT<<6;T0IR=0x01;/消除中断标志VICVectAddr=0x00;/通知VIC中断处理结束/* *函数名称:主程序main()*函数功能:把转换值发送到串口以坐标形式显示* *调试说明:在config.h中包含stdio.h* /intmain(void)charstr10;uint8i,j;uint8snd20;PIN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026贵州遵义仁怀市大坝镇人民政府招聘就业见习生10人备考题库附答案详解(b卷)
- 幼儿园运动会口号15篇
- 2026重庆信托招聘备考题库附答案详解(精练)
- 2026年克拉玛依市春季面向高校毕业生招聘事业单位工作人员备考题库(第二批4人)附答案详解(综合题)
- 2026山东菏泽市定陶区两夹弦非遗保护传承中心招聘事业工作人员备考题库附答案详解
- 2026云南嘉华食品有限公司招聘备考题库及答案详解(新)
- 2026浙江交工交通科技发展有限公司招聘14人备考题库及答案详解(有一套)
- 2026护理历年自考试题及答案
- 2026陕西西安市长安区魏寨街道卫生院招聘备考题库附答案详解(完整版)
- 幼儿园运动会心得体会大班5篇
- 金属非金属矿山企业安全风险分级管控与隐患排查治理双重预防机制建设规范
- 阑尾炎手术前后护理常规
- 公司资质荣誉管理办法
- 陪诊培训课件模板
- 行政应诉 培训 课件
- 共享菜园活动方案
- DZ 0141-1994地质勘查坑探规程
- 企业环保安全评估报告模板
- 深圳一职笔试题及答案
- 《神经系统损伤定位》课件
- 2025年初级会计职称《经济法基础》精讲课件 (第5-8章)
评论
0/150
提交评论