⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dianya.c

📁 用PIC16F7877A实现测量市电电压A/D转换。。。
💻 C
字号:
#include<pic.h>
__CONFIG(0X3F39);

//=========子函数声明=================
void  init(void);            //初始化子函数
void  dycl(void);            //电压测量子函数
void  display(void);         //显示子函数
void  delay(void);           //延时子函数
void  baojing(void);         //报警函数
bit   flag;
int   result,bai,shi,ge;      //定义4个临时变量;
const char TABLE[10]={0X88,0X9F,0XA4,0X85,0X93,0XC1,0XC0,0X8F,0X80,0X81};  //定义常数0-9的数据表格

//===========主函数===================
void  main()
  {
    init();         //端口初始化
    while(1)
      {
        dycl();         //电压测量
        display();      //显示函数
        }
   }

//=============端口初始化子函数================
 void  init()               
     { 
       TRISA=0X01;               //设置RA0为输入,其他为输出            
       TRISC=0X00;               //设置C口全为输出
       PORTA=0XFF;          
       PORTC=0X00;               //熄灭所有显示
       ADCON1=0X0E;              //转换结果左对齐,RA0做模拟输入口,其它做普通I/O
       ADCON0=0X41;              //系统时钟Fosc/8,选择RA0通道,允许ADC工作
     }
//=============电压比较子函数==========================
void  dycl(void)
  {
    // double i;
     int temp;
     ADGO=1;                    //开启转换过程
     while(ADGO);               //等待转换完成
     result=ADRESH;
     result=(result<<2)+(ADRESL>>6);

    // i=result*0.489;                       
    // if((i>=3.876)||(i<=3.170)) flag=1;
     
     temp=(int)(result*30.54/100);	   //0.489为比例系数,1023*0.489=5.00V
     if(temp>=242||temp<=198)
     baojing();               //过压欠压报警
     bai=temp/0x64;          //求显示的百位
     shi=(temp%0x64)/0xa;    //求显示的十位
     ge=(temp%0x64)%0xa;     //求显示的百分个位
  }

//=============报警子函数==================================
 void  baojing()
  {  
     int i;
     for(i=20;i>0;i--)
      {
        PORTC=TABLE[7];
        PORTA=0X37;
        delay(); 
       }
   }  
//=============显示子函数===============================
void  display() 
  {
      PORTC=TABLE[bai];       //查表得百位显示的代码
      PORTA=0X38;               //RA3输出低电平,点亮百位显示
      delay();                //延时一定时间,保证显示亮度

      PORTC=TABLE[shi];       //查表得十位显示的代码
      PORTA=0X1F;         //RA6输出低电平,点亮十位显示
      delay();                //延时一定时间,保证亮度

      PORTC=TABLE[ge];        //求个位显示的代码
      PORTA=0x2f;       //RA5输出低电平,点亮个位显示
      delay();                //延时一定时间,保证亮度
      }

 //----------延时程序------------------------------------ 
void  delay()              //延时程序
    {
     int i;                 //定义整形变量
     for(i=0x100;i--;);     //延时
     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -