要求:1.四位七段LED数码管,显示时,分,有复位~
2.四个按键功能,有加一,减一等功能
3.可校对时间,有闹钟功能,可以为整点报时,最好是能调整闹钟时间
4.不可以使用时钟芯片,12MHZ晶振~
5.最好要有proteus电路图及PCB图
6.汇编语言程序,有注释~
附:真的很着急,如果仿真成功的话可以追加悬赏~谢谢~
可以发到我的邮箱 [email protected]~
图片是老师给的51最小系统硬件图,用的是MAX232下载,还有两个芯片是HC595,不是很明白作用~
六位显示,C语言编程也可以,但要有注释!~
ç¨89C51æ§å¶3个HC595,å两个595æ¥8段æ°ç æ¾ç¤ºç®¡ï¼æ¾ç¤ºâ0â~â9âæ¯ç§è·³å¨ä¸æ¬¡.第3个HC595æ¥8个LEDç¯,æ¯é1ç§éªç1次.
#include<at89x52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint cycle=0,cycle1=0,count=0,key=0,ACK=0x01;
/*******************************/
void comend();
/*********************************/
//两ä½æ¾ç¤ºåç¨åº
/********************************/
void sent_P0(uchar temp1,uchar temp)//两ä½çæ¾ç¤º
{
P0=table[temp1];
P1_6=0;
P1=0xff;
P0=table[temp];
P1_7=0;
P1=0xff;
}
/*******************************/
//è°è两ä½æ¾ç¤ºè¿ç®çåç¨åº
/*******************************/
void set_LED()
{
TR0=1;//å¼T0ä¸æå计æ¶é´ç¨1S
sent_P0(cycle,cycle1);
TR0=0;
}
/***********************************/
//T0ä¸æåç¨åº
/**********************************/
void Timer0Int(void) interrupt 1 using 0
{
count++;
if(count==50)count=0; //ä¸æ计æ¶é´
if(count==10) //è¿çcountå¼ä¸è½ä¸ºé¶ï¼å¦åæ¾ç¤ºä¸å
{
cycle++; //æ ¹æ®ä¸æ计çæ¶é´æ¥å³å®æ¶é´å çå¿«æ ¢
}
if(cycle==10)
{
cycle=0; //cycle为个ä½
cycle1++; //cycle1为åä½
}
if(cycle1==10)cycle1=0;//if(RB8==1)RI=1;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
}
/*******************************/
//串è¡ä¸æåç¨åº
/*******************************/
void Out_int(void) interrupt 4 using 3
{
uchar temp;
if(TI==1)TI=0;
else{
if(RB8==1)
{
RB8=0;
while(!RI);RI=0; //ES=0;
temp=SBUF;
if(0x01==temp) //å¯¹ç §å°å
{
SM2=0;
TI=0;
SBUF=ACK; //åå¤ä¸»æºæ¶å°
while(!TI);TI=0;
}
else goto stop;
}
while(!RI); RI=0;
temp=SBUF;//SBUF为ä»ä¸²è¡æ¥æ¶å¯åå¨ä¸æ¥æ¶å°ç主æºåæ¥çæ°æ®
switch(temp)//switchè¯å¥æ§å¶æ¯æ¾ç¤ºè¿æ¯åæ¢
{
case 0x01 : //æ¾ç¤º
{
key=1;
break;
}
case 0x02: //åæ¢
{
key=2;
break;
}
default: ;
}
}
stop: ;
}
/************************************/
//主å½æ°
/***********************************/
void main(void)
{
SCON=0xf0;//串è¡ä¸æçå·¥ä½æ¹å¼åå¼æ¥æ¶å¯åå¨ç设置
PCON=0x80;//设置波ç¹ç为ååæ³¢ç¹ç
TH1=0xf9;//设置T1产ççæ³¢ç¹ç为4800*2=9600
TMOD=0x21;//设置T1产çæ³¢ç¹ç并ä¸å·¥ä½å¨æ¹å¼2ä¸åT0å·¥ä½å¨æ¹å¼1ä¸
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
IE=0x92; //å¼T0ä¸æET0å串è¡ä¸æESåæ»ä¸æEA
TR1=1;//å¼T1ä¸æ
IP=0x10;
P1=0xff;
while(1) //å½RB8=1æ¶ï¼ç³»ç»èªå¨ç³è¯·ä¸æï¼æ¢æRIç½®1ï¼
{
if(key==1)set_LED();
if(key==2)P0=0xff;
}
}
主æºçç¨åºï¼
#include<at89x52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint address1=0x01,ACK=0x01;
/*void Delay(uint n)
{
uint i;
for(i=0;i<n;i++);
}
*/
void main(void)
{
uchar temp;
SCON=0xd0;
PCON=0x80;//SMOD=1,ååæ³¢ç¹ç
TMOD=0x20;
TH1=0xf9;//设å®æ³¢ç¹ç为4800*2=9600ï¼è¦åä»æºä¸è´æè½ååºæ£ç¡®çæ°æ®
TR1=1;
while(1)
{
P1=0xff;
while(P1_0==1);
TB8=1;
SBUF=0x01; //åå°å
while(!TI);TI=0;
while(!RI);RI=0;
temp=SBUF;
if(ACK==temp)//éªè¯ä»æºå°å
{
P2=0x00;
TB8=0;
SBUF=0x01; //å第ä¸ä¸ªå½ä»¤
while(!TI);TI=0;
}
while(P1_1==1);
TB8=1;
SBUF=0x01;//åå°åï¼å次ç»ä»æºåå°å
while(!TI);TI=0;
while(!RI);RI=0;
temp=SBUF;
if(ACK==temp)
{
P2=0xff;
TB8=0;
SBUF=0x02; //å第äºä¸ªå½ä»¤
while(!TI);TI=0;
}
}
}
ä¸ç¥éä½ ççµè·¯å¾æ¯æä¹æ ·çï¼ç»ä½ 个HC595æ°ç 管æ¾ç¤ºçåèçµè·¯åç¨åºã
æ°åéçä¸ç¥éä½ ç¨çæ¯ä»ä¹è¯çããæ æ³åãæè¿éæ8563çç¨åº