找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1745|回復(fù): 0
收起左側(cè)

AD轉(zhuǎn)換程序

[復(fù)制鏈接]
ID:290896 發(fā)表于 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位結(jié)果存儲(chǔ)
sfr ADC_RESL=0xBE;    //ADC低2位
sfr P1ASF=0x9D;       //P1口功能控制寄存器P1ASF

#define ADC_POWER   0x80   //ADC電源控制位,0:關(guān)閉,1:打開(kāi)
#define ADC_FLAG    0x10   //ADC結(jié)束標(biāo)志位
#define ADC_START   0x08   //ADC啟動(dòng)控制位
#define ADC_SPEEDLL 0x00   //ADC轉(zhuǎn)換速度

#define CLEAR_SCREEN 0x01   //清屏指令:清屏且AC值為00H
#define AC_INIT   0x02   //將AC設(shè)置為00H。且游標(biāo)移到原點(diǎn)位置  
#define CURSE_ADD  0x06   //設(shè)定游標(biāo)移到方向及圖像整體移動(dòng)方向(默認(rèn)游標(biāo)右移,圖像整體不動(dòng))  
#define FUN_MODE  0x30   //工作模式:8位基本指令集  
#define DISPLAY_ON  0x0c   //顯示開(kāi),顯示游標(biāo),且游標(biāo)位置反白
#define DISPLAY_OFF  0x08   //顯示關(guān)  
#define CURSE_DIR  0x14   //游標(biāo)向右移動(dòng):AC=AC+1
#define SET_CG_AC  0x40   //設(shè)置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[]={     //便于根據(jù)漢字坐標(biāo)求出地址
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寫(xiě)指令
void write_12864dat(uchar dat);        //12864寫(xiě)數(shù)據(jù)
void delay_ms(uint z);

/***************12864寫(xiě)指令*************/
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寫(xiě)數(shù)據(jù)*************/
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[]="當(dāng)前阻";        




}

/***************初始化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,"顯示");
   }
}


















回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表