单片机程序源码如下:

#include //调用PIC16F87XA单片机的头文件

__CONFIG(HS&WDTDIS&LVPDIS);

#define U5A  RB0         

#define U5B  RB1         

#define U5C  RB2       


unsigned char temp1;

unsigned char temp2;

const unsigned char LED[28]=

{

0x3F,/*0*/        

0x06,/*1*/        

0x5B,/*2*/        

0x4F,/*3*/        

0x66,/*4*/        

0x6D,/*5*/        

0x7D,/*6*/        

0x07,/*7*/        

0x7F,/*8*/        

0x6F,/*9*/        

0x77,/*A*/        

0x7C,/*b*/        

0x39,/*C*/        

0x58,/*c*/        

0x5E,/*d*/        

0x79,/*E*/        

0x71,/*F*/        

0x76,/*H*/        

0x74,/*h*/        

0x38,/*L*/        

0x54,/*n*/        

0x37,/*N*/        

0x5C,/*o*/        

0x73,/*P*/        

0x50,/*r*/        

0x78,/*t*/        

0x3E,/*U*/        

0x40,/*-*/

};

unsigned int  ADbuf; 

unsigned int adcbuf[16];


void main(void)            

{

unsigned char buf;    

unsigned char USARTbuf;

    unsigned char c=0;  

    unsigned char e=0;   

unsigned char i;

unsigned char b;

unsigned char d=0;   

    TRISA=0B11111111;    

   TRISB=0B11111000;   

TRISD=0B00000000;   

    PORTA=0B00000000;   

    PORTB=0B00000000;     

    PORTD=0B00000000;    

     ADCON1=0B10001111;    


    ADIE=0;                //禁止A/D中断

    SPBRG=25;              //设置波特率为9600,误差0.16%

    BRGH=1;                //设置高速波特率

    SYNC=0;                //SYNC=0为异步模式,SYNC=1为同步模式

    SPEN=1;                //允许串口操作

    CREN=1;                //CREN=0禁止连续接收,CREN=1允许连续接收

    TXIE=0;                //禁止发送中断

    RCIE=0;                //禁止接收中断

    TX9=0;                 //TX9=0为8位发送,TX9=1为9位发送

    RX9=0;                 //RX9=0为8位接收,RX9=1为9位接收

    TXEN=1;                //TXEN=0为禁止发送,TXEN=1为允许发送

   

    while(1)               //死循环,单片机初始化后,将一直运行这1个死循环

    {

  for(i=0;i<16;i++)  //连续采样16次,然后取平均数

  {

    

         asm("NOP");            //略做延时

         asm("NOP");            //略做延时

         asm("NOP");            //略做延时

         asm("NOP");            //略做延时

         ADGO=1;                //开始进行A/D转换

         while(ADGO) continue;  //等待A/D转换结束


         adcbuf[i]=ADRESH*256+ADRESL;  

           

    //*********************    

  }

  ADbuf=0;

  for(i=0;i<16;i++)             

  {

   ADbuf+=adcbuf[i];         

  }

  ADbuf=ADbuf/16;                

        

  ADbuf=(int)(((float)ADbuf/1023)*1000); 

            temp1=ADbuf/100;

            temp2=ADbuf%100;

      if(ADbuf<999)

{  

         PORTD=0;          

        if(++d>3) d=0;  

        if(d==0)       

        {

           U5A=0;      

           U5B=0;     

           U5C=0;       

           PORTD=LED[(ADbuf%10000)/1000];     

        }

        else if(d==1)   

        {

           U5A=1;      

           U5B=0;      

           U5C=0;      

           PORTD=LED[(ADbuf%1000)/100]; 

        }

        else if(d==2)    

        {

           U5A=0;        

           U5B=1;    

           U5C=0;      

           PORTD=LED[(ADbuf%100)/10]; 

        }

        else if(d==3) 

        {

           U5A=1;       

           U5B=1;         

           U5C=0;       

           PORTD=LED[ADbuf%10];       

        }

  }    



if(ADbuf>999)

{

         PORTD=0;        

        if(++d>3) d=0;  

        if(d==0)         

        {

           U5A=0;    

           U5B=0;     

           U5C=0;    

           PORTD=LED[15];   

        }

        else if(d==1)  

        {

           U5A=1;   

           U5B=0;         

           U5C=0;         

           PORTD=LED[15];

        }

        else if(d==2)  

        {

           U5A=0;       

           U5B=1;      

           U5C=0;       

           PORTD=LED[0];   

        }

        else if(d==3)      

        {

           U5A=1;        

           U5B=1;         

           U5C=0;        

           PORTD=LED[10];       

        }

}


if(RCIF==1)            

        {                       

            USARTbuf=RCREG;     

            if(OERR==1);       

            {

                CREN=0;         

                CREN=1;        

            }

   if(USARTbuf==0x89)

   {

             TXREG=0X90;    

             while(TRMT==0);    

    TXREG=temp1;    

             while(TRMT==0);    

    TXREG=temp2;  

             while(TRMT==0);    

   }

  }


    }

}



关键字:PIC16F87X  单片机  ADC  照度计 引用地址:基于使用PIC16F87X单片机ADC制作的照度计

上一篇:MPLAB编译后不显示错误信息
下一篇:PIC18F45K80 CAN通信实例,可通过模拟调试

推荐阅读

集微网消息,10月23-26日,一年一度的安博会在北京举办。作为两年一届的全球最权威、最具影响力的安防展会之一,是社会公共安全产品与技术交流的盛会。本届安博会继续秉承“普及安防知识、展示先进技术、引领行业发展、服务公安实战”的理念,以“构建平安中国、服务一带一路、创新智能安防”为主题,集产品展示、行业论坛、技术交流、科技普及等活动于一...
  10月21日,晋煤集团党委书记、董事长李鸿双,总经理王志清在山西太原会见法国阿海珐储能集团董事长米歇尔·卢瓦索、法国法中能源协会主席张志成,就加强合作、推动氢能产业发展深入探讨。   李鸿双指出,当前山西全面开启能源革命综合改革试点,积极探索新能源可持续发展模式,加快推进氢能全产业链布局。作为省属国有骨干企业,晋煤集团是中国最...
一加本月发布了一加8T,这是一加下半年发布的唯一旗舰。  除了旗舰产品线,一加Nord即将迎来新成员。  近日,据外媒报道,一加可能会在10月26日发布一加Nord N10,现在有关该机的细节被曝光。  如图所示,一加Nord N10采用了与一加8T相似的矩阵相机造型,摄像头数量为四颗。  规格方面,一加Nord N10像是一加8T的“青春版”,配置降...
继上个月发布iQOO Z5智能手机后,iQOO将于10月20日推出一款新的iQOO Z5x手机。在正式发布之前,该公司正在预热即将推出的这款手机的规格和功能。在iQOO分享的最新预告中,已经确认iQOO Z5x智能手机将采用联发科天玑900芯片。联发科天玑900采用6纳米制程制造,封装了两个2.4GHz的Cortex-A78内核和六个2GHz的Cortex-A55内核,它还集成了Mali-G68图形处理...

史海拾趣

问答坊 | AI 解惑

我是新手,请教一个问题啊!!!

请问我用mulitism仿真时,电容C1的电压不变,请问这是为什么啊!!!!…

查看全部问答∨

数字电路学习基础

兄弟没钱了,上传点东西…

查看全部问答∨

Freescale的MC13224芯片如何能得到RSSI的值呢?

手上有Freescale MC13224的开发板,有一个用ZigBee人员定位的项目,知道可以通过RSSI来得到被测目标到通信节点的距离,但不知道如何得到RSSI的值。请教各位高手!!…

查看全部问答∨

有个问题

我目前有个项目,正在做系统硬件设计,就是单板硬件系统的设计,此前是一张白纸,对系统硬件类一点不懂,请问高手入门的方法。…

查看全部问答∨

太阳能逆变电源市场发展预测

机遇与挑战: 太阳能将成人类最理想替代能源我国迎来“太阳能时代” 太阳能逆变电源市场前景广阔 市场数据: 2010年太阳能发电量的增4倍达5550兆瓦 近年来,随着人们环保意识的增强,对于可再生能源的关注越来越多。在太阳能、风能、潮汐能等 ...…

查看全部问答∨

ATMega16驱动12864lcd-绘图-画点

因为我在网上看了很久,12864绘图中的画点有些难度。因为可以液晶芯片不一样驱动会有差别。 所以把我写的贴出来大家分享,不明白的加我QQ:343700980一起交流! 我使用的环境是: 单片机:ATMega16 开发板:DDC-16B 液晶是:YJD12864C-1(可以 ...…

查看全部问答∨

操作系统的地址问题

我想问一下,1.wince和linux的内核在内存中启动的地址是怎么确定的?             2.我用的是64M的NAND FLASH ,我要将wince内核烧写到FLASH中,从FLASH中的哪个地址开始烧写 谢谢了…

查看全部问答∨

补偿及测量高功率 LED 驱动器的控制回路

德州仪器资深应用工程师Jeff Falin告诉你 应如何修改才能搞定适用于 WLED 电流调节升压的转换器, 同时,也将说明如何测量升压转换器的控制回路,好东西不容错过!!! [ 本帖最后由 德州仪器 于 2011-3-10 13:59 编辑 ]…

查看全部问答∨

请求一个下在IAREWARM4.42a-EV版的地址

                                 同上…

查看全部问答∨

智能电视静电保护技巧

高清数字内容过去只能承载于物理磁盘上,需要专用设备才可以播放;而今,宽带连接无处不在,高清数字内容可以从“云”端中以“流”的形式传送和定制到计算机、智能手机或任何其它连网设备上。传统电视是一种独立的终端,只能接收广播电视节目,由于 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved