我贴两个头文件
ADC0832.h
#ifndef _ADC0832_H_
#define _ADC0832_H_
#define uchar unsigned char
#define uint unsigned int
#define channel_0 0x02 //单通道0输入选择
#define channel_1 0x03 //单通道1输入选择
/***************************************************/
/* 位定义 */
/***************************************************/
sbit ADC_DI = P2^3; //数据输入输出复用
sbit ADC_DO = P2^3; //DI和DO端都接在P1.0
sbit ADC_CLK= P2^4; //时钟端
sbit ADC_CS = P2^5; //片选端
sbit ACC0=ACC^0; //通道与输入方式控制字
sbit ACC1=ACC^1; //通道与输入方式控制字
/***************************************************/
/* 函数声明 方便查阅 */
/***************************************************/
//uchar ADC_read(uchar mode); //AD采集
//mode可选 channel_0(通道0) channel_1(通道1) 或 其他方式
/********************************************************************/
/* 启动ADC转换 */
/********************************************************************/
void ADC_start()
{
ADC_CS=1; //一个转换周期开始
_nop_();
ADC_CLK=0;
_nop_();
ADC_CS=0; //CS置0,片选有效
_nop_();
ADC_DI=1; //DI置1,起始位
_nop_();
ADC_CLK=1; //第一个脉冲
_nop_();
ADC_DI=0; //在负跳变之前加一个DI反转操作
_nop_();
ADC_CLK=0;
_nop_();
}
/********************************************************/
/* 函数功能: AD转换 */
/* 选择输入通道,输入信号的模式《单端输入,或差分输入》 */
/* 入口参数: mode(采集通道或方式) */
/* 返回值 : ACC (电压转换后的数字量) */
/********************************************************/
uchar ADC_read(uchar mode)
{
uchar i;
ADC_start(); //启动转换开始
ACC=mode;
ADC_DI=ACC1; //输出控制位1,DI=1,单通道输入,DI=0,差分输入。
ADC_CLK=1; //第二个脉冲
_nop_();
ADC_DI=0;
ADC_CLK=0;
_nop_();
ADC_DI=ACC0; //输出控制位0,DI=0,通道0输入,DI=1,通道1输入。
ADC_CLK=1; //第三个脉冲
_nop_();
ADC_DI=1;
ADC_CLK=0; //输入模式和通道号已经选择完。
ADC_CLK=1; //第四个脉冲
ACC=0;
for(i=8;i>0;i--) //读取8位数据
{
ADC_CLK=0; //脉冲下降沿
ACC=ACC<<1;
ACC0=ADC_DO; //读取DO端数据
_nop_();
_nop_();
ADC_CLK=1;
}
ADC_CS=1; //CS=1,片选无效。
return(ACC);
}
#endif
1602.H
#ifndef _1602_H_
#define _1602_H_
#define uchar unsigned char
#define uint unsigned int
/*******************************************/
/* 位定义 */
/*******************************************/
sbit RS=P2^0; //
sbit RW=P2^1; //
sbit E=P2^2; //
/*******************************************/
/* 函数声明 方便查阅 */
/*******************************************/
//void init(); //1602初始化
//void zhiling(uchar dat); //写命令 第一行地址0x80~0x8f 第二行地址0xc0~0xcf
//void shuju(uchar dat); //写数据 显示为ASCLL码字符
/************************************************/
/* 函数功能: 延时子函数 */
/* 入口参数: ms */
/************************************************/
void delay_1602(uint ms)
{
uchar time;
while(ms--)
{
for(time = 0; time < 125; time++);
}
}
/********************************************/
/* 函数功能: 写命令函数 */
/* 入口参数: dat(待写入的数据) */
/********************************************/
void zhiling(uchar dat)
{
E=0;RS=0;RW=0; //写命令
E=1;
P0=dat;
delay_1602(10); //延时 5ms
E=0;
delay_1602(10); //延时 5ms
}
/********************************************/
/* 函数功能: 写数据函数 */
/********************************************/
void shuju(uchar dat)
{
E=0;RS=1;RW=0; //写数据
E=1;
P0=dat;
delay_1602(10); //延时 5ms
E=0;
delay_1602(10); //延时 5ms
}
/********************************************/
/* 函数功能: 1602初始化函数 */
/********************************************/
void init() //初始化
{
zhiling(0x01); //清屏
zhiling(0x38); //功能设置
zhiling(0x0e); //开/关显示设置
zhiling(0x06); //输入方式设置(左移)
}
#endif
你要的ASC码很简单,这么做,
zhiling(0x80);//地址
shuju(6+'0');//假如你要显示6,6+'0'也就是6加上0的ASC码自然就转换成6的ASC码了
如果是66
你在显示前线换算 66/10 和 66%10,就会分别得到10位和个位,楼主自己举一反三了。