yl236数码管adc0809c语言

来源:互联网 发布:上海行知学院怎么样 编辑:程序博客网 时间:2024/05/20 05:25

/////////////////////////////////////
//
//   at89s52 adc0809 数码管显示
//   作者:倪建华 QQ:10772919
//   江苏省南通技师学院
//   2014.5.28
//
////////////////////////////////////
sfr P0=0x80; //数码管段码,adc0809数据端
sfr P2=0xa0; //控制脚
//数码管控制脚定义,wr,cs由0变1有效
sbit cs1=P2^0;//段码
sbit cs2=P2^1;//位码
sbit wr=P2^2;//时钟
//adc0809控制脚定义
sbit adc_eoc=P2^3;//转换完成=1,未完成=0
sbit adc_cs=P2^4;//可以直接接地=0
sbit adc_rd=P2^5;//oe=~(rd|cs)
sbit adc_wr=P2^6;//start=ale=~(wr|cs)
//变量定义
unsigned long int v;//电压值
unsigned char v2;//保存adc结果
//延时函数
void ys(unsigned  x)
{
 unsigned char i;
 while(x--)for(i=0;i<120;i++);
}
//adc转换函数
adc()
{
 //准备
 adc_eoc=1;//转换结束标志置位
 adc_rd=1;//禁止总线,防止影响数码管
 adc_wr=1;//禁止写
 adc_cs=0;//cs同时控制wr,rd,可以直接接地
 //启动转换  
 adc_wr=0;//设置通道号,ale高电平锁存通道地址,start上升沿复位
 adc_wr=1;//start下降沿开始转换
 while(adc_eoc==0);//转换结束为高电平
 adc_rd=0;//oe高电平允许输出
 //读取结果
 P0=0xff;//P0作为输入端
 v2=P0;//读取转换结果
 adc_rd=1;//禁止总线,防止影响数码管
}
//8位共阳数码管显示函数
xianshi()
{
 unsigned char code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//段码
 unsigned char i;
 v=(unsigned long int)v2*5000/255;//一定要时行强制类型转换
 //从右扫描到左,从最低位开始扫描
 for(i=0;i<8;i++)
 {
  //位消陷
  P0=0xff;//关闭
  cs2=0;//位有效
  wr=0;wr=1;//时钟
  cs2=1;//位无效
  //送段码
  P0=DSY_CODE[v%10];//送段码
  cs1=0;//段有效
  wr=0;wr=1;//时钟
  cs1=1;//段无效
  //送位码
  P0=~(1<<i);//送位码
  cs2=0;//位有效
  wr=0;wr=1;//时钟
  cs2=1;//位无效
  v/=10;//将v缩小10倍,时间较长
  ys(1);
 }
}
//主函数
main()
{
 while(1)
 {
  adc();//adc转换
  xianshi();//数码管显示
 }
}

 

下面是仿真原理图

0 0
原创粉丝点击