一片从游戏器上拆下来的KC89C72。MCU使用的51。

/* \file main.c - Keil C v8.02*   Project id: 00595cf9-8de6-4a57-b940-eb0347ac9e13** \details This file is part of the KC89C72 project.** History:*   Date        Auther      Description*   -------------------------------------------------------------*   2013-01-06  Perry       Initial created.** Note:* This source code can be used, modified, and redistributed under the* terms of the license agreement that is included in the lcd_h018in01 package* By continuing to use, modify, or redistributed this code you indicate* that you have read the license and understand and accept it fully.*/#include "main.h"#define PSG_KC89C72_REG_R0              0x00  // 通道A频率设置,低8位。
#define PSG_KC89C72_REG_R1              0x01  // 通道A频率设置,高4位。
#define PSG_KC89C72_REG_R2              0x02  // 通道B频率设置,低8位。
#define PSG_KC89C72_REG_R3              0x03  // 通道B频率设置,高4位。
#define PSG_KC89C72_REG_R4              0x04  // 通道C频率设置,低8位。
#define PSG_KC89C72_REG_R5              0x05  // 通道C频率设置,高4位。
#define PSG_KC89C72_REG_R6              0x06  // 噪音频率设置,5位。
#define PSG_KC89C72_REG_R7              0x07  // I/O端口与混音设置。
#define PSG_KC89C72_REG_R8              0x08  // 通道A电平设置。
#define PSG_KC89C72_REG_R9              0x09  // 通道B电平设置。
#define PSG_KC89C72_REG_RA              0x0A  // 通道B电平设置。
#define PSG_KC89C72_REG_RB              0x0B  // 包络频率。微调,8位。
#define PSG_KC89C72_REG_RC              0x0C  // 包络频率。粗调,8位。
#define PSG_KC89C72_REG_RD              0x0D  // 包络形状。低4位(CONT/ATT/ALT/HOLD)。
#define PSG_KC89C72_REG_RE              0x0E  // 扩展/外设端口A数据寄存器,8位。
#define PSG_KC89C72_REG_RF              0x0F  // 扩展/外设设口B数据寄存器,8位。#define chip_addr  PSG_KC89C72_DA
#define chip_data  PSG_KC89C72_DAsbit key = P1^0;sbit bc1      = PSG_KC89C72_BC1;
sbit bc2      = PSG_KC89C72_BC2;
sbit bdir     = PSG_KC89C72_BDIR;
sbit sel      = PSG_KC89C72_SEL;
sbit a8       = PSG_KC89C72_A8;
sbit a9       = PSG_KC89C72_A9;
sbit reset    = PSG_KC89C72_RESET;
sbit clk      = PSG_KC89C72_CLK;#define set_addr_mode() \bc1 = 1; \bc2 = 1; \bdir = 1; \a8 = 1; \a9 = 0#define set_read_mode() \bc1 = 1; \bc2 = 1; \bdir = 0; \a8 = 0#define set_write_mode() \bc1 = 0; \bc2 = 1; \bdir = 1; \a8 = 0#define set_inactive_mode() \bc1 = 0; \bc2 = 1; \bdir = 0; \a8 = 0void chip_write(uint8 reg, uint8 val)
{set_addr_mode();delay_xms(1);chip_addr = reg & 0xf;delay_xms(1);set_write_mode();delay_xms(1);chip_data = val;delay_xms(1);set_inactive_mode();delay_xms(1);chip_data = 0xff;
}void chip_reset()
{reset = 0;delay_xms(1);reset = 1;
}void chip_init()
{chip_reset();sel = 1;chip_write(PSG_KC89C72_REG_R0, 150);chip_write(PSG_KC89C72_REG_R1, 10);chip_write(PSG_KC89C72_REG_R2, 0xff);chip_write(PSG_KC89C72_REG_R3, 0xf);chip_write(PSG_KC89C72_REG_R4, 8);chip_write(PSG_KC89C72_REG_R5, 0);chip_write(PSG_KC89C72_REG_R6, 1);chip_write(PSG_KC89C72_REG_R7, 0xf8);chip_write(PSG_KC89C72_REG_R8, 0x2);chip_write(PSG_KC89C72_REG_R9, 0xf);chip_write(PSG_KC89C72_REG_RA, 0x1f);chip_write(PSG_KC89C72_REG_RB, 0x28);chip_write(PSG_KC89C72_REG_RC, 0x0);chip_write(PSG_KC89C72_REG_RD, 0xe);
}void main()
{uint8 vol = 0xf;chip_init();while (1){if (!key){delay_xms(500);if (vol = 0)vol = 0xf;vol--;chip_write(PSG_KC89C72_REG_R1, vol & 0xf);chip_write(PSG_KC89C72_REG_R3, vol & 0xf);chip_write(PSG_KC89C72_REG_R5, vol & 0xf);}}
}// 延时子程序毫秒单位。
void delay_xms(uint16 ms)
{while (ms--)delay_xus(109);
}// 延时子程序微秒单位。
void delay_xus(uint16 us)
{while (us--);
}

芯片KC89C72 可编程声音发生器(PSG)相关推荐

  1. 脉冲发生器c语言程序,可编程脉冲信号发生器的.doc

    可编程脉冲信号发生器的 可编程脉冲信号发生器的设计 摘 要 基于单片机的可编程脉冲信号发生器,通过4x4的非编码矩阵键盘键入脉冲信号的指标参数频率.占空比和脉冲个数,在单片机的控制处理下发出满足信号指 ...

  2. 声音发生器、pwm、占空比

    目录 一.声音发生器包含哪些寄存器 二.pwm 三.占空比 一.声音发生器包含哪些寄存器 声音控制寄存器(SGCRn) 频率寄存器(SGFRn) 振幅寄存器(SGARn) 音调寄存器(SGTRn) 音 ...

  3. Keil里找不到芯片的flash编程算法怎么办?

    1.首先找到烧录芯片的FLM文件 2.将文件复制粘贴在keil应用软件文件路径下的flash文件夹中 3.重新点击魔术棒,添加上即可

  4. 测试可编程波形发生器 AD9833

    测试AD9833 1. 该模块是购置于淘宝 GY9833: Price: 6.85. AD9833购买模块以及测试实验 2. 测试实验板 (1) Hardware AltiumDesign\Test\ ...

  5. STM32F103CB 芯片FLASH DOWNLOAD编程地址范围设置相关问题记录

    程序模式:IAP+APP 地址分配:IAP:8000000H-8003FFFH,APP:8004000H-801FFFFH FLASH DOWNLOAD地址设置:IAP:8000000H-801FFF ...

  6. 暖芯迦推出可编程神经调控平台芯片-元神ENS001

    一.简介 生物芯片研发商暖芯迦(Nanochap)于近日发布了一款全新的专为神经调控应用而设计的芯片系统(SoC)-元神ENS001(图1).这款芯片是业内首款多通道.刺激参数与波形完全可编程并支持多 ...

  7. 国产技术迎来突破,光量子芯片横空出世,中文编程也有好消息

    国外光刻机不再牛,随着这项技术问世,我们摆脱芯片卡脖子困境成为可能! 欧美技术如此领先,我们凭什么实现弯道超车?就凭国内领先全球的量子技术,还有惊艳问世的光量子芯片,让欧美震惊不已,哭笑不得的是,他们 ...

  8. STM32L0芯片FLASH编程示例及提醒

    关注+星标公众号,不错过精彩内容 来源 | 茶花MCU 这里就STM32L053芯片的FLASH编程做个简单演示并做些提醒,以供有需要的人参考. 一般来讲,FLASH编程主要包括擦除.代码编程.Opt ...

  9. 微机原理与接口技术 | 四种可编程芯片的编程要点不完全记录

    注:未记录芯片的引脚和具体工作方式,主要记录芯片的各控制字或命令字的初始化编程要点,其字格式也并未给出,可翻阅书籍查找. CONTENTS 可编程中断控制器Intel 8259A 可编程定时/计数器芯 ...

最新文章

  1. 深度学习在人脸检测中的应用 | CSDN 博文精选
  2. 最先进的NAS算法不如随机搜索,瑞士学者研究结果让人吃惊,也令人怀疑
  3. mybatis使用Mapper时对参数处理的设计与实现
  4. java乱码怎么解决_如何解决java乱码
  5. IDA Pro安装教程
  6. matplotlib实践过程总结
  7. PAT乙级——1001害死人不偿命的(3n+1)猜想(太简单)
  8. 初创公司怎么做销售数据分析_初创公司与Faang公司的数据科学
  9. ‘dict’ object has no attribute 'has_key'
  10. 新概念英语(1-59)Is that all
  11. 大量字段表单在PHP便捷处理分享
  12. Code First 约定
  13. Java面试题日积月累(jsp/Servlet面试题20道)
  14. 【学习笔记】kaggle案例之泰坦尼克号(基于R)
  15. Jmeter二次开发准备-Jmeter插件开发
  16. Ubuntu 18.04 锁屏 快捷键 无效
  17. 解析社交电商运营模式玩法的秘密?
  18. 因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies
  19. python输入一个数输出绝对值_python如何使用绝对值
  20. 签到java小程序代码_微信小程序全栈项目:签到打卡小程序 + 后端实现

热门文章

  1. 纯css实现文本溢出省略号,兼容(火狐,IE9,chrome)
  2. CAJ转换成Word文档用什么方法
  3. 原生js添加节点(字符串形式)
  4. 软件开发过程中所需要的文档
  5. 高德地图多点标记 marker JSAPI
  6. SQL增加、修改、删除数据
  7. 百度mysql_如何连接百度Mysql_MySQL
  8. android中网格布局背景图片,android 网格显示问题
  9. jQuery图片居中裁切效果(转)
  10. [02] BLEMotion-Kit 基于QMI8658传感器使用加速度计进行倾斜检测