ADCturang.zip

  • HSHLOYAL
    了解作者
  • C/C++
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2017-09-17 11:18
    上传日期
HT66F70的AD转换例程,温度传感器DTH11的例程
ADCturang.zip
  • ADCturang.c
    3.1KB
内容介绍
#include "HT66F70A.h" #define rs _pe0 /*定义12864液晶数据/命令控制端*/ #define rw _pe1 /*定义12864液晶读写控制端*/ #define en _pe2 /*定义12864液晶使能端*/ #define RST _pe3 /*定义12864的复位端*/ void delay_ms(unsigned int num); void LCD_Display(void); void Write_Commond(unsigned char); void Write_Data(unsigned char); void LCD_Init(void); void read_busy(void); void delay_10us(unsigned int num); unsigned char arr0[6]="value:"; unsigned char arr2[10]="0123456789"; //事先定义好要显示的数字 unsigned int convert_value=0; void __attribute((interrupt(0x1c))) ISR_ADC(void) { _adf = 0; convert_value = _adrl; //数据右对齐先读底位 convert_value += _adrh*256; //后读高位 } void ADC_Init(void) { _pac1 = 1; _pas0 = 0x30; _adcr1 = 0x22; //A/D时钟为Fsys/4=2MHz,数据低位对齐 _adcr0 = 0x01; //START位为0,选择通道0,即AN0,ADOFF清零,使能A/D } void main() { unsigned char v1, v2, v3, v4; _cp0c=0x00; _cp1c=0x00; LCD_Init(); //对LCD初始化 ADC_Init(); //对ADC初始化 _ade = 1; _emi = 1; LCD_Display(); while(1) { _start = 1; _start = 0; delay_ms(20); /*计算ADC的转换值,v1:千位,v2:百位,v3:十位,v4:个位*/ v1 = convert_value/1000; v2 = (convert_value/100)%10; v3 = (convert_value/10)%10; v4 = convert_value%10; /*显示ADC的转换值*/ Write_Commond(0x80+3); //从第一行第9位开始显示 Write_Data(arr2[v1]); Write_Data(arr2[v2]); Write_Data(arr2[v3]); Write_Data(arr2[v4]); } } void delay_10us(unsigned int num) { GCC_DELAY(20); } void delay_ms(unsigned int num) { GCC_DELAY(2000); } void LCD_Display(void) { unsigned char i; /*从第一行第一位开始,显示 "value:"*/ Write_Commond(0x80); //0x80为第一行的首地址 for(i=0; i<6; ++i) { Write_Data(arr0[i]); } } void Write_Commond(unsigned char commond) { read_busy(); rs=0; rw=0; en=1; delay_10us(1); _pd=commond; /*给E一个高脉冲将数据送入液晶控制器,完成写入操作*/ en=0; delay_ms(2); } void Write_Data(unsigned char data) { read_busy(); rs=1; rw=0; en=1; delay_10us(1); _pd= data; en=0; delay_ms(2); } void LCD_Init(void) { _pdc = 0x00; //D0~D7数据方向为输出 _pec = 0xf0; delay_ms(5); RST =1; RST =0; RST =1; Write_Commond(0x30); /*功能设定,基本指令*/ Write_Commond(0x30); /*基本指令,8-bit模式,基本指令*/ Write_Commond(0x0c); /*显示开,游标关,反白关*/ Write_Commond(0x01); /*清除显示*/ Write_Commond(0x06); /*进入设定点,游标右移,画面不移动*/ } void read_busy(void) { _pdc = 0xff; _pdpu = 0xff; //设置PB口为上拉输入 while(1) { rs=0; rw=1; en = 0; _pd =0xff; en=1; if((_pd&0x80)==0) //若busy为不忙碌,则跳出循环 break; } _pdc = 0x00; //重设置PB口为输出 }
评论
    相关推荐