急求基于单片机AT89C51的多功能数字电子钟的汇编程序,高手进!~
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^7;
sbit dula=P2^6;
sbit s1=P3^4;//模式的选择
sbit s2=P3^5;//调高
sbit s3=P3^6;//调低
sbit s4=P3^7;//选择是否开启闹铃
sbit beep=P2^3;
uchar tt,num,t1,settime,bi;
uchar flag; //至位
int fen,miao,fen1=0,miao1=10;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar dis[]={0x40,0x40,0x40,0x40,0x40,0x40};
void timedisplay();
void display();
void keydisplay();
void setdisplay();
void display1();
void delay(uchar z)
{
uchar i,j;
for(i=125;i>0;i--)
for(j=z;j>0;j--);
}
void warm()
{
if(bi==1)
{
beep=0;
TR1=1;
}
}
void init()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
TH1=(65536-50000)/256;
TL1=(65536-50000)%6;
EA=1;
ET0=1;
ET1=1;
TR0=1;
}
void keyscan()
{
if(s4==0)
{
delay(5);
{
if (s4==0)
{
while(!s4);
bi++;
if(bi==2)
{
bi=0;
}
}
}
}
if(s1==0)
{
delay(5);
if(s1==0)
{
while(!s1);
num++;
if(num==3)
{
num=0;
}
}
}
if(num!=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
if(num==1)
{
miao1++;
if(miao1==60)
miao1=0;
}
if(num==2)
{
fen1++;
if(fen1==60)
fen1=0;
}
while(!s2)
{
keydisplay();
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
if(num==1)
{
miao1--;
if(miao1==-1)
miao1=59;
}
if(num==2)
{
fen1--;
if(fen1==-1)
fen1=59;
}
while(!s3)
{
keydisplay();
}
}
}
}
}
void setdisplay() //设置模式下的显示
{
dis[0]=0x40;
dis[1]=0x40;
dis[2]=table[0];
dis[3]=table[num];
dis[4]=0x40;
dis[5]=0x40;
display();
}
void keydisplay() //通过按键加减时的显示
{
if((flag==1)&&(num==2))
{
dis[0]=table[fen1/10]&0x00;
dis[1]=table[fen1]&0x00;
}
else
{
dis[0]=table[fen1/10];
dis[1]=table[fen1];
}
dis[2]=0x40;
if((flag==1)&&(num==1))
{
dis[3]=table[miao1/10]&0x00;
dis[4]=table[miao1]&0x00;
}
else
{
dis[3]=table[miao1/10];
dis[4]=table[miao1];
}
dis[5]=0x40;
display();
}
void display() //基本的动态显示
{
dula=1; //the one
P0=dis[0];
dula=0;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1; //the two
P0=dis[1];
dula=0;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1; //the three
P0=dis[2];
dula=0;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1; //the four
P0=dis[3];
dula=0;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1; //the five
P0=dis[4];
dula=0;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1; //the six
P0=dis[5];
dula=0;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
void timedisplay()
{
dis[0]=table[fen/10];
dis[1]=table[fen];
dis[2]=0x40;
dis[3]=table[miao/10];
dis[4]=table[miao];
dis[5]=0x40;
display();
}
void main()
{
init();
while(1)
{
keyscan();
if(num!=0)
{
keydisplay();
}
if(num==0)
{
timedisplay();
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
tt++;
if(tt==20)
{
tt=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
}
}
}
if(!num&&fen1==fen&&miao1==miao)
{
warm();
}
settime++;
if(settime==10)
{
flag=1;
}
if(settime==20)
{
settime=0;
flag=0;
}
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%6;
t1++;
if(t1==60)
{
t1=0;
beep=1;
}
}
定时器你会不?
数码管扫描显示你会不?
如果这个都不会的话,去看书吧。
一天就足够了
如果上面的会的话,你可以配置定时器为t时间中断。假如中断N次是1秒,你就每次中断一次,把一个变量加1,直到等于N,这就是1秒,分,时 同理
用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的程序
给你个建议:问在校大学生、
电路不搞清楚,写多少程序都是无用的。
如何保证钻孔的位置精度
苦等5分钟: 请问 哪里还能看2018俄罗斯世界杯赛事? 回答 苦等5分钟: 最近小偷太猖狂了 大家出门还是小心点的好 回答 苦等5分钟: 今年最流行的芭蕾平底鞋怎么搭配好看 回答 苦等20分钟: 基于AT8写9C51单片机的简单计算器c语言编程怎... 回答 更多等待求助问题 > 登录...
汽车出现ICV
苦等15分钟: 各位宾得K3和索尼A7买哪个更好 回答 苦等15分钟: 基于AT8写9C51单片机的简单计算器c语言编程怎... 回答 苦等20分钟: 吧里有没有在阳台养藤本月季的,养的怎么样,分享一下 回答 苦等22分钟: 为什么现在球场上很少看到长发飘飘的球员了 回答 更多等待求助问题 > 登录...
班会《批评与自我批评》主持词怎么写??
苦等6分钟: 系统更新的角标如何去除 回答 苦等10分钟: 全脸填充为什么要体检 回答 苦等11分钟: 有没有人知道 张爱平老师的篮球选修课什么 回答 苦等18分钟: 你结婚了吗,你觉得结婚好吗?婚姻是什么? 回答 苦等19分钟: 基于AT8写9C51单片机的简单计算器c语言编程怎... 回答 更多等待求助问题 > 登...
热血三国里面怎么算将领的统帅可以带多少兵?
苦等1分钟: 最近小偷太猖狂了 大家出门还是小心点的好 回答 苦等16分钟: 基于AT8写9C51单片机的简单计算器c语言编程怎... 回答 苦等20分钟: 怎样挑选水果和嫠 回答 苦等22分钟: 景安服务器如何选择? 回答 苦等26分钟: 如何开个烤鱼店 要注意什么问题 回答 更多等待求助问题 > 登录...
水泥制品凝固后还会释放什么有害物质?
苦等12分钟: 有没有人知道 张爱平老师的篮球选修课什么 回答 苦等18分钟: 常用国内VPS推荐 回答 苦等19分钟: 你结婚了吗,你觉得结婚好吗?婚姻是什么? 回答 苦等20分钟: 基于AT8写9C51单片机的简单计算器c语言编程怎... 回答 苦等26分钟: 景安服务器如何选择? 回答 更多等待求助问题 > 登录...
魔兽世界地精新手任务要做多久
苦等5分钟: 最近小偷太猖狂了 大家出门还是小心点的好 回答 苦等6分钟: 《雍正王朝》里面雍正为什么含泪杀亲子 回答 苦等20分钟: 基于AT8写9C51单片机的简单计算器c语言编程怎... 回答 苦等22分钟: 咖啡因真的能提高运动活力吗 回答 更多等待求助问题 > 登录...
QQ上我删除了好友或者被好友删除,之前的聊天记录还有吗?
10 回答 苦等5分钟: 我觉得还是蛮不错的,是不 回答 苦等7分钟: 魅族为什么不用高通芯片了 回答 苦等11分钟: 说真的,为什么现在蛇和青蛙越来越少了,基 回答 苦等16分钟: 哪个城市的婆婆最难相处 回答 苦等19分钟: 基于AT8写9C51单片机的简单计算器c语言编程怎... 回答 更多等待求助问题 > 登录...
男生身高186CM腿长110CM达到标准比例了麽?标准腿长应该是多少?怎么计 ...
苦等9分钟: 有没有人知道 张爱平老师的篮球选修课什么 回答 苦等14分钟: 哪个城市的婆婆最难相处 回答 苦等17分钟: 基于AT8写9C51单片机的简单计算器c语言编程怎... 回答 苦等18分钟: 为什么某些历史阴谋论会这么流行 回答 苦等27分钟: 如何开个烤鱼店 要注意什么问题 回答 更多等待求助问题 > 登...
人性用英语怎么说
苦等16分钟: 基于AT8写9C51单片机的简单计算器c语言编程怎... 回答 苦等21分钟: 吧里有没有在阳台养藤本月季的,养的怎么样,分享一下 回答 苦等24分钟: 这款表没有发条,人们管它叫“自动跳码手表”。各位大... 回答 苦等27分钟: 如何开个烤鱼店 要注意什么问题 回答 更多等待求助问题 > 登录...
咎梦复方: ;单片机DS18B20温度计C语言程序 #include<reg51.h>#include<intrins.h>#include <math.H> //要用到取绝对值函数abs() //通过DS18B20测试当前环境温度, 并通过数码管显示当前温度值, 目前显示范围: -55~ +125度sbit wela = P2^7...
广西壮族自治区19255672145: 用AT89C51单片机构成一简单的方波发生器 急求!?
咎梦复方:ORG 0000H LJMP start ORG 000BH LJMP aaaa ;3个周期 ORG 0030H start: MOV TMOD,#01H MOV TH0,#0FFH MOV TL0,#3AH SETB TR0 SETB ET0 SETB EA SJMP $ aaaa: MOV TH0,#0FFH ;197个周期 MOV TL0,#3AH CPL P1.7 bbbb: RETI END 共延时200个周期 也就是25us取反P1.7脚,P1.7输出为方波,周期为200us*2=400us 12M晶振为Ius周期
广西壮族自治区19255672145: 基于AT89C51单片机的电子万年历设计,能够显示日期,时间,温度湿度,最好是闹钟.急急急,求大神指点 - ?
咎梦复方: 单片机读取时钟芯片和温湿度传感器的数据,然后在1602上面做显示.下载DS1302和LCD1602的数据手册,看看工作时序和寄存器就行了.
广西壮族自治区19255672145: 基于单片机的数字日历时钟 - ?
咎梦复方: 多功能数字时钟的设计与制作 http://ww1.tabobo.cn/soft/20/233/2008/152201615128.html 摘 要 随着人类科技文明的发展,人们对于时钟的要求在不断地提高.时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现...
广西壮族自治区19255672145: 基于AT89C51单片机,利用定时器设计一个两位数码 管显示电路.求详细的设计过程. - ?
咎梦复方: 硬件很简单,我就不画图了,简单描述一下吧.在单片机最小系统的基础上,P0口接数码管的数据端,P2.6,P2.7接数码管的控制端. 程序如下: #include #define uint unsigned int #define uchar unsigned char sbit s1=P2^6;//十位 ...
广西壮族自治区19255672145: 急求单片机编程高手帮我编一个AT89C51的时钟+万年历的程序! - ?
咎梦复方: 基于单片机的数字钟(电子万年历) http://hi.baidu.com/dsu5566/blog/item/7cfe0fa480cd14fe9152eec8.html
广西壮族自治区19255672145: 急..急求单片机at89c51的.用汇编语言:单片机p0(p0.0,p0.1,p0.2,p0.3)4个端口接有4个开关 - ?
咎梦复方: ORG 0000H LJMP MAIN ORG 0030H MAIN: ORL p0,#0FH ;在读P0口时先对P0口写1 MOV A,p0 ANL A,#0FH MOV DPTR,#LED7 ;根据从P0口读到的数据查表,TAB中存放数码管的显示码表 MOVC A,@A+DPTR MOV p1,A ;把码表值送数码管显示 AJMP MAIN;共阳数码管显示码表 LED7: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,86H,0A1H,86H,8EH
广西壮族自治区19255672145: 基于51单片机设计一个多功能电子时钟,以及相关功能的扩展.系统由按键、发光二极管、数码管或LCD显示屏幕 - ?
咎梦复方: 用一个51和一片DS12887就可以了,这个时钟是并口的,而且自带电池,比较方便,其他的串口时钟相对麻烦一点.资料上网找找有很多,汇编和C都有,硬件连接也有的是.至于按键功能,自己动手写写看,对于这个单一功能很简单.想学好单片机的话就得多动手啊,每次完成一个东西的时候都会有所收获的.希望对你有帮助.
广西壮族自治区19255672145: 急求基于单片机89c51的汇编程序和电路图 - ?
咎梦复方: ORG 0000H LJMP MAIN ORG 0030H MAIN: CPL P1.0 LCALL DELAY SJMP MAIN DELAY: MOV R2,#200 DELAY1: MOV R3,#250 DJNZ R3,$ DJNZ R2,DELAY1 RET END
广西壮族自治区19255672145: 求程序用AT89C51单片机.?
咎梦复方:#include "reg51.h" #define uint unsigned int #define uchar unsigned char unsigned char code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; uchar sec=30,min=20,hour=10; bit secup=00; uchar n=0; void delay(unsigned int ms)...