收藏 分享(赏)

带演奏指示灯的电子琴.doc

上传人:精品资料 文档编号:10986841 上传时间:2020-01-30 格式:DOC 页数:7 大小:91.50KB
下载 相关 举报
带演奏指示灯的电子琴.doc_第1页
第1页 / 共7页
带演奏指示灯的电子琴.doc_第2页
第2页 / 共7页
带演奏指示灯的电子琴.doc_第3页
第3页 / 共7页
带演奏指示灯的电子琴.doc_第4页
第4页 / 共7页
带演奏指示灯的电子琴.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、笔者开发了一种电路,它可以安装在电子琴的按键上。这个电路有 64 个 LED 指示灯,64 个按键。这 64 个按键和电子琴共用。电子琴也使用这 64 个按键弹奏音乐。每个按键对应一个 LED 灯。电路通过 STC89C51 单片机控制,当要演奏一首乐曲时,这个乐曲要弹奏的第一个按键上面的 LED 灯就会亮起来,只有演奏者按下这个按键,这个 LED 等才会熄灭。同时,当上一个 LED 灯熄灭以后,这个乐曲要弹奏的第二个按键上面的 LED 灯就会亮起。只有演奏者按下这个按键,这个 LED 等才会熄灭。紧接着,这个乐曲要弹奏的第三个按键上面的 LED 灯就会亮起,同样,只有演奏者按下这个按键,这个

2、 LED 等才会熄灭。按键上面的 LED 就按照乐曲要弹奏的按键的顺序亮起,同时,只有演奏者按照乐曲要弹奏的按键的顺序弹奏乐曲,按键上的 LED 才会熄灭。这样就实现了,演奏者按照乐曲弹奏按键的顺序,也就是按照 LED 等亮起的顺序,演奏乐曲的功能。也就让一个不会弹琴的人,按照LED 的指示来学习弹琴。下面是这个电路的电路图。 VD 12NC3S456LK7AT8EY9G0FRIPBUH./XWM+QJO关-outin电路中,单片机 STC89C51 控制芯片 HD7279A。HD7279A 控制 64 个按键和 64 个 LED灯。按照程序,第一个 LED 亮,当按下第一个按键时,这个 LE

3、D 灭,同时,第二个 LED 亮,当按下第二个按键时,这个 LED 灭。这样就实现了按键以此熄灭 LED 的功能。下面是程序:#include /* 函数定义 *void long_delay(void); / 长延时void short_delay(void); / 短暂延时void delay10ms(unsigned char); / 延时 10MSvoid write7279(unsigned char, unsigned char); / 写入到 HD7279unsigned char read7279(unsigned char); / 从 HD7279 读出void send_b

4、yte(unsigned char); / 发送一个字节unsigned char receive_byte(void); / 接收一个字节/* 变量及 I/O 口定义 *unsigned char digit5;unsigned char key_number, j, k,m,n;unsigned int tmr;unsigned long wait_cnter;unsigned char code dis_code65= 16,17,1,2;unsigned char code dis_code1256= 0,1,2,3,4;unsigned char code dis_code29= 0

5、,1,2,3,4,5,6,7,8;unsigned char code dis_code365= 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;unsigned char code dis_code4256= 0,1,2,3,4,5,6,7,8,9,10,11,12;unsigned char code dis_code5128= 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17;unsigned char code dis_code665= 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;u

6、nsigned char code dis_code7256= 0,1,2,3,4,5,6,7,8,9,10;unsigned char code dis_code8128= 0,1,2,3,4,5,6,7,8,9,10,11;unsigned char code dis_code9128= 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;sbit cs=P14; / cs at P1.4sbit clk=P15; / clk 连接于 P1.5sbit dat=P12; / dat 连接于 P1.2sbit key=P13; / key 连接于 P1.3sbit S

7、1=P00; / key 连接于 P1.3sbit S2=P01; / key 连接于 P1.3/* HD7279A 指令 *#define CMD_RESET 0xa4#define CMD_TEST 0xbf#define DECODE0 0x80#define DECODE1 0xc8#define CMD_READ 0x15#define UNDECODE 0x90#define RTL_CYCLE 0xa3#define RTR_CYCLE 0xa2#define RTL_UNCYL 0xa1#define RTR_UNCYL 0xa0#define ACTCTL 0x98#defi

8、ne SEGON 0xe0#define SEGOFF 0xc0#define BLINKCTL 0x88void write7279(unsigned char cmd, unsigned char dta)send_byte (cmd);send_byte (dta);unsigned char read7279(unsigned char command)send_byte(command);return(receive_byte();void send_byte( unsigned char out_byte)unsigned char i;cs=0;long_delay();for

9、(i=0;i8;i+)if (out_byteelsedat=0;clk=1;short_delay();clk=0;short_delay();out_byte=out_byte*2;dat=0;unsigned char receive_byte(void)unsigned char i, in_byte;dat=1; / set to input modelong_delay();for (i=0;i8;i+)clk=1;short_delay();in_byte=in_byte*2;if (dat)in_byte=in_byte|0x01;clk=0;short_delay();dat

10、=0;return (in_byte);void long_delay(void)unsigned char i;for (i=0;i0x30;i+);void short_delay(void)unsigned char i;for (i=0;i8;i+);/ * 延时 n 个 1MS * / * 输入:n 延时个数 * void delay1ms(unsigned char n)unsigned int i;while(n -)for(i = 0;i 125;i +); / i + ,8S 左右/ * 延时 n 个 10MS * / * 输入:n 延时个数 * void delay10ms

11、(unsigned char n)unsigned int i;while(n -)for(i = 0;i 1250;i +); / i + ,8S 左右void delay(void)unsigned int n;for(n=0;n10000;n+);/* 主程序 */* 主程序 *main()unsigned char p;p=0; /将 i 初始化为 0while(1)if(S1=0) /如果 S1 键按下 delay10ms(20);/延时一段时间if(S1=0) /如果再次检测到 S1 键按下p+; /i 自增 1delay10ms(20);/延时一段时间if(p=4) /如果 i=

12、9,重新将其置为 1p=1;switch(p) /使用多分支选择语句case 1: for (j=0;j256;) write7279(SEGON,dis_code1j); / 将 64 个显示段逐个点亮if (!key) / 如果有键按下key_number=read7279(CMD_READ); / 读出键码if (key_number=dis_code1j) / 如果有键按下write7279(SEGOFF,dis_code1j); / 将 64 个显示段逐个点亮delay10ms(20);j+; break;case 2: for (j=0;j256;) write7279(SEGON,dis_codej); / 将 64 个显示段逐个点亮if (!key) / 如果有键按下key_number=read7279(CMD_READ); / 读出键码if (key_number=dis_codej) / 如果有键按下write7279(SEGOFF,dis_codej); / 将 64 个显示段逐个点亮delay10ms(20);j+; break;default: /缺省值,关闭所有 LEDP0=0xff;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报