#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P1^0;
sbit lcden=P1^1;
sbit DI=P2^6;
sbit DO=P2^4;
sbit CS=P2^7;
sbit CLK=P2^5;
uchar a=0,b=0,temp=0;
uchar dat=0x00;
uint i=0,k;
uchar code table[]="The Voltage is:";
uchar table1[]="0123456789 .V";
void delay(uint x) //延时0
{
uint p,o;
for(p=x;p>0;p--)
for(o=110;o>0;o--);
}
uchar ADC0832(bit flag)
{
uchar test,adv,i;
test=0x00;
adv=0x00; //定义test、adv 用于对AD转换结果的收集
CS=0; //开AD
DI=1; // 初始化,第一个时钟下沉之前DI须置高
CLK=1;
_nop_();
CLK=0; //第一个时钟下沉
_nop_();
CLK=1;
// DI=1; //通道第一位,以下是在第二、三个时钟下沉前DI送入1、0表示对CHO转换
_nop_();
CLK=0; //第二个时钟下沉
DI=flag; //通道第二位
CLK=1;
_nop_();
CLK=0;
//开始收集转换数据
delay(300);
for(i=0;i<8;i++) //读取前8位的值
{
CLK=1;
delay(1);
CLK=0; //给一个时钟,结束后进行值的收集
adv<<=1; //位移操作
if(DO)
adv|=0x01; //按位或运算,判断是否为数据1//高位在前,低位在后
}
for(i=0;i<8;i++) //读取后8位的值
{
test>>=1; //位移操作,从左向右对test装值,因为前8位是从D7到D0出数据,后8位是D0到D7出数据
if(DO) //第11个时钟下沉是前8位结束也是后8位的开始
test|=0x80; //按位或运算,判断是否为数据
CLK=1;
delay(1);
CLK=0; //给一个时钟,结束后进行值的收集
}
CS=1;
if(adv==test) //比较前8位与后8位是否相同
dat=test;
else return 0;
return dat;
}
void write_com(uchar com) //设置液晶参数
{
P3=com;
rs=0;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void write_data(uchar date) //写入数据
{
P3=date;
rs=1;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void inct() //液晶初始化
{
write_com(0x38);
delay(10);
write_com(0x0c);
delay(10);
write_com(0x06);
delay(10);
write_com(0x01);
delay(10);
}
void deal(float x)
{
uchar temp;
uint a=x*100/255*5; //保留两位小数,并且四舍五入
write_com(0x80+0x49);
delay(10);
write_com(0x04);
delay(10);
write_data(table1[12]); //v
delay(5);
temp=a%10;
write_data(table1[temp]);
delay(5);
a/=10;
temp=a%10;
write_data(table1[temp]);
delay(5);
a/=10;
write_data(table1[11]); //小数点的显示
delay(5);
if(!a) //整数非零判断
{
write_data(table1[0]);
delay(5);
}
while(a)
{
temp=a%10;
write_data(table1[temp]);
delay(5);
a/=10;
}
delay(50);
for(i=0;i<=16;i++) //更新数据
{
write_data(table1[10]);
delay(5);
}
}
void main() //主函数
{
inct();
write_com(0x80);
delay(20);
for(a=0;a<15;a++)
{
write_data(table[a]);
delay(10);
}
while(1)
{
deal(ADC0832(0));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ADC0832.zip (21个子文件)
ADC0832
AD0832程序
AD0832 9KB
AD0832.plg 316B
AD0832.LST 7KB
AD0832.c 3KB
AD0832.hex 4KB
AD0832.uvgui.Administrator 69KB
AD0832.OBJ 9KB
AD0832.uvproj 13KB
AD0832_uvopt.bak 55KB
AD0832_uvproj.bak 14KB
AD0832.lnp 44B
AD0832.uvopt 55KB
AD0832.M51 12KB
ADC0832的protues仿真
Backup Of 液晶显示.DBK 81KB
液晶显示.pdsprj 18KB
Backup Of 液晶显示.pdsbak 18KB
液晶显示.PWI 840B
液晶显示.pdsprj.Z9TAZS5SLZ7FA09.Administrator.workspace 2KB
Last Loaded 液晶显示.DBK 89KB
LISA1.SDF 12KB
液晶显示.DSN 91KB
共 21 条
- 1
资源评论
裴s
- 粉丝: 29
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功