电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 9258|回复: 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的驱动中需要增加上去。

评分

参与人数 1威望 +6 收起 理由
嘉善人 + 6 谢谢分享,家电维修论坛有您更精彩!

查看全部评分

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

是准备用来烧写在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-5-15 01:39 , Processed in 0.063509 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表