找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1307|回复: 1
收起左侧

SC52X+51单片机pcf8591光敏AD数码管显示

[复制链接]
ID:646540 发表于 2019-11-21 15:41 | 显示全部楼层 |阅读模式



源代码:
#include <reg52.H>
#define uchar unsigned char
#define uint unsigned int
unsigned char dispcount;
sbit a=P1^0;//段控制
sbit b=P1^1;//位控制
sbit LeDen=P1^2;//LED灯控制端
sbit Line=P1^3;//点阵行控制端
sbit lcd_en=P1^7;//1602液晶使能端

sbit rst=P3^4;//DS1302复位端,低电平关闭  
sbit SDA=P3^2;
sbit SCL=P3^3;
unsigned char  Duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char  Weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar temp[8];
uchar tempdata[8];
//bit ack;

///////延时函数//////
void Delay(uint z)
{
   uchar x;
    for(;z>0;z--)
      for(x=123;x>0;x--);
}

void Delayus()
{;;}
//////////启动总线////////
void Start()
{
         SDA=1;
         SCL=1;
         Delayus();
         SDA=0;
         Delayus();
         SCL=0;
}
//////////结束总线///////////
void Stop()
{
         SDA=0;
         SCL=1;
         Delayus();
         SDA=1;
         Delayus();
}
//////非应答函数/////////
void Noack()
{
         SDA=1;
         Delayus();
         SCL=1;
         Delayus();
         SCL=0;
}
void Ack()
{
         SDA=0;
         Delayus();
         SCL=1;
         Delayus();
         SCL=0;
}
/////////数据发送函数//////
void Send(uchar c)
{
         uchar bite;
         for(bite=0;bite<8;bite++)
           {
                  if((c<<bite)&0x80)SDA=1;
                  else SDA=0;
                  SCL=1;
                  Delayus();
                  SCL=0;  
           }
         SDA=1;
         Delayus();
         Delayus();
         Delayus();
}
///////接收函数///////////
uchar Rec()
{
         uchar byte,bite;
         SDA=1;
         for(bite=0;bite<8;bite++)
           {
                  SCL=0;
                  Delayus();
                  SCL=1;
                  Delayus();
                  byte<<=1;
                  if(SDA==1)byte+=1;
           }
         SCL=0;
         Delayus();
         return(byte);
}
//////////显示函数//////////////
void Display(unsigned char FirstBit,unsigned char Num)
{
    static uchar i=0;

        a=1;
    P0=0;
        Delayus();
    a=0;

        b=1;  
    P0=Weima[i+FirstBit];
        Delayus();
    b=0;

    a=1;
    P0=tempdata[i];
        Delayus();
        a=0;

    i++;
    if(i==Num)
    i=0;
}
///////定时器初始化//////////
void Init_Timer0(void)
{
         TMOD |= 0x01;   //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响      
         EA=1;            //总中断打开
         ET0=1;           //定时器中断打开
         TR0=1;           //定时器开关打开
}

///////////读取数值////////
uchar Read(uchar AI)
{
         uchar z;
         Start();
         Send(0x90);
         Ack();
         Send(0x40|AI);        //括号中的参数AI数值从0--3为四路AD的地址,通过改变该参数可以改变输入通道
         Ack();
         Start();
         Send(0x91);
         Ack();
         z=Rec();
         Noack();
         Stop();
         return(z);
}
////////主函数////////////
void Main()
{
   uchar num=0;
   rst=0;//关闭1302时钟
   lcd_en=0;//关闭1602液晶
   P0=0X00; //关闭点阵
   Line=0;
   P0=0XFF; //关闭LED灯
   LeDen=0;

   Init_Timer0();
   while(1)
         {
                  num=Read(0);//括号中的参数0--3为四路AD的地址,通过改变该参数可以改变输入通道         
                                          
                  tempdata[0]=Duanma[num/1000];
                  tempdata[1]=Duanma[num/100];
                  tempdata[2]=Duanma[(num%100)/10];
                  tempdata[3]=Duanma[(num%100)%10];
                  Delay(100);
         }
}

void Timer0(void) interrupt 1
{
         TH0=(65536-2000)/256;    //重新赋值
         TL0=(65536-2000)%256;
         Display(0,8); //显示函数,使用中断显示

}


30、pcf8591一路AD数码管显示.rar

23.62 KB, 下载次数: 16, 下载积分: 黑币 -5

回复

使用道具 举报

ID:585455 发表于 2020-9-13 18:57 | 显示全部楼层
正在做這方面的測試,希望程式碼是可以使用的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表