宽带放大器单片机控制部分C语言代码
根据给定文件的信息,我们可以总结出以下几个主要的知识点: ### 1. 文件概述 这是一个用于控制宽带放大器的单片机程序,采用 C 语言编写。该程序主要用于2009年的电子设计竞赛中的某个题目(标记为 C 题)。程序的功能包括键盘输入、数字显示、以及对 DAC0832 的控制。 ### 2. 关键宏定义 - **COM_8279** 和 **DAT_8279**:分别定义了与 8279 接口芯片通信的命令寄存器和数据寄存器的地址。 - **DAC0832**:定义了 DAC0832 芯片的数据寄存器地址。 - **uchar** 和 **uint**:自定义类型,分别为 `unsigned char` 和 `unsigned int` 类型的别名,用于节省代码空间。 - **sint**:自定义类型,为 `signed int` 类型的别名。 - **clflag**、**CS_187**、**SDO_187** 和 **SCK_187**:定义了单片机的几个引脚作为特殊功能寄存器位。 ### 3. 变量定义 - **anjian**:存储从 8279 接口读取的按键值。 - **ad_value** 和 **gain_value**:分别表示 ADC 采样值和增益值。 - **diss[]**:定义了一个用于存储显示数据的数组。 - **display[]**:定义了一个用于存储数字显示码的数组。 - **gainh**、**gainl**、**flag_gi**、**flag_input** 和 **flag_gainhl**:用于控制增益值的高低位及状态标志。 - **gainhl[]**:一个长度为 2 的数组,用于存储增益值的高低位。 - **rsm**:定义了一个浮点型变量,用于存储计算结果。 - **zd** 和 **flag_zd**:用于控制显示的标志。 ### 4. 函数实现 - **init()**:初始化函数,配置中断、8279 的工作模式和波特率等。 - **delay()**:延时函数,用于模拟等待时间。 - **deky()**:检查 8279 FIFO 中是否有数据的函数。 - **jianzhi(uchar h)**:根据输入值选择对应的显示码。 - **int1() interrupt 2**:外部中断服务程序,用于处理按键输入。 - **disp()**:显示函数,负责将显示数据写入 8279 RAM。 - **da0832(uchar da_zhi)**:虽然未完全给出,但可推测是控制 DAC0832 的函数,用于将数字信号转换为模拟信号输出。 ### 5. 8279 接口应用 程序中通过 8279 接口实现了键盘扫描和 LED 数码管显示。8279 是一款常用的键盘和显示器接口芯片,它能够自动完成键盘扫描和显示器刷新的工作,简化了单片机程序的设计。 ### 6. DAC0832 应用 DAC0832 是一个 8 位电压输出型数模转换器,常用于将数字信号转换成模拟信号。在本程序中,DAC0832 用于输出模拟电压,控制宽带放大器的增益。 ### 总结 该程序通过一系列函数和变量定义,实现了对宽带放大器的单片机控制。通过 8279 接口进行键盘扫描和数码管显示,通过 DAC0832 进行数模转换来控制放大器的增益。该程序不仅展示了单片机控制的基本原理和技术,还体现了电子设计竞赛中常见的硬件接口技术的应用。
宽频放大器,有以下功能:
预置增益,增益加/减,显示输出电压有效值,自动增益
显示有效值.
增益输入及加减
自动增益没有实现
7/27
************************************************/
#include<REG51.H>
#include<ABSACC.H>
#define COM_8279 XBYTE[0X3FFF]
#define DAT_8279 XBYTE[0X3FFE]
#define DAC0832 XBYTE[0X7fff]
#define uchar unsigned char
#define uint unsigned int
#define sint signed int
sbit clflag=ACC^7;
sbit CS_187=P1^4;
sbit SDO_187=P1^5;
sbit SCK_187=P1^3;
/***********************************************
anjian=1,2,3,4,5,6 (对应8279 FIFO内低6位数值:1,2,3,8,9,10
分别对应: 自动增益 ,取消增益
************************************************/
uchar anjian;
uint ad_value=0,gain_value=10;
uchar diss[8]={0x3f,0x06,0x00,0x00,0x00,0x00,0x00,0x00}; //显示数组
uchar display[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数字数组
uchar t; // 为按键判断出在display[t]中的位置
uchar gainh,gainl,flag_gi=0,flag_input=0,flag_gainhl;
uchar gainhl[2]={0x00,0x00};
uchar flag=0;
float rsm;
uchar zd,flag_zd=0;
void init()
{
//其他初始化待定
EA=1;
EX1=1;
COM_8279=0xd1; //总清除命令
do
{
ACC=COM_8279;
}while(clflag==1); //等待清除
COM_8279=0x00; //显示方式:8 位,左入口;键盘方式:编码扫描键盘,双键锁定
COM_8279=0x3f; //分频次数31 ,8279工作频率在100KHz左右
剩余12页未读,继续阅读
- christmas_hangzhou2013-04-01可以作为参考,但是和网上的大同小异。
- 粉丝: 1
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C++的East Zone DSTADSO Robotics Challenge 2019机器人控制系统.zip
- (源码)基于Arduino平台的焊接站控制系统.zip
- (源码)基于ESPboy系统的TZXDuino WiFi项目.zip
- (源码)基于Java的剧场账单管理系统.zip
- (源码)基于Java Swing的船只资料管理系统.zip
- (源码)基于Python框架的模拟购物系统.zip
- (源码)基于C++的图书管理系统.zip
- (源码)基于Arduino的简易温度显示系统.zip
- (源码)基于Arduino的智能电动轮椅系统.zip
- (源码)基于C++的数据库管理系统.zip