我给STC12C2052AD单片机编译程序,KEIL4是注册过的,不存在程序大于2K的问题。用任何一个KEIL都是同样的情况。在主函数处加入了P3M0=0X01;
P3M1=0X00; 就不行,就显示图里的文件不会创建。如果不加入这两句就能通过编译。用其他比这个还多的程序编译都能生成HEX文件,但唯独这个不行。是不是程序超过选择单片机的容量?????还是程序本身有问题?还是别的什么原因???这段程序别人编译就能通过。求大神解答!!!下面是程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*uchar code table[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0x89,0x8c};
uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xfb};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x++)
for(y=120;y>0;y++);
}*/
// //声明头文件
sbit key1=P3^4; //按键接口定义
sbit key2=P3^5; //按键接口定义
sbit speaker=P3^7; //蜂鸣器接口定义
/************************************************************************************/
unsigned char code LED[10]={0x20,0xA7,0x90,0x82,0x07,0x42,0x40,0xA6,0x00,0x02};//数码管段位码定义
unsigned int time; //全局秒基准定义
/*-------------------------------------延时函数-------------------------------------*/
void delayms (unsigned int a){
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);
}
}
/*----------------------------------蜂鸣器驱动函数----------------------------------*/
void beep (void)
{
unsigned char i=30;
while(i--)
{
speaker=~speaker;
delayms(3);
}
}
/*----------------------------------数码管驱动函数----------------------------------*/
void display (unsigned char hour,min)
{
unsigned char H1,H2,M1,M2;
P3=0xf8; //数码管位选
P1 = LED[H1]; //数码管段选
delayms (2); //扫描延时
P3=0xf4; //数码管位选
P1 = LED[H2]; //数码管段选
delayms (2); //扫描延时
P3=0xf2; //数码管位选
P1 = LED[M1]; //数码管段选
delayms (2); //扫描延时
P3=0xf1; //数码管位选
P1 = LED[M2]; //数码管段选
delayms (2); //扫描延时
/*--------------------------------------分定义--------------------------------------*/
M1=min/10;//取分十位
min=min%10;//取余
M2=min;//取分个位
/*--------------------------------------时定义--------------------------------------*/
H1=hour/10;//取时十位
hour=hour%10;//取余
H2=hour;//取时个位
}
/*-----------------------------------按键去抖函数-----------------------------------*/
void qudou (unsigned char hour,min)
{
unsigned char i;
for(i=0;i<25;i++){//循环显示,等于键盘去抖的功能
display (hour,min);
}
}
/*--------------------------------------主函数--------------------------------------*/
void main(void)
{
P3M0=0X01;
P3M1=0X00;
////定时器初始设置
TMOD=0x01;//定时器工作方式1
TH0=0x3C;//定时器初始产生50ms时基信号
TL0=0xB0;//定时器初始产生50ms时基信号
ET0=1;//开定时器中断
EA=1;//开总中断
TR0=1;//启动定时器
/*************************************************************************************/
while(1)
{
unsigned char hour,min;//定义时分
display (hour,min);//调用显示函数
if (time>59)//60秒向分进1
{
time=0;
min++;
}
if (min>59)//60分向时进1
{
min=0;
hour++;
beep ();
}
if (hour>23)//24时时分秒清零
{
hour=0;
min=0;
time=0;
}
/*-----------------------------------按键判断程序-----------------------------------*/
if(key1==0)
qudou (hour,min);
if (key1==0) {hour++;}
if(key2==0)
qudou (hour,min);
if (key2==0) {min++;}
}
}
/*-----------------------------------中断服务程序-----------------------------------*/
void Timer0_Routine(void) interrupt 1
{
unsigned char a;
TH0=0x3C;//定时器初始产生50ms时基信号
TL0=0xB0;//定时器初始产生50ms时基信号
a++;//定时器循环计数20次为一秒
if (a==20){//定时器循环计数20次为一秒
a=0;//次数清零,从新循环计数
time++;//秒加一
}
}
|