• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

贴个PIC16F716的数字电表程序,试了一下,还不错.

//////////////////////////////////////////////////
//  Author     :   Toby
//  Date       :   2008/12/02
//  Function   :   用作电源的电流电压温度等控制
//  MCU        :   PIC16F877A
//  C Compiler :   PICC 8.05
//  IDE        :   MPLAB IDE v8.10                
/////////////////////////////////////////////////

#include
__CONFIG (0x3f32);           //烧写配置位

const char TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};  //定义常数0-9的数据表格
void adinitial_voltage();
void display_voltage();
void  delay(unsigned char x);
unsigned long int AD_data=0;

void  initial();


main()                          //主程序
{
       unsigned int a;                        
       initial();                 //先初始化各I/O              
       while(1)
        {    
            for(a=850;a>=1;--a)
            display_voltage();
        
        }
      
}



void  initial()          
{  
    TRISA=0B00000001;
    TRISB=0X0;
    PORTB=0XFF;
}



//输入电压A/D转化初始化子程序
void adinitial_voltage()// RA0为AD输入
{        unsigned char a;
         AD_data=0;
         for(a=200;a>=1;--a)
           {
             ADCON1=0B00000100;          //ADRESH 寄存器的高6 位读为0;6位与7位须置1
             ADCON0=0B01000001;          //A/D转换器模块工作;但AD转换不进行;FOSC/8
             asm("nop");asm("nop");
             GODONE=1;
             while(GODONE);
             AD_data+=ADRES;
          }
}






void display_voltage()                           //电压显示函数  
   {
    
    int ge,shi,bai,temp;   //定义6个临时变量
    
     adinitial_voltage();
     temp=AD_data/10203.268234356317257871662016740*100;  
    

     bai=temp/100;             //求显示的千位        
     shi=temp%100/10;          //求显示的百位
     ge=temp%10;            //求显示的十位
  
     PORTB=TABLE[bai]&0x7f;    //显示一个小数点
     PORTA=0B1111100;            //RA1输出低电平,点亮千位显示    
     delay(1);
     PORTB=TABLE[shi];           //查表得百位显示的代码
     PORTA=0B1111010;                 //RA2输出低电平,点亮百位显示
     delay(1);                    //延时一定时间,保证显示亮度
     PORTB=TABLE[ge];           //查表得十位显示的代码
     PORTA=0B1110110;                 //RA3输出低电平,点亮十位显示
     delay(1);                    //延时一定时间,保证亮度
     PORTB=0xff;

   }


void  delay(unsigned char x)  //延时程序
    {
     unsigned char i=x;     //定义整形变量
     for(i=200;--i;);          //延时
    }
全部回复(7)
正序查看
倒序查看
lsxczn
LV.1
2
2009-04-09 11:54
下来学习了,非常感谢~~
0
回复
fzhlpp
LV.7
3
2009-04-09 23:09
刚学单片机的,看不大懂,不过你的C写的很漂亮,向你学习了,有空指点一下我,谢谢了.
http://bbs.dianyuan.com/topic/399922
0
回复
bessam
LV.4
4
2009-04-15 09:30
哈哈,不错,借见了
0
回复
2011-08-01 14:16
@bessam
哈哈,不错,借见了

这么没有硬件连接图阿!

要是有就好了!

0
回复
bpyanyu
LV.8
6
2011-08-01 17:49

做个记号

0
回复
2011-08-01 20:03

楼主的:10203.268234356317257871662016740

是从那里来的?

0
回复
zfp1
LV.1
8
2015-08-12 09:52
楼主用的芯片是PIC16F716吗?
0
回复