求解,单片机硬件调试问题问题

级别: 探索解密
发帖数量: 39 个
工控威望: 137 点
下载积分: 154 分
在线时间: 29(小时)
注册时间: 最后登录:
下载到单片机中的C语言程序可以导出来吗?如果可以需要什么设备,具体如何导出。
级别: 网络英雄
发帖数量: 411 个
工控威望: 5074 点
下载积分: 9363 分
在线时间: 372(小时)
注册时间: 最后登录:
单片机中的程序也可以加密,加密了不能上载,另外单片机中的是执行代码,不是C语言,需要反汇编。
tingfenghu
级别: 工控侠客
发帖数量: 1535 个
工控威望: 2089 点
下载积分: 693 分
在线时间: 2577(小时)
注册时间: 最后登录:
可以导出来,你好像没有搞过单片机的.C语言都需要经过编译,转成机器码下载到单片机里,在不加密的情况下,大部分都可以读出来,读出来的汇编语言,极其难懂.
二手PLC,触摸屏,伺服驱动,各类气动设备http://shop.taobao.com/
你关注我一时 我关注你一世
级别: 略有小成
发帖数量: 450 个
工控威望: 441 点
下载积分: 1464 分
在线时间: 1161(小时)
注册时间: 最后登录:
不知道你的单片机是什么品牌的、是什么系列的,如果单片机没有加密是可以读出程序的。经过反编译后能看出程序的大概面貌。比如----如果你的单片机是AT89C51的,那你的用一个支持51系列编程器就能读出数据。如果你的单片机是AT89S51的,那你用一个ISP编程线能读出单片机里的程序。
联系QQ 群3142373 公众微信 毅力工控
级别: 略有小成
发帖数量: 349 个
工控威望: 494 点
下载积分: 8344 分
在线时间: 238(小时)
注册时间: 最后登录:
讀出來是機械語言,你看不懂的,只能燒錄到別塊單片機上,沒法修改的
级别: 探索解密
发帖数量: 39 个
工控威望: 137 点
下载积分: 154 分
在线时间: 29(小时)
注册时间: 最后登录:
谢谢大家的回复,我没有搞过单片机。所以不是很懂。请问单片机学习版可以用来导出程序吗?
tingfenghu
级别: 工控侠客
发帖数量: 1535 个
工控威望: 2089 点
下载积分: 693 分
在线时间: 2577(小时)
注册时间: 最后登录:
学习板为了学习肯定可以导出写入,但导出一般都没有多大用。反编译后都是汇编语言的,真心看不懂,高手的话花时间还可以看懂,普通人就不要尝试,可以说一打开看得头都晕。
二手PLC,触摸屏,伺服驱动,各类气动设备http://shop.taobao.com/
级别: 探索解密
发帖数量: 39 个
工控威望: 137 点
下载积分: 154 分
在线时间: 29(小时)
注册时间: 最后登录:
谢谢大家的回复,我买了一套学习版,准备开始学习单片机!
给你一支烟
级别: 略有小成
发帖数量: 61 个
工控威望: 301 点
下载积分: 2481 分
在线时间: 132(小时)
注册时间: 最后登录:
学单片机可以说是浪费时间,不如认真学好PLC.21ic官方微信-->
stc89c52程序能写进去,但是单片机不工作、、、、求解。。。
实习生, 积分 45, 距离下一级还需 5 积分
实习生, 积分 45, 距离下一级还需 5 积分
实习生, 积分 45, 距离下一级还需 5 积分
实习生, 积分 45, 距离下一级还需 5 积分
stc89c52程序能写进去,但是单片机不工作、、、、求解。。。 复位电路没有问题,晶振两脚电压都是2v左右,31脚也接高电平了,我直接给管脚一个低电平但是测量出来还是高电平
希望高手能帮我解答一下,我是一个新手,过两天就要把作品交上去了。谢谢了
满意回复+10
你是不是自己用线焊接的板子,还是实验板PCB板。
前者的话,建议还是检查线路!软件可能也有问题!
晶振有些压差
程序有问题吧,若不是那就用一个Led看一下是不是硬件有问题,反正一个一个排除吧,我以前也遇到过,后来换了块芯片就好了 ...
程序贴出来
估计还是你硬件的问题!
烧写器配置问题?看门狗啊,引脚配置啊什么的都看看。
你怎么知道是单片机不工作呢?
也许是你程序有问题呢?
难道是因为程序没有大死循环?
胡猜的,楼主的问题太泛了。
中级工程师, 积分 3657, 距离下一级还需 1343 积分
中级工程师, 积分 3657, 距离下一级还需 1343 积分
中级工程师, 积分 3657, 距离下一级还需 1343 积分
中级工程师, 积分 3657, 距离下一级还需 1343 积分
你怎么知道是单片机不工作呢?
也许是你程序有问题呢?
助理工程师, 积分 1656, 距离下一级还需 344 积分
助理工程师, 积分 1656, 距离下一级还需 344 积分
助理工程师, 积分 1656, 距离下一级还需 344 积分
助理工程师, 积分 1656, 距离下一级还需 344 积分
难道是因为程序没有大死循环?
胡猜的,楼主的问题太泛了。
初级工程师, 积分 2627, 距离下一级还需 373 积分
初级工程师, 积分 2627, 距离下一级还需 373 积分
初级工程师, 积分 2627, 距离下一级还需 373 积分
初级工程师, 积分 2627, 距离下一级还需 373 积分
烧写器配置问题?看门狗啊,引脚配置啊什么的都看看。
资深工程师, 积分 12128, 距离下一级还需 7872 积分
资深工程师, 积分 12128, 距离下一级还需 7872 积分
资深工程师, 积分 12128, 距离下一级还需 7872 积分
资深工程师, 积分 12128, 距离下一级还需 7872 积分
LZ可以直接下STC自带的测试程序试试。
初级工程师, 积分 2595, 距离下一级还需 405 积分
初级工程师, 积分 2595, 距离下一级还需 405 积分
初级工程师, 积分 2595, 距离下一级还需 405 积分
初级工程师, 积分 2595, 距离下一级还需 405 积分
估计还是你硬件的问题!
初级工程师, 积分 2134, 距离下一级还需 866 积分
初级工程师, 积分 2134, 距离下一级还需 866 积分
初级工程师, 积分 2134, 距离下一级还需 866 积分
初级工程师, 积分 2134, 距离下一级还需 866 积分
程序贴出来
实习生, 积分 48, 距离下一级还需 2 积分
实习生, 积分 48, 距离下一级还需 2 积分
实习生, 积分 48, 距离下一级还需 2 积分
实习生, 积分 48, 距离下一级还需 2 积分
你是不是自己用线焊接的板子,还是实验板PCB板。
前者的话,建议还是检查线路!软件可能也有问题!
助理工程师, 积分 1412, 距离下一级还需 588 积分
助理工程师, 积分 1412, 距离下一级还需 588 积分
助理工程师, 积分 1412, 距离下一级还需 588 积分
助理工程师, 积分 1412, 距离下一级还需 588 积分
程序有问题吧,若不是那就用一个Led看一下是不是硬件有问题,反正一个一个排除吧,我以前也遇到过,后来换了块芯片就好了
晶振有些压差
高级工程师, 积分 7504, 距离下一级还需 496 积分
高级工程师, 积分 7504, 距离下一级还需 496 积分
高级工程师, 积分 7504, 距离下一级还需 496 积分
高级工程师, 积分 7504, 距离下一级还需 496 积分
经验是复位电路不正常。接个LED, 烧一个流水灯或闪烁灯进去看看。不行就换另一片MCU来确认。一定可以解决的。。。
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
中级技术员, 积分 120, 距离下一级还需 180 积分
最好把硬件照片贴出来,这样的话就好解决多了
助理工程师, 积分 1930, 距离下一级还需 70 积分
助理工程师, 积分 1930, 距离下一级还需 70 积分
助理工程师, 积分 1930, 距离下一级还需 70 积分
助理工程师, 积分 1930, 距离下一级还需 70 积分
你的单片机是高电平复位?
中级技术员, 积分 102, 距离下一级还需 198 积分
中级技术员, 积分 102, 距离下一级还需 198 积分
中级技术员, 积分 102, 距离下一级还需 198 积分
中级技术员, 积分 102, 距离下一级还需 198 积分
感觉程序有问题。
初级工程师, 积分 2001, 距离下一级还需 999 积分
初级工程师, 积分 2001, 距离下一级还需 999 积分
初级工程师, 积分 2001, 距离下一级还需 999 积分
初级工程师, 积分 2001, 距离下一级还需 999 积分
我觉得你实测一下确保你的单片机的地和电源电压正常以及EA确实拉高了,然后你的复位电路最好把你图上的R1电阻去掉,然后还有问题我觉得那就是你程序有问题了。
中级工程师, 积分 4326, 距离下一级还需 674 积分
中级工程师, 积分 4326, 距离下一级还需 674 积分
中级工程师, 积分 4326, 距离下一级还需 674 积分
中级工程师, 积分 4326, 距离下一级还需 674 积分
复位电路不对?
实习生, 积分 45, 距离下一级还需 5 积分
实习生, 积分 45, 距离下一级还需 5 积分
实习生, 积分 45, 距离下一级还需 5 积分
实习生, 积分 45, 距离下一级还需 5 积分
ljb_sunshine
是自己焊的板子,我找学长问了问,确实是线路有点问题,谢谢了!
资深技术员, 积分 318, 距离下一级还需 182 积分
资深技术员, 积分 318, 距离下一级还需 182 积分
资深技术员, 积分 318, 距离下一级还需 182 积分
资深技术员, 积分 318, 距离下一级还需 182 积分
中级技术员, 积分 126, 距离下一级还需 174 积分
中级技术员, 积分 126, 距离下一级还需 174 积分
中级技术员, 积分 126, 距离下一级还需 174 积分
中级技术员, 积分 126, 距离下一级还需 174 积分
电路没有什么毛病,既然程序能写进去,说明单片机晶振已经起震了,而且也工作。这只能说明你的程序有问题。
扫描二维码,随时随地手机跟帖
社区建设奖章
等级类勋章
欢快之小溪
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
湍急之河流
发帖类勋章
时间类勋章
精英会员奖章
等级类勋章
奔腾之江水
发帖类勋章
技术领袖奖章
人才类勋章
精华达人奖章
等级类勋章
时间类勋章
技术导师奖章
人才类勋章
时间类勋章
无冕之王奖章
等级类勋章
时间类勋章
技术高手奖章
人才类勋章
时间类勋章
时间类勋章
突出贡献奖章
等级类勋章
您需要登录后才可以回帖
热门推荐 /5单片机类问题求解!!
本回答由提问者推荐
var sogou_ad_id=731547;
var sogou_ad_height=160;
var sogou_ad_width=690;查看: 1860|回复: 5
关于单片机音乐播放的问题求解
void music_play(void)//播放相应歌曲的某个音符
& & & & if((music_num==1)&&(play_enable==1))
& & & & & & & & fre=song1[num]+8*song1[num+1]-1;//第i个是音符,第i+1个是第几个八度
& & & & & & & & timer0h=FREQH[fre];& & & && && && && & //从数据表中读出频率数值,实际上是定时的时间长度
& & & & & & timer0l=FREQL[fre];
& & & & & & time=song1[num+2];& && && && &&&//读出时间长度数值
& & & & & & num+=3;
& & & & & & & & if(fre&0)& & & & & & & & //判断歌曲的结束位,结束后转到下一首
& & & & & & & & {
& & & & & & & & & & & & num=0;& & & && &&&//下一首从头播放
& & & & & & & & & & & & music_num=2;
& & & & & & & & & & & & & & & & display(2);
& & & & & & }
& & & & & & & & song();& & & && && && &//发出一个音符
上诉标红的地方如何理解。
可能是格式不对吧
本帖最后由 zl2168 于
12:33 编辑
实例75&&定时器控制播放生日快乐歌
先Proteus仿真一下,确认有效。
(26.96 KB, 下载次数: 17)
12:32 上传
点击文件名下载附件
(27.15 KB, 下载次数: 9)
12:33 上传
点击文件名下载附件
生日快乐歌.jpg (101.98 KB, 下载次数: 22)
12:33 上传
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。
应该要结合上下文 的资料 头文件才能理解的吧
应该要结合上下文 的资料 头文件才能理解的吧
//////////////////////////////////////////////
//51单片机音乐播放器程序
//共三个按键:上一曲、一下曲、播放\暂停
//注意:按键必须按下约1S才有相应动作,播放完一首歌曲无按键按下时顺序播放
//////////////////////////////////////////////
#include&REG52.H&
sbit play_up=P1^3;& & & && & //上一首歌
sbit play_down=P3^5;& &//下一首歌
sbit pause=P3^2;& && & //播放\暂停
sbit speaker=P1^0;& &&&//无源蜂鸣器
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;
//////////////////////////////////////////////
unsigned char timer0h,timer0l,//timer0h,timer0l为定时器T0的高低位初值,time为对应的节拍时间
unsigned char music_& && & //music_num为歌曲编号,music_num=0表示刚开机时的状态,num是查找歌曲数据表的地址
unsigned char code& &list[8][16]={& & & & &Yan Hua Yi Leng &,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && &Fa Ru Xue& & &,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&&Jian Dan Ai& &&,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &Zhi You Mama Hao&,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & Dang Ni Gu Dan &,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &XiangJian XiaoLu&,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && & Song Bie& & &,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &Lang Man De Shi &};
& && && && && && & //对应频率数据表的地址
bit play_& && && && && && & //歌曲播放的使能标志位,用于播放\暂停
void delay(unsigned char t);& & & && & //延时子函数,控制发音的时间长度
void delayms(unsigned int t);& & & && & //普通延时子程序,可用于按键消抖
void song(void);& & & & & & & && && && && &//演奏一个音符
void music_play(void);& & & && && && && &//播放歌曲
//////////////////////////////////////////////
//每三个数字,代表一个音符
//第一个数字是音符的数值1234567之一(第几个音),代表哆来咪发...
//第二个数字是0123之一,代表低音\中音\高音\超高音(第几个八度)
//第三个数字是时间长度,以半拍为单位,乐曲数据表的结尾是三个0
//////////////////////////////////////////////
//《烟花易冷》
unsigned char code song1[]={
& &&&5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4,
& & & &&&5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4,
& & & &&&3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1,
& & & &&&2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1,
& & & &&&1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1,
& & & &&&2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2,
& & & &&&2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1,
& & & &&&7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1,
& & & &&&6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2,
& & & &&&5,1,2, 6,1,6, 0,0,0 };
//《发如雪》
unsigned char code song2[]={
& &&&5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,
& & & &&&3,2,1, 6,2,1, 5,2,1, 3,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1, 5,2,1,
& & & &&&3,2,1, 5,2,1, 3,2,2, 1,2,1, 2,2,1, 3,2,1, 1,2,1, 6,1,1, 3,2,1, 2,2,1,
& & & &&&5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,
& & & &&&3,2,1, 6,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1,
& & & &&&5,2,1, 3,2,1, 5,2,1, 3,2,2, 5,2,1, 6,1,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1,
& & & &&&1,2,1, 2,2,1, 2,2,1, 1,2,4, 0,0,0 };
//《简单爱》
unsigned char code song3[]={
& &&&5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1,
& & & &&&4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1,
& & & &&&5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1,
& & & &&&3,2,1, 3,2,1, 1,2,1, 5,2,1, 1,2,1, 5,2,1, 1,2,1, 7,1,1, 1,2,1, 1,2,1, 6,1,1,
& & & &&&2,2,1, 2,2,1, 3,2,1, 3,2,1, 5,2,1, 5,2,1,
& & & &&&5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2,&&
& & & &&&5,1,1, 1,2,1, 2,1,2, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1,
& & & &&&4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1,
& & & &&&5,2,1, 5,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1,
& & & &&&3,2,1, 3,2,1, 1,2,2, 5,2,1, 1,2,1, 5,2,1, 5,2,1, 7,1,1, 1,2,1, 0,0,0 };
//《世上只有妈妈好》
unsigned char code song4[]={
& &&&6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1,
& & & &&&//6,2,3代表6,中音,3个半拍;
& & & &&&//5,2,1代表5,中音,1个半拍;
& & & &&&//3,2,2代表3,中音,2个半拍;
& & & &&&//5,2,2代表5,中音,2个半拍;
& & & &&&//1,3,2代表1,高音,2个半拍;
& & & &&&//...
& &&&5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1,
& & & &&&3,2,1, 2,2,4, 2,2,3, 1,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2,
& & & &&&1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0};
//《当你孤单你会想起谁》
unsigned char code song5[]={
& &&&3,2,2, 3,2,1, 4,2,1, 3,2,2, 2,2,1, 1,2,1,&&2,2,2, 5,2,2, 2,2,2, 2,2,3,
& & & &&&1,2,2, 1,2,1, 6,2,1, 1,2,2, 7,1,1, 6,1,1, 7,1,2, 3,2,2, 7,1,2, 7,1,3,
& & & &&&6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 5,1,2, 2,2,1, 3,2,1, 2,2,1,
& & & &&&1,2,1, 6,1,2, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 7,1,1, 1,2,6, 0,0,0 };
//《乡间小路》
unsigned char code song6[]={
& &&&3,1,2, 3,1,1, 3,1,1, 6,0,1, 6,0,1, 1,1,2,
& &&&6,0,1, 5,0,1, 6,0,4, 6,0,2, 6,0,1 ,6,0,1, 6,0,2, 6,0,1, 1,1,1,
& &&&2,1,2, 2,1,1, 3,1,1, 2,1,4, 3,5,1, 3,1,1, 3,1,1, 2,1,1, 4,1,2,
& &&&4,1,2, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 7,0,1, 7,0,1, 7,0,1, 6,0,1,
& &&&5,0,1, 5,0,1, 6,0,1, 7,0,1, 7,0,1, 6,0,1, 5,0,1, 6,0,4, 6,1,2,
& &&&3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 5,1,1, 2,1,1, 5,1,1,
& &&&6,1,1, 5,1,1, 4,1,1, 4,1,2, 4,1,1, 3,1,1, 2,1,2, 1,1,1, 2,1,1,
& &&&3,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,4, 6,1,2, 3,1,1, 6,1,1, 7,1,1,
& & & &&&6,1,1, 5,1,1, 5,1,2, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 0,0,0};& &&&
//《送别》
unsigned char code song7[]={
& &&&5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2,
& &&&5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2,
& & & &&&3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1,
& & & &&&3,1,1, 4,1,2, 7,0,1, 1,1,4, 6,1,2, 1,2,2, 1,2,4, 7,1,2, 6,1,1,
& & & &&&7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1,
& & & &&&1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2,
& & & &&&5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, 0,0,0};
//《最浪漫的事》
unsigned char code song8[]={
& &&&5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 3,1,1, 5,1,5,
& & & &&&5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 6,1,1, 1,1,5,
& & & &&&1,1,1, 2,1,1, 3,1,1, 2,1,1, 2,1,1, 2,1,1, 1,1,1, 2,1,1, 1,1,1, 6,1,1,
& & & &&&3,1,2, 2,1,3, 5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1,
& & & &&&6,1,1, 1,1,5, 1,1,1, 2,1,1, 3,1,1, 4,1,2, 4,1,1, 5,1,1, 6,1,1, 6,1,1,
& & & &&&5,1,1, 6,1,2, 1,2,1, 6,1,3, 1,2,1, 6,1,1, 5,1,1, 5,1,4, 1,1,1, 6,1,1,
& & & &&&5,1,5, 5,1,1, 6,1,1, 1,2,1, 3,1,1, 2,1,1, 3,1,1, 1,1,6, 0,0,0};
// 频率-半周期数据表 高八位&&共保存了四个八度的28个频率数据
unsigned char code FREQH[]={
& & 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,& & //低音1234567
& & 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i
& & 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,& && && && &//高音 234567
& & 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};& &//超高音 1234567
// 频率-半周期数据表 低八位
unsigned char code FREQL[]={
& & 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,& & //低音1234567
& & 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
& & 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,& && && && & //高音 234567
& & 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};& &//超高音 1234567&&
/*************************lcd1602程序**************************/
void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
{unsigned int i,j;
& &for(i=0;i&i++)
& & for(j=0;j&100;j++);
void wr_com(unsigned char com)//写指令//
{&&delay1ms(1);
& &delay1ms(1);
& &delay1ms(1);
void wr_dat(unsigned char dat)//写数据//
{&&delay1ms(1);;
& &delay1ms(1);
& &delay1ms(1);
void lcd_init()//初始化设置//
{delay1ms(15);
wr_com(0x01);
&&wr_com(0x38);delay1ms(5);
wr_com(0x0c);
wr_com(0x06);
void init_play()
wr_com(0x80+40+4);
wr_dat('W');
wr_dat('E');
wr_dat('L');
wr_dat('C');
wr_dat('O');
wr_dat('M');
wr_dat('E');
wr_dat('!');
void display(unsigned char i)
& &wr_com(0x80);
& &wr_dat(i+0x30);
& &wr_dat(':');
& &wr_com(0xc0);
& &for(j=0;j&16;j++)
& & wr_dat(list[i-1][j]);
void main(void)
& & & & TMOD=0x11; //T0 T1 均在工作方式1
& & & & ET0=1;&&//T0开中断
& & & & EA=1;& &//CPU开中断& & & &&&
& & & & lcd_init();
& & & & init_play();
& & & & while(1)
& & & & & & & & music_play();& & & & //根据当前状态播放相应歌曲的某个音符
& & & & & & & & if(!pause)& & & & & & & & //暂停键处理
& & & & & & & & {
& & & & & & & & delayms(5);
& & & & & & & & if(!pause)
& & & & & & & & {
& & & & & & & & & & & & if(music_num==0)& & //music_num=0只有在刚开机,且未按下暂停键时存在,表示刚开机时的状态,按下后从第一首开始播放
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & music_num=1;& & //歌曲序号置1
& & & & & & & & & & & & & & & & num=0;& & & && && && &//从头播放
& & & & & & & & & & & & & & & & play_enable=1;& & & & //允许播放
& & & & & & & & & & & & & & & & display(1);
& & & & & & & & & & & & & & & & & & & & if(play_enable)
& & & & & & & & & & & & & & & & {wr_com(0x86);wr_dat('P'); wr_dat('L');wr_dat('A');wr_dat('Y');wr_dat(' ');& & & & }
& & & & & & & & & & & & }
& & & & & & & & & & & & else
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & play_enable=~play_
& & & & & & & & & & & && &&&speaker=1;
& & & & & & & & & & & & & & & & if(play_enable)
& & & & & & & & & & & & & & & & {wr_com(0x86);wr_dat('P'); wr_dat('L');wr_dat('A');wr_dat('Y');wr_dat(' ');& & & & }
& & & & & & & & & & & & & & & & if(!play_enable)
& & & & & & & & & & & & & & & & {wr_com(0x86);wr_dat('P'); wr_dat('A');wr_dat('U');wr_dat('S');wr_dat('E');& & & & }
& & & & & & & & & & & & }
& & & & & & & & & & & & while(!pause)& & & &&&//若按着暂停键不放手时的处理
& & & & & & & & & & & & {
& & & & & & & & & & & & if(play_enable==0){}& & & && && && &//如果是暂停,则显示时间不变//(暂停时play_enable==0)
& & & & & & & & & & & & }
& & & & & & & && &}//暂停键处理结束
& & & & }//while结束
& & & & & & & & if((!play_up)&&(music_num!=0)) //上一首按键
& & & & & & & & {
& & & & & & & & delayms(5);
& & & & & & & & if((!play_up)&&(music_num!=0))
& & & & & & & & {& &speaker=1;
& & & & & & & & & & & & music_num-=1;//歌曲编号减一
& & & & & & & & & & & & if(music_num&=0)
& & & & & & & & & & & & music_num=8;
& & & & & & & & & & & & num=0;& & & & & & & &&&//从头开始播放
& & & & & & & & & & & & & & & & display(music_num);
& & & & & & & & & & & & delayms(500);//歌曲切换时延时0.5S
& & & & & & & & }& & & &
& & & & & & & & }
& & & & & & & & if((!play_down)&&(music_num!=0))
& & & & & & & & {
& & & & & & & & delayms(5);
& & & & & & & & if((!play_down)&&(music_num!=0))
& & & & & & & & {& &speaker=1;
& & & & & & & & & & & & music_num+=1;//歌曲编号加一
& & & & & & & & & & & & if(music_num&=9)
& & & & & & & & & & & & music_num=1;
& & & & & & & & & & & & num=0;& & & &&&& & & &&&//从头开始播放
& & & & & & & & & & & & & & & & display(music_num);
& & & & & & & & & & & & delayms(500);//歌曲切换时延时0.5S
& & & & & & & & }
& & & & & & & & }
void delayms(unsigned int t)& & & && & //MS延时子程序
& & & & unsigned int i,j;
& & & & for(i=0;i&t;i++)
& & & & & & & & for(j=0;j&123;j++)
& & & & & & & & & & & & ;
void delay(unsigned char t)& & & && &&&//延时子函数,控制发音的时间长度,每个节拍0.4S
& & & & unsigned char t1;
& & & & unsigned long t2;
& & & & for(t1=0;t1&t;t1++)& & & && && &&&//嵌套循环, 共延时t个半拍
& & & & & & for(t2=0;t2&8000;t2++) //延时期间, 可进入T0中断去发音
& && &&&& & & & ;
& & & & TR0=0;& & & & & & & && && && && && & //关闭T0, 停止发音
void timer0(void) interrupt 2&&//T0中断程序,控制发音的音调
& & & & speaker=!//输出方波, 发音
& & & & TH0=timer0h;& & & &&&//下次的中断时间,这个时间控制音调高低
& & & & TL0=timer0l;
void song(void)&&& & & & //演奏一个音符
& & & & TH0=timer0h;& & //控制音调
& & & & TL0=timer0l;
& & & & TR0=1;& & & & & & & && &&&//启动T0, 由T0输出方波发音
& & & & delay(time);& & //每个音符的演奏时间
////////////////////////////////////////////////////////////////////////////////////
void music_play(void)//播放相应歌曲的某个音符
& & & & if((music_num==1)&&(play_enable==1))
& & & & & & & & fre=song1[num]+8*song1[num+1]-1;//第i个是音符,第i+1个是第几个八度
& & & & & & & & timer0h=FREQH[fre];& & & && && && && & //从数据表中读出频率数值,实际上是定时的时间长度
& & & & & & timer0l=FREQL[fre];
& & & & & & time=song1[num+2];& && && && &&&//读出时间长度数值
& & & & & & num+=3;
& & & & & & & & if(fre&0)& & & & & & & & //判断歌曲的结束位,结束后转到下一首
& & & & & & & & {
& & & & & & & & & & & & num=0;& & & && &&&//下一首从头播放
& & & & & & & & & & & & music_num=2;
& & & & & & & & & & & & & & & & display(2);
& & & & & & }
& & & & & & & & song();& & & && && && &//发出一个音符
////////////////////////////////////////////////////////////////////////////////////
& & & & if((music_num==2)&&(play_enable==1))
& & & & {&&
& & & & & & & & fre=song2[num]+8*song2[num+1]-1;
& & & & & & & & timer0h=FREQH[fre];
& & & & & & timer0l=FREQL[fre];
& & & & & & time=song2[num+2];
& & & & & & num+=3;
& & & & & & & & if(fre&0)
& & & & & & & & {
& & & & & & & & & & & & num=0;
& & & & & & & & & & & & music_num=3;
& & & & & & & & & & & & & & & & display(3);
& & & & & & }
& & & & & & & & song();& & & & & & & &
////////////////////////////////////////////////////////////////////////////////////
& & & & & & & & if((music_num==3)&&(play_enable==1))
& & & & {&&
& & & & & & & & fre=song3[num]+8*song3[num+1]-1;
& & & & & & & & timer0h=FREQH[fre];
& & & & & & timer0l=FREQL[fre];
& & & & & & time=song3[num+2];
& & & & & & num+=3;
& & & & & & & & if(fre&0)
& & & & & & & & {
& & & & & & & & & & & & num=0;
& & & & & & & & & & & & music_num=4;
& & & & & & & & & & & & & & & & display(4);
& & & & & & }
& & & & & & & & song();& & & & & & & &
////////////////////////////////////////////////////////////////////////////////////
& & & & if((music_num==4)&&(play_enable==1))
& & & & & & & & fre=song4[num]+8*song4[num+1]-1;
& & & & & & & & timer0h=FREQH[fre];
& & & & & & timer0l=FREQL[fre];
& & & & & & time=song4[num+2];
& & & & & & num+=3;
& & & & & & & & if(fre&0)
& & & & & & & & {
& & & & & & & & & & & & num=0;
& & & & & & & & & & & & music_num=5;
& & & & & & & & & & & & & & & & display(5);
& & & & & & }
& & & & & & & & song();& & & & & & & &
////////////////////////////////////////////////////////////////////////////////////
& & & & if((music_num==5)&&(play_enable==1))
& & & & & & & & fre=song5[num]+8*song5[num+1]-1;
& & & & & & & & timer0h=FREQH[fre];
& & & & & & timer0l=FREQL[fre];
& & & & & & time=song5[num+2];
& & & & & & num+=3;
& & & & & & & & if(fre&0)
& & & & & & & & {
& & & & & & & & & & & & num=0;
& & & & & & & & & & & & music_num=6;
& & & & & & & & & & & & & & & & display(6);
& & & & & & }
& & & & & & & & song();& & & & & & & &
////////////////////////////////////////////////////////////////////////////////////
& & & & if((music_num==6)&&(play_enable==1))
& & & & & & & & fre=song6[num]+8*song6[num+1]-1;
& & & & & & & & timer0h=FREQH[fre];
& & & & & & timer0l=FREQL[fre];
& & & & & & time=song6[num+2];
& & & & & & num+=3;
& & & & & & & & if(fre&0)
& & & & & & & & {
& & & & & & & & & & & & num=0;
& & & & & & & & & & & & music_num=7;
& & & & & & & & & & & & & & & & display(7);
& & & & & & }
& & & & & & & & song();& & & & & & & &
////////////////////////////////////////////////////////////////////////////////////
if((music_num==7)&&(play_enable==1))
& & & & & & & & fre=song7[num]+8*song7[num+1]-1;
& & & & & & & & timer0h=FREQH[fre];
& & & & & & timer0l=FREQL[fre];
& & & & & & time=song7[num+2];
& & & & & & num+=3;
& & & & & & & & if(fre&0)
& & & & & & & & {
& & & & & & & & & & & & num=0;
& & & & & & & & & & & & music_num=8;
& & & & & & & & & & & & & & & & display(8);
& & & & & & }
& & & & & & & & song();& & & & & & & &
////////////////////////////////////////////////////////////////////////////////////
if((music_num==8)&&(play_enable==1))
& & & & & & & & fre=song8[num]+8*song8[num+1]-1;
& & & & & & & & timer0h=FREQH[fre];
& & & & & & timer0l=FREQL[fre];
& & & & & & time=song8[num+2];
& & & & & & num+=3;
& & & & & & & & if(fre&0)
& & & & & & & & {
& & & & & & & & & & & & num=0;
& & & & & & & & & & & & music_num=1;
& & & & & & & & & & & & display(1);
& & & & & & }
& & & & & & & & song();& & & & & & & &
////////////////////////////////////////////////////////////////////////////////////
//程序结束
Powered by}

我要回帖

更多关于 单片机答辩问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信