历史上的今天
今天是:2024年12月30日(星期一)
2021年12月30日 | 基于51单片机的程控放大器
2021-12-30 来源:eefocus
仿真图: 基于数码管显示,具有方波 正弦波 三角波 锯齿波放大功能,放大倍数支持1倍20倍30倍50倍放大

程序设计
#include #include 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 } //写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倍 } } } 文件仅供参考 链接:https://pan.baidu.com/s/1Ro5Ryg7k_E4AuBsxYmeQdA 提取码:cxa5
上一篇:51单片机驱动蜂鸣器发声教程
下一篇:基于51单片机的简易摇号抽奖机器
史海拾趣
|
摘要:随着电力电子技术的发展,将电力电子技术与自动测量技术相结合,便可以使程控电源的设计变得简单可行。介绍了一种用于自动测量的低压程控电源,实现了对电源的实时控制。 关键词:程控电源;单片机 0 引言 ...… 查看全部问答> |
|
模拟信号都好采集,但是有的传感器是BCD码输出的,每个传感器的引脚是24条线输出,有4个,请问怎么设计和选型? 这里面可能要用到数据选择器或者寄存器;还有USB控制器… 查看全部问答> |
|
分到一个任务,要用PCI芯片开发PCI接口板及相关驱动, 我会点c/C++,VC++,硬件会的比较少,只会点 数模电及一些基本电路。 有点没有头绪,不知道您不能根据我的情况给我点指点,能给一个能由浅入深,循序渐进的学习过程。 谢谢,祝一切顺利! … 查看全部问答> |
|
我的手机有一个摄像头,而且可以以USB接口连接到桌面计算机上,作为摄像头使用。请问怎样在WinCE设备里也可以这样用呢?需要怎样开发相关驱动?… 查看全部问答> |
|
诚聘单片机设计工程师: 1,会msp430,有设计经验 2,有msp430 C语言开发经验 3,懂信号处理,会用matlab 4,最好有工作经验1年以上 电话:010-81504648 公司网站:www.safezx.com 注:工作地点北京… 查看全部问答> |
|
VS2005调试目标机上应用程序时,用TCP/IP方式连接总是“设备未就绪”?? 使用VS2005开发win ce的应用程序,在调试的时间用TCP/IP方式连接到开发板,老说“设备未就绪”,该怎么解决啊?… 查看全部问答> |
|
本人刚刚接触嵌入式开发,遇到一些问题请各位高手赐教: 1.如何通过未定义指令陷阱支持协处理器的软件仿真 2.ARM处理器如何利用未定义指令的中断机制仿真浮点向量运算… 查看全部问答> |




