PIC16F877A单片机-AD转换经典C程序

来源:本站
导读:目前正在解读《PIC16F877A单片机-AD转换经典C程序》的相关信息,《PIC16F877A单片机-AD转换经典C程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《PIC16F877A单片机-AD转换经典C程序》的详细说明。
简介:在这里给大家介绍一个经典的PIC16F877A单片机-AD转换C程序。

#include <htc.h>

#include <math.h>

#define HC595_SER RB7

#define HC595_SCK RB6

#define HC595_RCK RB5

#define key_164_data RB3

#define key_164_clk RB2

#define key_com1 RB1

#define key_com0 RB0

#define TURE 1

bit key_finish; //定义位变量,这是PICmate仿真软件环境的特有的地方 unsigned int sample_key;

unsigned int sample_keyBuf[2];

unsigned int key_value;

unsigned char key_row_sel;

unsigned char key_number;//键号

unsigned int T100ms;

unsigned char disbuf[8];

unsigned int ad_data;

int a[4];

const unsigned char seven_seg[16]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//----------------------------------------------

void disbuf_update(void)

{

disbuf[7]=seven_seg[a[3]];

disbuf[6]=seven_seg[a[2]];

disbuf[5]=seven_seg[a[1]];

disbuf[4]=seven_seg[a[0]];

disbuf[3]=seven_seg[0];

disbuf[2]=seven_seg[0];

disbuf[1]=seven_seg[0];

disbuf[0]=seven_seg[0];

}

//----------------------------------------------

//发送一个字节

void s_pData(unsigned char key) //形参key对应着实参disbuf

{

unsigned char i;

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

{

if(0x80&(key<<i)) //此处是一个非常微妙的地方。当括号里的值为0时转到else语句执行,当为1时按照顺序执行语句,但是要跳过else语句。

HC595_SER=1;

else HC595_SER=0;

HC595_SCK=0;

HC595_SCK=1;

}

}

//----------------------------------------------

//----------------------------------------------

void display (void)

{

unsigned char i;

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

s_pData(disbuf);

HC595_RCK=0;

HC595_RCK=1;

}

//----------------------------------------------

void start_ad_change (void) //开始A/D转化

{

ADCON1=0x80;

ADCON0=0x48;

ADON=1;

ADIF=0;

asm("nop");

asm("nop");

asm("nop");

asm("nop");

asm("nop");

asm("nop");

asm("nop");

asm("nop");

ADGO=1;

while(ADIF==0);

ADIF=0;

ad_data =ADRESL;

ad_data |=(unsigned int)(ADRESH<<8); //强制ADRESH的8位放在ad_data的高八位

ADON=0;

}

void two_change_ten(void) //二进制转十进制

{

int s=0,i;

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

{if(0x0001&(ad_data>>i))

s=s+pow(2,i);

}

a[0]=s%10;

a[1]=(s/10)%10;

a[2]=(s/100)%10;

a[3]=s/1000;

}

//主程序

int main(void)

{

PORTB=0;

TRISB=0x03;

PORTA=0;

TRISA=0x02;

while(1)

{

start_ad_change();

two_change_ten();

disbuf_update();

display();

}

}

//----------------------------------------------

提醒:《PIC16F877A单片机-AD转换经典C程序》最后刷新时间 2024-03-14 01:00:18,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《PIC16F877A单片机-AD转换经典C程序》该内容的真实性请自行鉴别。