[学习资料]

PIC16F877A的AD学习(转载)

[复制链接]
440|5
手机看帖
扫描二维码
随时随地手机跟帖
qcliu|  楼主 | 2019-6-19 12:56 | 显示全部楼层 |阅读模式

下面是一个3*3AD键盘的原理图

2009-07-19_155046.jpg


使用特权

评论回复
qcliu|  楼主 | 2019-6-19 12:56 | 显示全部楼层
程序的头文件

#ifndef ADC_H
#define ADC_H

#include "main.h"
void init_adc()  ;
char get_key() ;

#endif

使用特权

评论回复
qcliu|  楼主 | 2019-6-19 12:56 | 显示全部楼层
子程序

#include "adc.h"
void init_adc()
{
 //定义端口方向
 TRISA0=1 ;
 ADCS1=0 ;//选择系统时钟
 ADCS0=0 ;
//选择通道RA0 ;
// CH2=0 ;
// CH1=0 ;
// CH3=0 ;
 bitclr(ADCON0,5) ;
 bitclr(ADCON0,4) ;
 bitclr(ADCON0,3) ;
 ADON=1 ;//AD就绪
 ADFM=0 ;

}

使用特权

评论回复
qcliu|  楼主 | 2019-6-19 12:57 | 显示全部楼层
char get_key()
{  char adata=0;
   ADGO=1;
   while(ADGO);
   if(ADRESH>0xcb)
      adata=1;
   else if(ADRESH>0xa8)
      adata=2;
   else if(ADRESH>0x8f)
      adata=3;
   else if(ADRESH>0x7d)
      adata=4;
   else if(ADRESH>0x6f)
      adata=5;
   else if(ADRESH>0x63)
      adata=6;
   else if(ADRESH>0x5a)
      adata=7;
   else if(ADRESH>0x53)
      adata=8;
   else if(ADRESH>0x4c)
      adata=9;
   else
      adata=0;

   return adata;

}

使用特权

评论回复
qcliu|  楼主 | 2019-6-19 12:57 | 显示全部楼层
主程序

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include "main.h"
#include "t232.h"
#include "adc.h"
#include "lcd.h"

bank1 char temp ;
bank1 char t1 ;
bank1 char dat[6] ;
bank1 char key_data=0 ;


void init_all()
{
 init_adc()  ;
 init_232() ;
 init_lcd() ;
}

使用特权

评论回复
qcliu|  楼主 | 2019-6-19 12:57 | 显示全部楼层
void main()
{
 init_all() ;
 while(1)
 {
  key_data=0 ;
  while(key_data==0)
  {
   key_data=get_key() ;
  }
  temp=get_key() ;
  if(temp==key_data)
  {
   while(key_data)
   {
    key_data=get_key() ;
   }
   t1=temp+0x30 ;
   sprintf(dat,"key%c",t1) ;
   send_str(dat) ;
   
  }
 }
}
将读取的键盘数值传送到上位机!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

3308

帖子

4

粉丝