标题:
各位大佬帮我看一下这程序哪里出错了,在51开发板上下载运行没有声音?
[打印本页]
作者:
努力学习,
时间:
2020-7-2 16:45
标题:
各位大佬帮我看一下这程序哪里出错了,在51开发板上下载运行没有声音?
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint a=0;
sbit fm=P1^4;
sbit int0=P3^2;
sbit int1=P3^3;
uchar timeh,timel;
uchar code sb[]={
0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x00,0x00,
0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0xf2,0x18,0x00,0x00,
0x64,0x84,0x88,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x62,0x52,0x32,0x12,0x28,0x00,0x00,
0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0xf2,0x18,0x00,0x00,
0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x00,0x00,
0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0xf2,0x18,0x00,0x00
};
uchar code chuzhi[]={
0xff,0xff,
0xFC,0x43,//C÷1-7
0xFC,0xad,
0xFd,0x0a,
0xFD,0x34,
0xFD,0x82,
0xFD,0xc8,
0xFE,0x06,
0xFe,0x21,//
0xFe,0x56,
0xFe,0x85,
0xFe,0x9a,
0xFe,0xc1,
0xFe,0xe4,
0xFf,0x03,
0xFc,0x0c
//0xF8,0x18,//°1-7
};
void timer0() interrupt 1
{
TH0=timeh;
TL0=timel;
fm=~fm;
}
void delay(uint z)
{ uint y;
for(z;z>0;z--)
for(y=19000-a;y>0;y--);
}
void delay1(uint z)
{uint y;
for(z;z>0;z--)
for(y=112;y>0;y--);
}
void main()
{
uint temp;
uint lightTemp;
uchar i=0;
uchar jp;
IT0=1;//INT0
IT1=1; //INT1
TMOD=0x01;
IE=0x87;
while(1)
{
temp=sb[i];
if(temp==0xff)
break;
jp=temp/16;
lightTemp=(1<<jp)-1;
P2=~lightTemp/0x100;
P0=~lightTemp%0x100;
if(jp!=0)
{
timeh=chuzhi[jp*2];
timel=chuzhi[jp*2+1];
TR0=1;
}
else
{
TR0=0;
fm=1;
}
delay(temp%16);
TR0=0;
fm=1;
delay1(5);
i++;
}
TR0=0;
fm=1;
}
void delay_ms(uint a){
int i,j;
for(i=a;i>=0;j--){}
}
void INT0_svr(void) interrupt 0
{
delay_ms(10);
if(int0==0){
a+=2000;
if(a>18000)a=0;
}
}
void INT1_svr(void) interrupt 2
{
delay_ms(10);
if(int1==0){
a-=2000;
if(a<=0)a=0;}
}
作者:
wwh2382
时间:
2020-7-2 22:07
如果还处于抄别人程序的阶段,建议从简单的开始抄起。一口吃个胖子,也消化不了。
作者:
SKYLAR123
时间:
2020-7-3 09:28
你在定时器0对应的中断ET0=1;EA=1;这个中断允许没有打开,你的外部中断EX1=1;外部中断允许没有打开,而且你的中断初始化写的这么让人别扭
作者:
SKYLAR123
时间:
2020-7-3 09:34
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit led=P2^0; //定义P20口是led
/*******************************************************************************
* 函 数 名 : Timer0Init
* 函数功能 : 定时器0初始化
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
Timer0Init(); //定时器0初始化
while(1);
}
/*******************************************************************************
* 函 数 名 : void Timer0() interrupt 1
* 函数功能 : 定时器0中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer0() interrupt 1
{
static u16 i;
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
i++;
if(i==1000)
{
i=0;
led=~led;
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1