请大神帮我改一下51单片机c语言程序,谢了!!!

以下是电子钟程序,能不能改成有这些功能:1)早上七点时蜂鸣器会响一分钟,按任意键停。
2)蜂鸣器响时晶体管显示屏会闪烁,0.5秒闪一下
3)按下key6时显示年月日,再按一下重新显示时分秒

void T0_service(void) interrupt 1
{
TH0=(65536-4000)>>8;
TL0=(unsigned char)(65536-4000);
Count4ms=Count4ms+1;
if (Count4ms==250)
{
Count4ms=0;
SecFlag=1;
}
P2_buff=Tab[disp_cnt];
if (KeyDownFlg)
{
P2_buff=P2_buff&0xbf; // Buzzer is on 1011 1111
Beep_cnt=Beep_cnt+1;
if (Beep_cnt==100) //Buzzer is off
KeyDownFlg=0;
}
//disp
// P2=P2_buff;
// P0=Tab1[disp_buff[disp_cnt]];
P0=P2_buff;
P2=Tab1[disp_buff[disp_cnt]];
disp_cnt=disp_cnt+1;
if (disp_cnt==6)
disp_cnt=0;
}
void FillDispBuffer(void)
{
disp_buff[0]=hour/10;
disp_buff[1]=hour%10;
disp_buff[2]=min/10;
disp_buff[3]=min%10;
disp_buff[4]=sec/10;
disp_buff[5]=sec%10;
}
void ChangeTime(void)
{
SecFlag=0;
sec=sec+1;
if(sec==60)
{
sec=0;
min=min+1;
if(min==60)
{
hour=hour+1;
min=0;
if(hour==24)
hour=0;
}
}
FillDispBuffer();
}
unsigned char CheckData(unsigned char dat,unsigned char th)
{
unsigned char ret_dat;
ret_dat=dat;
if (dat==255)
ret_dat=th-1;
if (dat==th)
ret_dat=0;
return(ret_dat);
}
void DealKey(void)
{
KeyBuff=P0;
if (KeyDownFlg)
return;
if ((KeyBuff&0x01)!=0x01) //
hour=hour+1;
if ((KeyBuff&0x02)!=0x02) //
hour=hour-1;
if ((KeyBuff&0x04)!=0x04) //
min=min+1;
if ((KeyBuff&0x08)!=0x08) //
min=min-1;
if ((KeyBuff&0x10)!=0x10) //
sec=sec+1;
if ((KeyBuff&0x20)!=0x20) //
sec=sec-1;
//check data
hour=CheckData(hour,24);
min=CheckData(min,60);
sec=CheckData(sec,60);
FillDispBuffer();
Beep_cnt=0;
KeyDownFlg=1;
}
void main()
{
//initial
disp_cnt=0;
Count4ms=0;
hour=0;
min=0;
sec=0;
//
TMOD=0x01;
TH0=(65536-4000)>>8;
TL0=(unsigned char)(65536-4000);
TR0=1;
ET0=1;
EA=1;
while(1)
{
if (SecFlag)
ChangeTime();
if (!Key)
DealKey();
}
}
程序太长了就没把前面的定义打出来

第1个回答  2013-10-31
挺复杂的,没时间帮你做,
还有单片机的编程是要看接口的,也就是说要结合电路图才能出程序。。
还有这个很花时间,我觉得你还是自己学一学整一整
第2个回答  2013-10-31
哇塞,本来你这个程序就比较长,人家就不想看,你还不把定义贴出来,那根本就看不懂了都!全都贴出来!还有我想问一下,你的日期和时间是从哪儿来的呢?应该有一个时钟芯片吧?ds1302还是什么?你得把你封装的读取和写入时间的接口贴出来。
第3个回答  2013-10-31
自己写 也比改快

怎么用c语言编程51单片机读写程序?
编程代码如下:ORG 0000H MOV DPTR,#1000H ;给源数据块地址指针DPTR赋初值 MOV P2, #20H ;给目的数据块地址指针P2和R0赋初值 MOV RO,#00H LOOP: MOVX A, @DPTR .MOVX @RO, A .INC DPTR INC RO CJNE RO,#64H, LOOP SJMP

51单片机C语言程序
while(!key()); \/\/静等按下第一次.reg = 0;bice = 1;while(!key()) b1(); \/\/没有按下第二次就循环等待.reg = 1;bice = 0;while(!key()) b2(); \/\/没有按下第三次就循环等待.} } void b1(){ P1 = 0xfe; a = 50000; while(a--);P1 = 0xff; a = 50000...

求大神在keil上帮写51单片机C语言程序
\/\/第一个实验:\/\/假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2 ... D18连接P0.7\/\/假设K1按键在P2.3引脚#include<reg51.h>#include<intrins.h>sbit k1=P2^3;\/\/假设K1按键在P2.3引脚void main(){P0=0xfe;while(1){if(k1==0){while(k1==0);P0=_crol_(P0,1);}}}...

求一个51单片机C语言程序编程
要求利用芯片MAX232),双方的晶振频率均为11.0592MHz(波特率为9600kb\/s)要求:甲机按开关K1一次,发送字符“A”给乙机,点亮灯D1与D2;按开关K1两次,发送字符“B”给乙机,点亮灯D3与D4;按开关K1三次,发送字符“C”给乙机,

51单片机控制喇叭的程序(c语言)
i=3*m;while(--i);} void delayms(unsigned char a) \/\/豪秒延时子程序 { while(--a); \/\/采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!} void main(){ unsigned char p,m; \/\/m为频率常数变量 unsigned char i=0;...

用五一单片机c语言编程,p1口控制八个发光二极管,实现每隔一秒,两两点亮...
for(j=110;j>0;j--);} void main(){ P0 = 0x00; \/\/P0.0~P0.7分别接八个发光二极管,刚开始全灭 while(1){ delay(1000);P0 = 0xc0;\/\/点亮前两个发光二极管P0.0和P0.1;delay(1000);\/\/延时1秒 P0 = 0x30;\/\/点亮第三个和第四个LED delay(1000);P0 = 0x0c;delay(1000)...

大神,求51单片机做简易计算器的那个c语言程序
void display1(uchar A1,uchar A2,uchar A3,uchar A4,uchar A5) \/\/第1个数显示程序 { init2();write_com(0x80);\/\/第1行,第1字 Delay1ms(10);write_date(0x30+A1);Delay1ms(10);write_date(0x30+A2);Delay1ms(10);write_date(0x30+A3);Delay1ms(10);write_date(0x30+A4);Dela...

求一个用C语言编写的51单片机音乐程序代码。
include <reg52.h> sbit speaker=P2^2;unsigned char timer0h,timer0l,time;\/\/生日歌 code unsigned char sszymmh[]={5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,5,1,1, 5,1,1, 5,2,2, 3,2,2,...

求51单片机C语言编的简易密码锁程序
include<reg51.h> void delay(int);\/*延时程序*\/ sbit P3_0=P3^0;int main(){ P3_0=0;\/*发光二极管的初始状态为灭,即:未解锁*\/ while(1)\/*等待解锁*\/ { P0=0x0FF;\/*P0初始化,先全写1,等待输入*\/ if(P0&0x0f==0x02)\/*验证密码是否为2*\/ break;P1=0x79;\/*密码错误,...

大家帮忙找一些51单片机的基本C语言程序例子,最好带说明,谢啦
主机程序:include <AT89X52.H> define NODE_ADDR 3 \/\/目的节点地址 define COUNT 10 \/\/发送缓冲区buffer大小 typedef unsigned char uchar;uchar buffer[COUNT]; \/\/定义buffer int pt; \/\/设置指针 main()\/\/\/发送程序 { \/\/buffer初始化 pt=0;while(pt<COUNT){ buffer[pt]='1'+...

相似回答
大家正在搜