找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1457|回复: 0
打印 上一主题 下一主题
收起左侧

AD转换程序

[复制链接]
跳转到指定楼层
楼主
ID:290896 发表于 2018-3-12 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 082576 于 2018-3-12 17:21 编辑

#include <reg52.h>
#include "intrins.h"

//#define  12000000L
//#define BAUD 9600
#define uchar unsigned char
#define uint  unsigned int

sfr ADC_CONTR=0xBC;   //ADC控制寄存器
sfr ADC_RES=0xBD;     //ADC高8位结果存储
sfr ADC_RESL=0xBE;    //ADC低2位
sfr P1ASF=0x9D;       //P1口功能控制寄存器P1ASF

#define ADC_POWER   0x80   //ADC电源控制位,0:关闭,1:打开
#define ADC_FLAG    0x10   //ADC结束标志位
#define ADC_START   0x08   //ADC启动控制位
#define ADC_SPEEDLL 0x00   //ADC转换速度

#define CLEAR_SCREEN 0x01   //清屏指令:清屏且AC值为00H
#define AC_INIT   0x02   //将AC设置为00H。且游标移到原点位置  
#define CURSE_ADD  0x06   //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)  
#define FUN_MODE  0x30   //工作模式:8位基本指令集  
#define DISPLAY_ON  0x0c   //显示开,显示游标,且游标位置反白
#define DISPLAY_OFF  0x08   //显示关  
#define CURSE_DIR  0x14   //游标向右移动:AC=AC+1
#define SET_CG_AC  0x40   //设置AC,范围为:00H~3FH
#define SET_DD_AC  0x80
#define LCD_DATA  P0

sbit gain=P2^0;   /
sbit SW=P2^1; /
sbit rs = P2^7;
sbit rw = P2^6;
sbit LCD_EN  = P2^5;
sbit PSB = P2^4;

/***************汉字地址表***************************
uchar code addr_tab[]={     //便于根据汉字坐标求出地址
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,};//第四行汉字位置*/




void InitADC();                                                                                                        //ADC初始化
uint GetADCResult(uchar ch);                                                                                                                                                                        
void delay(uint ms);
void write_12864com(uchar com);        //12864写指令
void write_12864dat(uchar dat);        //12864写数据
void delay_ms(uint z);

/***************12864写指令*************/
void write_12864com(uchar com)
{
rs = 0;
rw = 0;
LCD_EN = 0;
P0 = com;
delay_ms(5);
LCD_EN = 1;
delay_ms(5);
LCD_EN = 0;
}

/***************12864写数据*************/
void write_12864dat(uchar dat)
{
rs = 1;
rw = 0;
LCD_EN=0;
P0 = dat;
delay_ms(5);
LCD_EN = 1;
delay_ms(5);
LCD_EN = 0;

}

void display()
{
  uchar code table1[]="欢迎使用";
  uchar code table2[]="当前阻";        




}

/***************初始化LCD*************/
void Lcd_Init()
{
  PSB=1;  
  write_12864com(0x30);//选择基本指令集
  write_12864com(0x0e);        
  write_12864com(0x01);
  write_12864com(0x80);
}


/****************ADC取值*********************/
uint GetADCResult(uchar ch)
{
          ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
          _nop_();                                        //Must wait before inquiry
          _nop_();
          _nop_();
          _nop_();
          while (!(ADC_CONTR & ADC_FLAG));                //Wait complete flag
          ADC_CONTR &= ADC_FLAG;                          //Close ADC

          return (ADC_RES*4 + ADC_RESL);                  //Return ADC result
}


/****************初始化ADC特殊功能寄存器*********************/
void InitADC( )
{
          P1ASF = P1 | 0x3f;                //Set  P1.0 - P1.5 as analog input port
          ADC_RES  = 0;                  //Clear previous result
                  ADC_RESL = 0;
          ADC_CONTR = ADC_POWER | ADC_SPEEDLL ;
          delay(20);                      //ADC power-on delay and Start A/D conversion
}




void delay_ms(uint ms)
{
        uint i,j;
        for(i=ms;i>0;i--)
                for(j=110;j>0;j--);
}

void main()
{
   Lcd_Init();
   while(1)
   {
   //hanzi_Disp(0,0,"显示");
   }
}


















分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表