pic16f877A AD转换模块C语言简易程序

[复制链接]
 楼主| dream2010 发表于 2008-12-30 08:50 | 显示全部楼层 |阅读模式
//根据硬件功能,分别显示两个不同的数据,分两次调用子程序,则显示出指定的数据。<br />//考虑&nbsp;结合AD转换功能模块,显示转换AD之后的&nbsp;&nbsp;数字量。综合2个功能模块编程<br /><br />#include&quot;pic.h&quot;<br />#include&quot;pic1687x.h&quot;<br />unsigned&nbsp;char&nbsp;Table0[10]={0XBF,0X86,0XDB,0XCF,0XE6,0XED,0XFD,0XF7,0XFF,0XEF};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LED&nbsp;共阴极数码管显示代码,带点。&nbsp;&nbsp;&nbsp;单独RD7&nbsp;显示部分。<br />unsigned&nbsp;char&nbsp;Table[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};<br /><br />const&nbsp;char&nbsp;table[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XD8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;共阳极代码&nbsp;&nbsp;595处理显示部分。<br />const&nbsp;char&nbsp;table0[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};<br /><br /><br />union&nbsp;adres&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//考虑&nbsp;结合AD转换功能模块,显示转换AD之后的&nbsp;&nbsp;数字量。综合2个功能模块编程<br />{<br />int&nbsp;y1;<br />unsigned&nbsp;char&nbsp;adres1[2];<br />}adres2;<br /><br /><br />void&nbsp;ADinitial()<br />{<br />TRISA2=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//TRISA1=1;<br />ADCON0=0B01010001;&nbsp;&nbsp;&nbsp;&nbsp;//0X51寄存器&nbsp;0B01010001选择模拟通道为010&nbsp;RA2;&nbsp;AD工作时钟频率8分频&nbsp;01;&nbsp;&nbsp;ADGO/DONE&nbsp;&nbsp;*&nbsp;&nbsp;ADON;&nbsp;需要AD转换ADON开启但是此刻不需要立刻转换工作&nbsp;ANGO&nbsp;0<br />ADCON1=0B10000000;&nbsp;&nbsp;&nbsp;&nbsp;//0X80&nbsp;&nbsp;&nbsp;ADFM&nbsp;转换结果排列方式&nbsp;&nbsp;ADFM=1&nbsp;则高6为是0000000??????????????&nbsp;&nbsp;转换结果放在地位。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ADCON1&nbsp;&nbsp;控制寄存器主要用于选择引脚的功能:&nbsp;&nbsp;通用的数字信号入出的IO引脚;&nbsp;&nbsp;模拟&nbsp;量信号的输入功能;参考电压输入的功能RA5---RE0,RE1,RE2;&nbsp;&nbsp;<br /><br />PIE1=0;<br />PIE2=0;<br />ADIE=1;<br />PEIE=1;<br />}<br /><br />void&nbsp;interrupt&nbsp;ADdeal()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//功能描述:中断模块必须有标志字,&nbsp;&nbsp;&nbsp;如同&nbsp;USART&nbsp;通讯模块子函数。<br />{<br />ADIF=0;<br />adres2.adres1[0]=ADRESL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AD模块转换结果,自动存储在&nbsp;两个结果寄存器中,&nbsp;ADRESH;&nbsp;ADRESL.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;必须用共用提变量将其取出再进行处理,产生对应动作。<br />adres2.adres1[1]=ADRESH;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;if(adres2.y1==0XCC)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//程序功能注释:输入部分为接地端部分;&nbsp;小于3V的时候显示2,&nbsp;可调电阻、电位器大于3伏特时候显示3。&nbsp;0X266对应&nbsp;3伏特电压,0X133对应1.5伏特<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//程序改变模拟输入的量,0X133,小于1.5V的时候,显示1,大于1.5V时候显示2&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTD=Table0[1];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC1=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />//------------------------------------------------------------------------<br />&nbsp;&nbsp;else&nbsp;if(adres2.y1==0X199)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTD=Table0[2];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC1=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />//----------------------------------------------------------------------------<br />&nbsp;&nbsp;else&nbsp;if(adres2.y1==0X266)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//注意一个常识,严重区别好&nbsp;等于符号&nbsp;==&nbsp;及赋值号。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTD=Table0[3];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC1=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />//-------------------------------------------------------------------------<br />&nbsp;&nbsp;else&nbsp;if(adres2.y1==0X333)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTD=Table0[4];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC1=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />//------------------------------------------------------------------------<br />&nbsp;&nbsp;else&nbsp;if(adres2.y1==0X400)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTD=Table0[4];<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC1=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ADGO=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动下一次AD采集信号。<br />}<br />//-----------------------------------------------------------------------------------------------------------------------------------------<br />void&nbsp;SYSinitial()<br />{<br />TRISD=0X00;<br />PORTD=0XFF;<br />TRISC1=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RC1&nbsp;&nbsp;为蜂鸣器&nbsp;1叫。<br />PORTC=0X00;<br />}<br /><br /><br />//***************************************************************************************************************<br />SPIinitial()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;PIR1=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPCON=0x30;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPSTAT=0xc0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRISC5=0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRISC3=0;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRISC2=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />}<br /><br />//*************************************************************************************************************<br />void&nbsp;SPILED(char&nbsp;data)<br />{<br />SSPBUF=data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}while(SSPIF==0)&nbsp;;&nbsp;<br />SSPIF=0;<br />}<br />//**************************************************************************************************************<br />void&nbsp;display(char&nbsp;data1)<br />{<br />RC2=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;SPILED(data1);<br /><br />RC2=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;<br /><br />//--------------------------------------------------------------------------------------------------------------------------------<br />void&nbsp;main()<br />{<br />SYSinitial();<br /><br />SPIinitial();<br />ADinitial();<br /><br />GIE=1;<br />PEIE=1;<br />ADGO=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//记得各类中断&nbsp;功能模块都是有固定程序格式、分使能位?标志位<br /><br />&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

11

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部