这个不难,扫描键盘,当有键按下时就输出相应的频率的高低电平脉冲,关于想要什么发音,比如1、2、3等这些的频率编码网上应该会有高手译过,自己搜索吧。要是要求音质高的话,用语音芯片吧。
#include<>unsigned char table[]={0x3f,0x60,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsigned char temp;unsigned char key;unsigned char i,j;unsigned char STH0;unsigned char STL0;unsigned int code tab[]={64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178};void main(void){ TMOD=0x01; ET0=1; EA=1; while(1) { P3=0xff; P3_4=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case 0x0e: key=0; break; case 0x0d: key=1; break; case 0x0b: key=2; break; case 0x07: key=3; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } TR0=0; } } P3=0xff; P3_5=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--) temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=7; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } TR0=0; } } P3=0xff; P3_6=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case 0x0e: key=8; break; case 0x0d: key=9; break; case 0x0b: key=10; break; case 0x07: key=11; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } TR0=0; } } P3=0xff; P3_7=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case 0x0e: key=12; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } TR0=0; } } }}void t0(void) interrupt 1 using 0{ TH0=STH0; TL0=STL0; P1_0=~P1_0;}
这是使用实验仪器键盘上的数字键1,2,3,4,5,6,7作为键盘键,按适当的音的问题。 8255 口音频脉冲以驱动扬声器的问题。可以参考一下。 #包括 #定义模式0X82; 外部数据无符号字符型控制_at_ 0x8003; 外部数据无符号字符型音箱_at_ 0X8000; 外部数据无符号字符型OUTBIT _at_ 0x9002; 外部数据无符号字符型OUTSEG _at_ 0x9004; 外部数据无符号字符型IN _at_ 0x9001; 代码无符号字符型KEYTABLE [] = { 0X16,0X15,0X14 ,是0xFF, 0X13,0X12,0X11,0X10, 0X0D,0X0C,0X0B,0X0A, 0X0E,0X03,0X06,0X09, 0x0F的,0X02,0X05,0X08 , 0X00,0X01,0x04的0X07 } 无符号字符型testkey的() { OUTBIT = 0; 回报( &0X0F); } 无符号字符型的getKey() {无符号字符位置; 无符号字符型; 无符号字符K; = 6; POS = 0x20的; { OUTBIT =位置; POS >> = 1; K = IN&0X0F; }(( - = 0)&&(K == 0)); (k! = 0){ * = 4; (K&2) + = 1; 其他(K&4) + = 2; 否则,如果(K&8) + = 3; OUTBIT = 0; 返回(KEYTABLE []); }否则返回(0XFF) } / * ================================== ============================================== * / />代码unsigned int类型ToneTable [7] = { 64578,64686,64778,64821,64898,64968,65029 无符号字符型PulseCNT; 无符号字符型脉冲; 无符号ToneHigh ToneLow 无效计时器()中断1 { TR0 = 0; TH0 = ToneHigh; / a> TL0 = ToneLow; TR0 = 1;,扬声器=脉冲; 脉冲+ +; PulseCNT - ; 无效的主要() {无符号的字符键; 控制模式; OUTSEG = 0; 脉冲= 0; BR /> TMOD = 0X01; / / 1,头脑 IE = 0X82; / / EA = 1,IT0 = 1 (1){同时(testkey的); / /按钮关键的getKey(); ((> = 1)&&(<= 7)){ ToneHigh = ToneTable [键1] >> 8; ToneLow = ToneTable [1]&0xff的; TH0 = ToneHigh TL0 = ToneLow; TR0 = 1; PulseCNT = 100 (PulseCNT! = 0)/ / 100脉冲音箱= 0; TR0 = 0; } } }
单片机里的c语言就是51程序
你爽了,我正好有!这是一款用51单片机控制的玩具电子琴,用到了51的定时器和键盘技术,它的汇编程序流程如下,很适合初学者学习制作。 说明:由单片机的口输出音频信号,在口接三极管以驱动喇叭,最好用两个三极管构成达林顿结构。P2口连接8个一端接地的按键作为输入,当然也需要连接8只10K的电阻至电源作为上拉电阻。依次为Do、Re、Mi、Fa、So、La、Si、Do(高)音。 BUZZ EQU ORG 0000H LJMP MAIN ORG 000BH LJMP INT_T0 ORG 0100HMAIN: MOV SP,#60H ;初始化堆栈指针 MOV 30H,#00 ;定时器初值清零 MOV 31H,#00 MOV P1,#0FFH ;设置P1口为输入模式 MOV TMOD,#01H ;设置定时器0为工作模式1 SETB ET0 ;开定时器0中断 SETB EA ;开总中断 CLR TR0 ;关闭定时器0 START: MOV R0,P2 CJNE R0,#0FFH,KEY1 ;键盘扫描 CLR TR0 SJMP STARTKEY1: CJNE R0,#0FEH,KEY2 ;K1键按下 MOV 30H,#0FBH ;设置音阶1 MOV 31H,#0E9H LJMP SET_TIMERKEY2: CJNE R0,#0FDH,KEY3 ;K2键按下 MOV 30H,#0FCH ;设置音阶2 MOV 31H,#5CH LJMP SET_TIMERKEY3: CJNE R0,#0FBH,KEY4 ;K3键按下 MOV 30H,#0FCH ;设置音阶3 MOV 31H,#0C1H LJMP SET_TIMERKEY4: CJNE R0,#0F7H,KEY5 ;K4键按下 MOV 30H,#0FCH ;设置音阶4 MOV 31H,#0EFH LJMP SET_TIMERKEY5: CJNE R0,#0EFH,KEY6 ;K5键按下 MOV 30H,#0FDH ;设置音阶5 MOV 31H,#045H LJMP SET_TIMERKEY6: CJNE R0,#0DFH,KEY7 ;K6键按下 MOV 30H,#0FDH ;设置音阶6 MOV 31H,#92H LJMP SET_TIMERKEY7: CJNE R0,#0BFH,KEY8 ;K7键按下 MOV 30H,#0FDH ;设置音阶7 MOV 31H,#0D6H LJMP SET_TIMERKEY8: CJNE R0,#7FH,NOKEY ;K8按下 MOV 30H,#0FDH ;设置音阶8 MOV 31H,#0FBHSET_TIMER: SETB TR0 ;发声 SJMP STARTNOKEY: CLR TR0 ;无键按下 SJMP STARTINT_T0: ;T0中断服务程序 MOV TH0,30H ;定时器赋初值 MOV TL0,31H CPL BUZZ ;输出方波 RETI END
22. 电子琴 1. 实验任务 (1. 由4X4组成16个按钮矩阵,设计成16个音。 (2. 可随意弹奏想要表达的音乐。 2. 电路原理图 图 3. 系统板硬件连线 (1. 把“单片机系统”区域中的端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2. 把“单片机系统“区域中的-端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上; 4. 相关程序内容 (1. 4X4行列式键盘识别; (2. 音乐产生的方法; 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。现在以单片机12MHZ晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表所示 音符 频率(HZ) 简谱码(T值) 音符 频率(HZ) 简谱码(T值) 低1 DO 262 63628 # 4 FA# 740 64860 #1 DO# 277 63731 中 5 SO 784 64898 低2 RE 294 63835 # 5 SO# 831 64934 #2 RE# 311 63928 中 6 LA 880 64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178 中 1 DO 523 64580 # 4 FA# 1480 65198 # 1 DO# 554 64633 高 5 SO 1568 65217 中 2 RE 587 64684 # 5 SO# 1661 65235 # 2 RE# 622 64732 高 6 LA 1760 65252 中 3 M 659 64777 # 6 1865 65268 中 4 FA 698 64820 高 7 SI 1967 65283 下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据 低音0-19之间,中音在20-39之间,高音在40-59之间 TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0 DW 0,63731,63928,0,64185,64331,64463,0,0,0 DW 0,64580,64684,64777,64820,64898,64968,65030,0,0 DW 0,64633,64732,0,64860,64934,64994,0,0,0 DW 0,65058,65110,65157,65178,65217,65252,65283,0,0 DW 0,65085,65134,0,65198,65235,65268,0,0,0 DW 0 2、音乐的音拍,一个节拍为单位(C调) 曲调值 DELAY 曲调值 DELAY 调4/4 125ms 调4/4 62ms 调3/4 187ms 调3/4 94ms 调2/4 250ms 调2/4 125ms 对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。 下面就用AT89S51单片机产生一首“生日快乐”歌曲来说明单片机如何产生的。 在这个程序中用到了两个定时/计数器来完成的。其中T0用来产生音符频率,T1用来产生音拍。 5. 程序框图 贴不了. 7. C语言源程序 #include <> unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsigned char temp; unsigned char key; unsigned char i,j; unsigned char STH0; unsigned char STL0; unsigned int code tab[]={64021,64103,64260,64400, 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178}; void main(void) { TMOD=0x01; ET0=1; EA=1; while(1) { P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=0; break; case 0x0d: key=1; break; case 0x0b: key=2; break; case 0x07: key=3; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; } } P3=0xff; P3_5=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=7; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; } } P3=0xff; P3_6=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=8; break; case 0x0d: key=9; break; case 0x0b: key=10; break; case 0x07: key=11; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; } } P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=12; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; } } } } void t0(void) interrupt 1 using 0 { TH0=STH0; TL0=STL0; P1_0=~P1_0; } 根据自己的情况稍微改改就好了
电子信息工程的 毕业 论文写作中,论文的题目起着画龙点睛的作用,要重视论文的题目。下面是我带来的关于电子信息工程毕业论文题目的内容,欢迎阅读参考!电子信息工程毕业论文题目(一) 1. 基于80C51的智能汽车自控系统的设计 2. PLC实现十字路交通灯自动控制 3. 智能型充电器的电源和显示设计 4. 基于单片机的电子时钟设计及应用 5. 基于单片机的智能电子时钟的设计及应用 6. 超外差中波调幅收音机组装及调试 7. 基于USB接口的步进电机控制的研究与实现 8. 基于单片机的电子琴设计 9. 基于FPGA的直序扩频通信研究与设计 10. 基于单片机的发射机控制系统 11. 声光报警器的设计与研究 12. 单片机电源 13. 基于P87LPC768的电机控制系统 14. 基于单片机的LCD电子钟设计 15. 音响放大器的设计 16. 超外差收音机制作及分析研究 17. 2DPSK频带传输系统的设计与实现 18. 基于单片机智能电子钟的设计 19. USB与串行接口转换器的设计 20. 基于FPGA的数字频率计的设计 电子信息工程毕业论文题目(二) 1. 家庭防盗报警系统 2. 单片机实现单步进电机及8位流水灯控制的设计 3. 篮球 竞赛计时系统 4. 单片机89C51在直流调速控制系统中的应用 5. 八路数字抢答器 6. 基于51机的直流电机设计 7. 基于51单片机的步进电机控制系统 8. 基于一种DC-DC模块电源系统的设计 9. 基于555定时器闪光灯的设计 10. 多功能稳压电源的制作 11. 直流稳压电源的制作 12. 步进电机的单片机控制系统 13. 单片机交通灯管理系统 14. AT89S51单片机交通灯控制系统制作 15. 基于单片机的步进电机系统设计 16. 基于WML的学生网站开发 17. 基于单片机的电子密码锁 18. 单片机驱动步进电机控制系统的设计 19. 基于单片机的流水灯设计 电子信息工程毕业论文题目(三) 1. 基于单片机的火灾报警器设计 2. 基于NE555的触摸式报警器 3. 数字密码锁设计 4. 基于单片机智能电子时钟设计及应用 5. 流水灯控制电路设计 6. 简易单片机控制电路实验开发板 7. 全自动洗衣机自动控制电路部分设计 8. 基于单片机的八路抢答器的设计及PCB板的设计 9. 基于单片机的数字温度计的设计 10. 仓库温湿度的监测系统 11. 电子门铃的设计 12. 基于单片机的步进机电路设计 13. 交通灯控制电路设计 猜你喜欢: 1. 电子信息毕业论文范文 2. 电子信息工程论文范文 3. 电子信息工程发展现状 4. 最新版网络工程专业毕业论文题目 5. 电子信息工程毕业论文范文 6. 电子信息工程论文题目大全
一般用4*4键盘实现比较节约资源,我在实现的时候和你一样,用8个按键输入,效果很好,程序可以到我Q空间查看。。。。
单片机就是集成在一片芯片是的计算机,答辩的题目是要导师提问的,答案也不是唯一的
一般会问,为什么选这个题目,有什么有意义。。发展怎么样、 你自己的思路是什么 ,,,程序自己写的么? 分析一下。。电路自己知道吗? 分析一下原理,差不多了。
在答辩前老师会首先检验一下论文是不是学生自身的研究成果,是不是有抄袭和剽窃的现象。因此通常会提出这些问题;
比如“你是怎么想到要选择这个题目的?”、“你在写这篇论文时是怎样搜集有关资料的?”、“你写这篇论文时参考了哪些书籍和有关资料?”、“论文中提到的数据的出处何在?”等。
在答辩开始前,答辩老师一般都会让学生介绍一下论文的大概内容,也就是这篇论文主要写的是什么内容。这个问题很简单,只要叙述一下文章的整体框架就可以了。
学生答辩技巧
答辩时老师会让毕业生提前准备2个问题,老师根据学生的问题提问,因此在设计问题时,要根据论文的主题和结论来考虑,答辩考生在答辩前要进行预判,准备好应答。
老师根据论文随机提问。这种情况要求学生对论文有全方面的了解。如果怕紧张出错,可以把每个章节的大致内容和小结论写个提要出来。
你好!留下邮箱,我这里有几个!
基于单片机的电梯控制系统模拟电梯的制作三层电梯的单片机控制电路单片机控制电梯系统的设计上面全是单片机控制电梯的,再告诉你一个技巧,如果想要其他的论文,,在这搜就OK了。
电梯相关毕业设计 ·西门子S7-300PLC在六层变频调速电梯控制中的应用·七层建筑电梯PLC控制系统设计·交流变频五层电梯控制系统的设计·基于西门子PLC的变频调速电梯控制系统的设计·基于MCGS电梯控制系统设计·交流变频调速PLC控制电梯系统设计毕业论文·PLC控制变频调速五层电梯系统设计·三菱PLC在五层电梯控制中的应用·PLC在交流双速电梯控制系统中的应用·松下系列PCL五层电梯控制系统·松下PLC控制的五层电梯设计·基于三菱PLC设计的四层电梯控制系统·三菱PLC控制的四层电梯毕业设计论文·基于plc的五层电梯控制·PLC电梯控制毕业论文·西门子PLC控制的四层电梯毕业设计论文·基于三菱PLC的三层电梯控制系统设计·PLC在电梯自动化控制中的应用·基于FPGA控制的电梯设计与实现·基于PLC的三层电梯控制系统毕业设计·基于PLC的电梯系统设计·基于FXON系列PLC的六层电梯控制设计·多层住宅楼电梯的PLC控制系统的设计·三层楼电梯的PLC自控系统的设计·三层楼交流双速电梯的PLC电气控制系统的设计·西门子S7300 PLC在双电梯联动控制系统中的应用·X5系列PLC在电梯控制系统中的应用·液压电梯设计·西门子PLC控制的四层电梯设计·PCL电梯控制系统·基于单片机的电梯控制系统·基于PLC控制的调压调速电梯拖动系统设计·高层建筑电梯控制系统设计·模拟电梯的制作·三层电梯的单片机控制电路·单片机控制电梯系统的设计·S7-300 PLC在电梯控制中的应用·基于PLC的七层交流变频电梯控制系统设计·五层交流双速电梯PLC电气控制系统的设计·四层交流双速电梯的PLC电气控制系统的设计·公共建筑和居住建筑中电梯的电气设计及探索·基于PLC控制的交流变频电梯设计·基于三菱PLC的四层电梯控制系统的设计·基于PLC的双速六层电梯控制系统设计·基于PLC和变频器实现电梯的精确控制· PLC三层楼电梯系统设计与调试·电梯控制系统的设计·PLC十层电梯楼层控制系统的设计·OMRON公司的C系列P型机对电梯升降控制系统·四层电梯的PLC控制及组态·单台电梯PLC控制系统的总体设计·电梯控制系统设计·五层单台电梯PLC控制系统的总体设计方案·交流变频电梯控制系统的设计
我这里有,不过你的分太低了。
是因为很难。
单片机数字钟设计毕业设计我会做啊加你了
办法1:采用芯片at89s51为主控,接四个数码管带一冒号,外围电路采用非门电路反向输出,p0p1p2p3分别控制一数码管(一数码管只用七位),还剩下四个点,一点控制冒号,一点做为设置键(通过计时来确定操作内容),一点为上翻,一点为下翻办法2:采用芯片at892051为主控,接四个数码管带一冒号,外围电路采用一个二四译码芯片,使用片选信号对四个八位的数据寄存器操作,数据寄存器输出到数码管,一点控制冒号,一点做为设置键(通过计时来确定操作内容),一点为上翻,一点为下翻