找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数字电压表c51

[复制链接]
ID:350563 发表于 2018-6-12 19:26 来自触屏版 | 显示全部楼层 |阅读模式
基于单片机的数字电压表设计C51原程序


#include  
sbit ST=P3^6;
sbit OE=P3^7;
sbit EOC=P3^2;
sbit ZLG7289_pinCS=P1^0;
sbit ZLG7289_pinCLK=P1^1;
sbit ZLG7289_pinDIO=P1^2;
unsigned char ZLG7289_Delay_t=4;
/*
宏定义:ZLG7289_ShortDelay()
功能:短延时
说明:延时ZLG7289_ShortDelay_t*2+8)个机器周期
*/
void ZLG7289_ShortDelay()
{
   unsigned char t=ZLG7289_Delay_t;
   while(--t!=0);
}
/*
宏定义:ZLG7289_LongDelay()
功能:长延时
说明:延时ZLG7289_LongDelay_t*12+8)个机器周期
*/
void ZLG7289_LongDelay()
{
    unsigned char t=ZLG7289_Delay_t*6;
    while(--t!=0);
}



黑龙江职业学院毕业论文(设计)
/*
函数:ZLG7289_SPI_Write()
功能:向SPI总线写入1字节的数据
参数:
dat:要写入的数据
*/
void ZLG7289_SPI_Write(char dat)
{
    unsigned char t=8;
    do
   {
    ZLG7289_pinDIO=(bit)(dat&0x80);
    dat<<=1;
    ZLG7289_pinCLK=1;
    ZLG7289_ShortDelay();
    ZLG7289_pinCLK=0;
    ZLG7289_ShortDelay();
    }while(--t!=0);
}
/*函数:ZLG7289_cmd()
功能:执行ZLG7289纯指令
参数:
cmd:命令字
*/
void ZLG7289_cmd(char cmd)
{
   char sav=IE;
   IE&=0xFA;
   ZLG7289_pinCS=0;
   ZLG7289_LongDelay();
   ZLG7289_SPI_Write(cmd);
   ZLG7289_pinCS=1;
   ZLG7289_LongDelay();
   IE=sav;
}
//复位(清除)指令
void ZLG7289_Reset()
{
  ZLG7289_cmd(0xA4);
}
/*
函数:ZLG7289_cmd_dat()
功能:执行ZLG7289带数据指令
参数:
cmd:命令字
dat:数据
*/
void ZLG7289_cmd_dat(char cmd,char dat)
{
         char sav=IE;
         IE&=0xFA;
         ZLG7289_pinCS=0;
         ZLG7289_LongDelay();
         ZLG7289_SPI_Write(cmd);
         ZLG7289_LongDelay();
         ZLG7289_SPI_Write(dat);
         ZLG7289_pinCS=1;
         ZLG7289_LongDelay();
         IE=sav;
}
/*
函数:ZLG7289_Download()
功能:下载数据
参数:
  mod=0:下载数据且按方式0译码
  mod=1:下载数据且按方式1译码
  mod=2:下载数据且按方式2译码
  x:数码管编号(横坐标),取值0~7
  dp=0:小数点不亮
  dp=1:小数点亮
  dat:要显示的数据
  说明:
  译码方式的具体含义查参考数据手册
*/
void ZLG7289_Download(unsigned char mod,char x, bit dp,char dat)
{
          code char ModDat[3]={0x80,0xC8,0x90};
          char d1;
          char d2;
          if(mod>2)mod=2;
          d1=ModDat[mod];
          x&=0x07;
          d1|=x;
          d2=dat&0x7F;
          if(dp)d2|=0x80;
          ZLG7289_cmd_dat(d1,d2);
}
/*
函数:ZLG7289_Init()
功能:ZLG7289初始化
参数:SPI总线的延时值设置,取值1-40(超出范围可能导致错误)
说明:
t的取值可以参考以下公式:t>=5*f1/f2,其中f1表示89C51的
晶振频率,f2表示ZLG7289的晶振频率
*/
void ZLG7289_Init(unsigned char t)
{
    unsigned char x;
    //I/O口初始化
    ZLG7289_pinCS=1;
    ZLG7289_pinCLK=0;
    ZLG7289_pinDIO=1;
    //延时初始化
    ZLG7289_Delay_t=t;
    //点亮所有数码管
    for(x=0;x<4;x++)
   {
      ZLG7289_Download(1,x,1,8);
   }
}
/***************************************************
***************主函数*******************************
****************************************************/
void main()
{
/*********程序初始化***********/
      unsigned long int sum;
      unsigned char gatdata;
      char i,j,x,outdat;
                int result;
      ST=1;
      OE=1;
      ZLG7289_Reset();
      ZLG7289_Init(4);

/*******初始化结束***************/
     while(1)
    {
                     sum=0;
           gatdata=0;
           for(i=0;i<=5;i++)
             {
              ST=0;
              ZLG7289_ShortDelay();
              ST=1;
              while(1)
                 if(EOC==0)
                   {
                     OE=0;
                     gatdata=P0;
                     OE=1;
                     sum=sum+gatdata;
                                                                      break;
                   }
             }
           result=(sum*1000)/255;
           for(j=0;j<=3;j++)
           {
            outdat=result%10;
            result=result/10;
            if(j==3) x=1;
            else x=0;
            ZLG7289_Download(1,j,x,outdat);
           }
                }
}
0.092.jpg
0.081.jpg
0.062.jpg

f
回复

使用道具 举报

ID:350563 发表于 2018-6-12 19:27 来自触屏版 | 显示全部楼层
好好补补
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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