电子之都

电脑版
提示:原网页已由神马搜索转码, 内容由www.dzdu.com提供.
查看:9261|回复:3

求助,新手入场,我用C语言编了个用12F675单片机模数转换的程

[复制链接]
发表于 2012-4-4 15:31:11|显示全部楼层|阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录才可以下载或查看,没有帐号?快速注册

x
void adinitial( )
{
   TRISIO = 0x01;  //设定GP0为输入,GP1/GP2/GP3为输出脚
   ADCON0 = 0x83; //选择A/D通道为AN0,打开A/D转换器,在工作状态,且使AD转换时钟为专用CR
   ANSEL = 0x31; //转换结果右移,及ADRESH寄存器的高6位为"0",且把AN0口设置为模拟量输入方式
   ADIE = 1; //A/D转换中断允许
   PEIE = 1; //外围中断允许
   ADIE = 1;  //打开AD中断
   ADIF = 0;  //清除A/D中断标志
   }

# include< pic.h>
union adres//定义一个共用体,用于存放A/D转换的结果
{
   int y1;
   unsigned char adre[2];
}adresult;
unsigned char i;
unsigned int j;
unsigned char m;

//延时子程序
void delay()
{
   for(j=5535;--j;) continue;
}

//过载子程序
void overload()
   {
   PORT5=m;
   PORT3=adresult.y1;
   }
//亮红灯子程序
void red()
{
   i=i^0xFF; //通过异或方式每次把i的各位值取反
   PORT4=i; //D口输出i的值
}

//亮绿灯子程序
void green()
{
   i=i^0xFF; //通过异或方式每次把i的各位值取反
   PORT6=i; //D口输出i的值
}

//数据传输子程序
void  ad_data()
   {
   m=m^0xFFFF;
   PORT5=m;
   PORT3=adresult.y1;
   }

//中断服务程序
void interrupt adint(void)
{
   ADIF=0; //清除中断标志
   adresult.adre[0]=ADRESL;
   adresult.adre[1]=ADRESH; //读取并存储A/D转换结果,A/D转换的结果通过共

if(adresult.y1>1.9v)
{
   overload();     //如果输入的模拟量大于1.9V(对应数字量???),则调用《过载overload》子程序
   delay();       //调用延时子程序,使电压检测不要过于频繁
}
else if(1v<adresult.y1<=1.9v)
{
   red();   //如果输入的模拟量大于1.0V小于等于1.9(对应数字量???),则调用《红灯亮red light》子程序
   delay();  
   ad_data();
   }
else if(0.2v<adresult.y1<=1.0v)
{
   red();
   green();     //如果输入的模拟量大于0.2V小于等于1.0(对应数字量???),则调用《红灯亮red light》《绿灯亮green》子程序
   delay();
   ad_data();
   }
else
   {
   green(); //如果输入的模拟量小于0.2V,则调用《绿灯亮green》子程序
   delay();
   ad_data() ;
ADGO=1; //启动下一次A/D转换
}


main()   //主程序
{
   adinitial(); //A/D转换初始化
   ei(); //总中断允许
   while(1)
   {
     ;
   } //等待中断,在中断中循环检测外部电压
}


1、PIC12F675的供电电压为3.0V,并以此为ADC基准。
2、ADC信号为外部测量入口,最高电压1.999V。
3、读ADC信号电压,驱动HT1621再驱动LCD显示出当前电压值,ADC检测周期为100-500ms可调,后续根据需要再更改。
4、当电压超过1.999V时,LCD最前面一位显示“1”,表示溢出量程。
5、LED驱动: 当ADC值在0.2V以下时,亮绿灯
   当ADC值在0.2V-1V时,亮绿灯和红灯
   当ADC值在1.0V以上时,亮红灯
以上LED的这三个值,后续会随时更改,需要在源码中易查易改的。
6、LCD显示屏中其它部分笔划目前不需要,但是HT1621的驱动中需要增加上去。

评分

威望 +6
收起理由
+ 6
谢谢分享,家电维修论坛有您更精彩!

查看全部评分

发表于 2012-4-4 17:01:26|显示全部楼层
不知道用在什么地方?有什么功能?------丈二和尚摸不着头脑
  楼主|发表于 2012-4-5 23:26:06|显示全部楼层
zhhc5204 发表于 2012-4-4 17:01
不知道用在什么地方?有什么功能?------丈二和尚摸不着头脑

是准备用来烧写在pic12f675上用作AD转换的程序,其中pic12f675的GP3(PORT4)、GP1(PORT6)分别控制红、绿灯,AN0(PORT7)用作模拟信号输入端,GP2(PORT5)、GP4(PORT3)分别是控制信号跟十位AD转换后的结果
发表于 2014-4-29 04:52:07|显示全部楼层
手头有两片12F508 下了点资料想看看怎么用。

手机版|家电维修技术论坛( 鄂ICP备09003585号-2)

GMT+8, 2024-6-17 22:08, Processed in 0.061234 second(s), 8 queries , Gzip On, MemCache On.

Qiji. All Rights Reserved


服务条款| 站长声明