找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3523|回复: 3
收起左侧

基于51单片机和Proteus仿真的手动程控放大器

[复制链接]
ID:517871 发表于 2019-5-9 17:22 | 显示全部楼层 |阅读模式
#include <AT89X52.h>
#include <intrins.h>
sbit sbF1 = P2 ^ 0;   //不进行放大处理
sbit sbF20 = P2 ^ 1;  //放大20倍
sbit sbF30 = P2 ^ 2;  //放大30倍
sbit sbF50 = P2 ^ 3;  //放大50倍

sbit sbDIN = P3 ^ 0;                        //MAX7219的数据引脚
sbit sbLOAD = P3 ^ 1;                      //MAX7219的控制引脚
sbit sbCLK = P3 ^ 2;                       //MAX7219的时钟引脚

//显示缓冲区定义
unsigned char Disp_Buffer[8]=            //MAX7219的输出缓冲
{
        0,0,0,0,0,0,0,0
};
unsigned char Disp_Buffer1[8]=            //MAX7219的输出缓冲
{
        0,0,0,0,0,0,0,1
};
unsigned char Disp_Buffer20[8]=            //MAX7219的输出缓冲
{
        0,0,0,0,0,0,2,0
};
unsigned char Disp_Buffer30[8]=            //MAX7219的输出缓冲
{
        0,0,0,0,0,0,3,0
};
unsigned char Disp_Buffer50[8]=            //MAX7219的输出缓冲
{
        0,0,0,0,0,0,5,0
};

void DelayMS(unsigned int ms)              //毫秒级延时函数
{
        unsigned int i,j;
        for( i=0;i<ms;i++)
                for(j=0;j<1141;j++);       
}
//写MAX7219函数,Addr为MAX7219的内部寄存器地址,Dat为待写入的数据
void Write7219(unsigned char Addr,unsigned char Dat)
{
        unsigned char i;
        sbLOAD = 0;                                         
        for(i=0;i<8;i++)                               //先送出8位地址
        {
                 sbCLK = 0;                                   //时钟拉低
                Addr <<= 1;                                  //移位送出地址
                sbDIN        = CY;                                    //送出数据
                sbCLK = 1;                                   //时钟上升沿
                _nop_();
                _nop_();
                sbCLK = 0;                                   
        }
        for(i=0;i<8;i++)                              //再送出8位数据
        {
                 sbCLK = 0;
                Dat <<= 1;                                  //移位送出数据
                sbDIN        = CY;
                sbCLK = 1;
                _nop_();
                _nop_();
                sbCLK = 0;       
        }
        sbLOAD = 1;
}
//MAX7129的初始化函数
void Initialise7219()
{
        Write7219(0x09,0xff);                 //编码模式寄存器
        Write7219(0x0a,0x07);                 //显示亮度控制
        Write7219(0x0b,0x07);                 //扫描控制
        Write7219(0x0c,0x01);                 //关闭模式控制寄存器设置
}

void  Wobbling ()   //延时程序防止按键抖动
{
  unsigned int i;
  for(i=0;i<1000;i++);
}

void main()
{
  unsigned char i;
        Initialise7219();                     //首先初始化MAX7129
        DelayMS(1);                         //延时1毫秒
  for(i=0;i<8;i++)
        {
                 Write7219(i+1,Disp_Buffer[i]);      //将显示缓冲区内的数据循环送出
        }
  P1 = 0x00;    //初始化端口
  P2 = 0xFF;  
  P1 = 0x11;   //再不按键的情况下默认为不进行放大处理
  while(1)
  {
  if (sbF1 == 0) //判断是否按下按键
  {
    Wobbling();   //时间延时程序,软件防抖动
    if( sbF1 == 0)  //确定按下按键
    {
      P1 = 0x11;   //放大1倍
      for(i=0;i<8;i++)
            {
                     Write7219(i+1,Disp_Buffer1[i]);      //显示放大1倍
            }
    }
  }
  if(sbF20 == 0)  //判断是否按下按键         
  {
    Wobbling();   //时间延时程序,软件防抖动
    if(sbF20 == 0) //确定按下按键
    {            
      P1 = 0x22;   //放大20倍
      for(i=0;i<8;i++)
            {
                     Write7219(i+1,Disp_Buffer20[i]);      //显示放大20倍
            }
     }            
  }
  if(sbF30 == 0) //判断是否按下按键         
  {
    Wobbling();   //时间延时程序,软件防抖动
    if(sbF30 == 0) //确定按下按键   
    {         
      P1 = 0x44;   //放大30倍  
      for(i=0;i<8;i++)
            {
                     Write7219(i+1,Disp_Buffer30[i]);      //显示放大20倍
            }
     }            
  }
  if(sbF50 == 0) //判断是否按下按键         
  {
    Wobbling();   //时间延时程序,软件防抖动
    if(sbF50 == 0)//确定按下按键  
    {         
      P1=0x88;  //放大50倍   
      for(i=0;i<8;i++)
            {
                     Write7219(i+1,Disp_Buffer50[i]);      //显示放大20倍
            }
     }         
  }
}
}


放大器.png

基于51单片机和Proteus仿真的手动程控放大器.zip

73.67 KB, 下载次数: 72, 下载积分: 黑币 -5

回复

使用道具 举报

ID:207534 发表于 2020-5-12 11:04 来自手机 | 显示全部楼层
为啥放大倍数好像只有几倍
回复

使用道具 举报

ID:771983 发表于 2020-6-30 09:30 来自手机 | 显示全部楼层
图不行啊
回复

使用道具 举报

ID:806551 发表于 2021-10-13 16:21 | 显示全部楼层
为啥放大倍数好像只有几倍
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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