STC12C5A60(32)S2单片机AD采样-LCD1602液晶显示程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
lcd_write_com(0x06); //写一个字符后,光标自动加一
lcd_write_com(0x01); //清屏
}
/******显示定位子函数(行,列)******/
AURX1 |= 0x04;//转换结果存储方式:高2位放ADC_RES,低8位放ADC_RESL
P1ASF = 1<<n;//将P1.n设为ADC采样功能
}
//***第n通道ADC采样函数***//
uint ADC_GET(uchar n)
{
uint adc_data;
n &= 0x07;//确保是第0~7通道
ADC_CONTR &= 0xef; //转换结束标志清0
return adc_data; //adc_data的值(0~1023)
}
/***如果需要释放P1口为普通IO口,则需要本函数***/
/*
void ADC_END()
{
P1ASF = 0;
P1_CONTR = 0;
}
*/
/********延时子函数:xms********/
void lcd_write_data(uchar lcd_data)
{
lcd_data_port = lcd_data; //数据送到数据接口
lcd_rs = 1;//选择数据
lcd_rw = 0;//选择写
lcd_en = 0;
delay_ms(1);
lcd_en = 1;
delay_ms(1);
void delay_ms(uint x)
{
uint y;
for(;x>0;x--)
for(y=0;y<125;y++);
}
/*****以下是与LCD1602显示相关的定义和函数声明*****/
#define lcd_data_port P0//1602数据口接P0
sbit lcd_rs = P2^6;//RS接P2.6(=0,是命令;=1,是数据)
sbit lcd_rw = P2^5;//RW接P2.5(=0,是写;=1,是读)
sbit lcd_en = P2^7;//EN接P2.7
void lcd_write_com(uchar lcd_com);//写命令子函数
void lcd_write_data(uchar lcd_data);//写数据子函数
/****************************************************
**STC12C5A32S2或STC12C5A60S2等单片机ADC采样功能示例**
1、P1口为8路10位AD转换口
2、用LCD1602显示:数据口为P0,RW接P2.5,
RS接P2.6,EN接P2.7
sfr ADC_RESL = 0xBE;//AD转换结果寄存器低位
sfr AURX1 = 0xA2;//AD转换结果存储方式控制位
/***P1ASF寄存器:8位,对应P1口8根线,用于指定那根线用作ADC功能
******哪根线用作ADC就应置相应的位为1,注意:不能位寻址******/
#define ADC_POWER 0x80//ADC电源开
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//延时4个时钟周期左右
while(!((ADC_CONTR & ADC_FLAG) == 0x10))//等待转换结束
adc_data = (ADC_RES & 0x03)* 256 + ADC_RESL; //转换结果计算
ADC_RES = 0;//清存放结果存储器
ADC_RESL = 0;//清存放结果存储器
ADC_CONTR = 0;//AD转换控制寄存器清0,以便重置
ADC_CONTR |= (ADC_POWER|ADC_SPEED|n|ADC_START);//打开AD转换电源,设定转换速度,设定通道号,AD转换开始
#define ADC_SPEED 0x40//设置为180个周期,ADC一次
#define ADC_START 0x08//ADC启动控制位设为开
#define ADC_FLAG 0X10//ADC结束标志位
//***第n通道ADC初始化函数***//
void ADC_int(uchar n)
{
n &= 0x07;//确保是第0~7通道
{
lcd_data_port = lcd_com;//指令送到数据接口
lcd_rs = 0;//选择命令
lcd_rw = 0;//选择写
lcd_en = 0;
delay_ms(1);
lcd_en = 1;
delay_ms(1);
lcd_en = 0;
}
/********写数据子函数********/
void delay_ms(uint x);//ms延时子函数
/*****stc12c5a32s2相关的寄存器说明*****/
sfr P1ASF = 0x9D;//P1口模数转换功能控制寄存器
sfr ADC_CONTR = 0xBC;//AD转换控制寄存器
sfr ADC_RESFra Baidu bibliotek= 0xBD;//AD转换结果寄存器高位
3、亲手编写、亲自调试,完全可行
*****************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
lcd_en = 0;
}
/********LCD1602液晶初始化********/
void lcd_int()
{
lcd_rs = 0;//选择命令
lcd_rw = 0;//选择写
lcd_en = 0;
lcd_write_com(0x38); //设1602工作于16*2、5*7,8位数据接口模式
lcd_write_com(0x0c); //开显示,不显示光标
void lcd_int();//1602初始化
void lcd_locate(uchar x,uchar y);//显示定位(行,列)
void lcd_4_char(uint data_4char);//显示4位整型函数
/********写命令子函数********/
void lcd_write_com(uchar lcd_com)
相关文档
最新文档