ADC0831模数转换程序
/*ADC0831模数转换程序,运行程序后,调节下电位器,你看看数据会如何变化*/
#include
#include
sbit SCL2=P1^3; //SCL2定义为P1口的第3位脚,连接ADC0831SCL脚 sbit SDA2=P1^4; //SDA2定义为P1口的第4位脚,连接ADC0831SDA脚 sbit CS2=P1^6; //CS2定义为P1口的第4位脚,连接ADC0831CS脚 sbit RST = P1^5;// DS1302片选,因这两芯片采用同一数据脚(SDA,SCL),所以我们要定义它,将DS1302片选关掉,否则发生冲突
code unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管 0-9表
unsigned char l_tmpdate[]={0,0,0};//定义数组变量
void delay();//延时子函数,5个空指令
void display(unsigned char *lp,unsigned char lc);//数字的显示函数;lp为指向数组的地址,lc为显示的个数
unsigned char ad0831read(void); //定义该函数为读取ADC0831的数据
void main(void) //入口函数
{
unsigned char i=254,tmp;
RST=0;
while(1){
i++;
if(i==255){
tmp=ad0831read(); //这里为循环255个周期读取一次0831,因CPU运行比较快,没必要每次循环都去读取
i=0;
l_tmpdate[0]=tmp/100; //得到百位
tmp=tmp%100;
l_tmpdate[1]=tmp/10; //十位
l_tmpdate[2]=tmp%10; //个位 //因读到的数据为8位的二进制数,即0~255,我们将其分开放入l_tmpdate数组中
}
display(l_tmpdate,3); //输出显示
}
}
void display(unsigned char *lp,unsigned char lc)//显示
{
unsigned char i; //定义变量
P2=0; //端口2为输出
P1=P1&0xF8; //将P1口的前3位输出0,对应138译门输入脚,全0为第
一位数码管
for(i=0;i
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
,再来读本函数,
主要是对应时序图来理解
{ //本函数是模拟0831的串口协议进行的,当你了解用
软件去模拟一个端口的协议
//以后,对于一个硬件这样的端口就简单多了
unsigned char i=0,tmp=0;
SDA2=1;
CS2=0;
_nop_();
_nop_();
SCL2=0;
_nop_();
_nop_();
SCL2=1;
_nop_();
_nop_();
SCL2=0;
_nop_();
_nop_();
SCL2=1;
_nop_();
_nop_();
SCL2=0;
_nop_();
_nop_();
for(i=0;i<8;i++){
tmp<<=1;
if(SDA2)
tmp++;
SCL2=1;
_nop_();
_nop_();
SCL2=0;
_nop_();
_nop_();
}
CS2=1;
return tmp; }