求大神解决这个单片机程序问题!!!

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint code ttable[]={63628,63835,64021,64103,64260,64400,64524,65058};//不同音调计数初值
uint soundT;
Sbit led=P1;//接数码管
sbit beep=P3^4;//接功放
sbit key1=P2^0;//按键接口
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit key5=P2^4;
sbit key6=P2^5;
sbit key7=P2^6;
sbit key8=P2^7;
void delay(ucharx) {
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void t0init(){
TMOD=0x01;
TH0=soundT/256;
TL0=soundT%256;
EA=1;
ET0=1;
TR0=1;
}
void t0serv()interrupt 1 {
TH0=soundT/256;
TL0=soundT%256;
delay(110);
beep=~beep;
}
void keytest(){
if(P2!=0xff) {
if(key1==0) {
delay(5);
if(key1==0) {soundT=ttable[0];led=0x01;}
}
if(key2==0) {
delay(5);
if(key2==0) {soundT=ttable[1];led=0x02;}
}
if(key3==0) {
delay(5);
if(key3==0) {soundT=ttable[2];led=0x03;}
}
if(key4==0) {
delay(5);
if(key4==0) {soundT=ttabl[3];led=0x04;} }
if(key5==0) {
delay(5);
if(key5==0) {soundT=ttable[4];led=0x05;}
}
if(key6==0) {
delay(5);
if(key6==0) {soundT=ttable[5];led=0x06;}
}
if(key7==0) { delay(5); if(key7==0) {soundT=ttable[6];led=0x07;} }
if(key8==0) { delay(5); if(key8==0) {soundT=ttable[7];led=0x08;} }
TR0=1;
}
else TR0=0; }
void main() {
t0init();
while(1) keytest();
}
这是一段关于音乐电子琴的程序,发八个声调,用八个按键控制,把这段程序烧到at89s52单片机里面测试没反应,蜂鸣器不叫,一位数码管也没显示,不知道哪里出错了,求各位帮忙,很急!谢谢了!1!
原理图是这样滴。。

数码管不亮,硬件方面考虑过没有。共阴共阳有没有接错,蜂鸣器加三极管驱动没有。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-02-17

lemf7

所说的那一处位定义sbit led=P1


sbit只能定义位吧

如果定义字节是不是改成宏定义试下

#define     LED     P1





在评论里无法发图

上面是P2的内部结构

如果你P2的IO通过按键直接接了VCC

V2导通后,Vcc直接流到GND

这样很可能会烧坏电源或者V2这个管子

本回答被提问者和网友采纳
第2个回答  2015-01-09

需要给你写一份吗

追问

可以帮我写一份,不过也是要八个键,而且数码管,按键,功放的接口都要和我一样哟,谢谢了~

追答

需要定做可以丘上说
我id

单片机程序出错
4、推测:如果数码管能正常显示数字,一般不太像是损坏了,所以很可能是程序不合适。比如,把共阳(阴)当成共阴(阳)了,或者,数码管与单片机之间存在驱动电路,使得点评逻辑翻转了。另外,程序中可以在位值变换前先将段值口清零,这样能减少残影干扰。5、按上述方法排查,应该能解决问题,如果不行还可以...

单片机接收程序疑问!!!求大神!!
你的程序是有问题的,没有串口中断函数啊,而且接收的数据你先发低位就先收低位的,另外也不用放在主函数里,直接用串口中断函数里处理就行了,给你个样例做参考 void init(void){ TMOD=0X20; \/\/设置定时器0为工作方式1,设置定时器1为方式2 SCON = 0x50;TH0=(65536-920)\/256;TL0=(65536-92...

单片机调试的时候出错了 求大神
解决办法是,将temp的变量声明语句移到函数外,使其成为全局变量 错误三、既然程序的前端有各个函数的定义部分,那就要吧主函数放在最上端,不需要经常修改的函数放在最下端,虽然这不是强制性的,但这是一个良好的编程习惯 先改正以上错误吧!

求大神解释单片机程序。不会啊
delay(10);\/\/延时。。。所以。。我错了。上面那个应该是第一线开。。wei1 = 0;\/\/这里把第一线又关掉了。。。所以,这里浪费了10ms亮了第一段。。而且如果数据变化快的话由于duanport是上次的数据。会出现鬼影。。。反正很快。实际不明显。。这程序有些嫩。。。\/\/接下来复制黏贴。。。再换条数...

求单片机大神讲解一下程序啊 ,组合按键值为什么要取反
case 0x11. (由于按键检测是低电平,所以需要取反)实际上应该是这些 初始P2=0xf0, 按下以后P2=0xe0 交换行列:P2=0x0f, 此时被按键强制拉为 P2=0x0e,行列组合;0xe0 | 0x0e = 0xee, 取反0x11--》至于KEY-PORT=1 这个完全是人为设定,你可以认为这个按键是任何值,软件定义即可 ...

求大神帮我看一下这个单片机延时程序呗
MOV TH0, #06H \/\/设置定时器0的初值 SETB TR1 \/\/开启定时器 \/\/以下程序逻辑不对,大体意思应该是判断定时器溢出标志TF0,如果溢出,r7减一,直到r7为0,循环判断。LOOP1: JBC TF0, LOOP2 JMP LOOP1 LOOP2: DJNZ R7, TIME Ret 估计这个程序的思路是利用定时器0完成较为精确地延时。需...

求大神们,快点帮忙看看这个单片机课的题。今天晚上就要交了。...
由于电容C使得nRST管脚仍保持一段时间的高电平,单片机继续运行程序,很可能产生各种运行错误(例如读到的管脚状态错乱、对外部存储器读写错乱、外部通讯错乱)。二极管D可以令线路板掉电时,电容C通过D迅速放电,从而使得nRST管脚迅速拉低、单片机进入复位状态、不再继续运行,避免出现上述问题。

求指导:单片机 程序能下载进去 但不能正常工作!
【1】用万用表测测两个管脚是否为低,对的话检查LED方向,不对检查下面。【2】焊接的RST,EA管脚再检查一下。【3】烧写的程序是不是真的是才生成的HEX文件?我和你的感觉是一样的,应该亮才对。

51单片机整版测试正常,但是程序无法烧写到机内,该如何解决?求助大神
改变波特率,串口,尝试。在或者重新插上usb接头。再不然就是单片机坏了。

利用汇编语言编单片机程序,求大神帮助。。。
a 答案:ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV A,#0FEH ;是开始键按下 则跑马灯开始运行 LL: MOV P1,A LCALL YS ;显示延时 RL A ;循环右移一位 CJNE A,#0FEH,LL ;不是最后一个,则转到LL继续显示下一个LED发光二极管亮 MOV A,#...

相似回答