一路AD数码管显示

/*-----------------------------------------------
  名称:IIC协议 PCF8591 AD/DA转换
  论坛:www.doflye.net
  编写:shifang
  修改:无
  内容:使用4路AD中的1路检测外部模拟量输入
------------------------------------------------*/  


/*
   p0   ---> j3
   P2.0 ---> j8 SCL
   P2.1 ---> j8 SDA
   P2.2 ---> j2 B(段码)
   P2.3 ---> j2 A(段码)
   P2.4 ---> j26 K1(独立按键)
   P2.5 ---> j26 K2
*/
#include <reg52.h>                
#include "i2c.h"
#include "delay.h"
#include "display.h"


#define AddWr 0x90   //写数据地址 
#define AddRd 0x91   //读数据地址


sbit KEY1=P2^4;  //定义按键输入端口
sbit KEY2=P2^5;


extern bit ack;
unsigned char ReadADC(unsigned char Chl);
unsigned char KeyScan(void);
bit WriteDAC(unsigned char dat);
/*------------------------------------------------
              主程序
------------------------------------------------*/
main()
{
 unsigned char num=100;
 //unsigned char num1=0;
 Init_Timer0();




while (1)         //主循环
  {
  //num=ReadADC(1);
/*if(KeyScan() == 1)
num++;
if(KeyScan() == 2)
num--;*/


if(!KEY1)  //如果检测到低电平,说明按键按下
    {
DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY1)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY1);//如果确认按下按键等待按键释放,没有则退出
      {
  num++;
}
  }

else if(!KEY2)  //如果检测到低电平,说明按键按下
   {
DelayMs(10); //延时去抖,一般10-20ms
    if(!KEY2)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY2);//如果确认按下按键等待按键释放,没有则退出
      {
  num--;
}
  }


TempData[0]=dofly_DuanMa[num/100];  
TempData[1]=dofly_DuanMa[(num%100)/10];
TempData[2]=dofly_DuanMa[(num)%10];
//主循环中添加其他需要一直工作的程序
DelayMs(100);
  
 /*num=ReadADC(0);
 //num*=2;
 TempData[0]=dofly_DuanMa[num/51]+0x80; 
 num1 = (num%51)*2; 
 if(num1 == 0)
  num1++;  
 TempData[1]=dofly_DuanMa[(num1-1)/10];
 TempData[2]=dofly_DuanMa[(num1-1)%10];
 //主循环中添加其他需要一直工作的程序
 DelayMs(100);


 num=ReadADC(3);
 TempData[4]=dofly_DuanMa[num/51]+0x80;    
 num1 = (num%51)*2; 
 if(num1 == 0)
  num1++;  
 TempData[5]=dofly_DuanMa[(num1-1)/10];
 TempData[6]=dofly_DuanMa[(num1-1)%10];
 //主循环中添加其他需要一直工作的程序
 DelayMs(100);*/
  }
}
/*------------------------------------------------
             读AD转值程序
输入参数 Chl 表示需要转换的通道,范围从0-3
返回值范围0-255
------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
 {
   unsigned char Val;
   Start_I2c();               //启动总线
   SendByte(AddWr);             //发送器件地址
     if(ack==0)return(0);
   SendByte(0x40|Chl);            //发送器件子地址
     if(ack==0)return(0);
   Start_I2c();
   SendByte(AddWr+1);
      if(ack==0)return(0);
   Val=RcvByte();
   NoAck_I2c();                 //发送非应位
   Stop_I2c();                  //结束总线
  return(Val);
 }
/*------------------------------------------------
               写入DA转换数值
输入参数:dat 表示需要转换的DA数值,范围是0-255
------------------------------------------------*/
/*bit WriteDAC(unsigned char dat)
{
   Start_I2c();               //启动总线
   SendByte(AddWr);             //发送器件地址
     if(ack==0)return(0);
   SendByte(0x40);            //发送器件子地址
     if(ack==0)return(0);
   SendByte(dat);             //发送数据
     if(ack==0)return(0);
   Stop_I2c();  
}*/


 unsigned char KeyScan(void)
{  
if(!KEY1)  //如果检测到低电平,说明按键按下
    {
DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY1)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY1);//如果确认按下按键等待按键释放,没有则退出
      {
  return 1;
}
  }

else if(!KEY2)  //如果检测到低电平,说明按键按下
    {
DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY2)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY2);//如果确认按下按键等待按键释放,没有则退出
      {
  return 2;
}
  }

/*else if(!KEY3)  //如果检测到低电平,说明按键按下
    {
DelayMs(10); //延时去抖,一般10-20ms
//delay(30000);
     if(!KEY3)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY3);//如果确认按下按键等待按键释放,没有则退出
      {
  return 3;
}
  }
}  
else if(!KEY4)  //如果检测到低电平,说明按键按下
    {
DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY4)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY4);//如果确认按下按键等待按键释放,没有则退出
      {
  return 4;
}
  }
}  
else if(!KEY5)  //如果检测到低电平,说明按键按下
    {
DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY5)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY5);//如果确认按下按键等待按键释放,没有则退出
      {
  return 5;
}
  }

else if(!KEY6)  //如果检测到低电平,说明按键按下
    {
DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY6)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY6);//如果确认按下按键等待按键释放,没有则退出
      {
  return 6;
}
  }

else if(!KEY7)  //如果检测到低电平,说明按键按下
    {
DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY7)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY7);//如果确认按下按键等待按键释放,没有则退出
      {
  return 7;
}
  }

else if(!KEY8)  //如果检测到低电平,说明按键按下
    {
DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY8)     //再次确认按键是否按下,没有按下则退出
  {
        while(!KEY8);//如果确认按下按键等待按键释放,没有则退出
      {
  return 8;
}
  }
}*/  
else
    return 0;
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值