急求PROTUES实现万年历 单片机C语言程序做的 HEX文件 源程序和仿真图
可以,附件即是。
你好!
具体什么要求,是12864显示吗,编程是汇编还是c语言
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit db=P2^7;
char i,sec,min,h,date,month,year,flag;
uchar j,k,m,n,o,p;
sbit dula=P2^0;
sbit wela1=P2^1;
sbit wela2=P2^2;
sbit key_ch=P3^5;
sbit key_add=P3^6;
sbit key_minus=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void init();
void delay(uint);
void second_display();
void minute_display();
void hour_display();
void date_display();
void month_display();
void year_display();
void control();
void time();
void main()
{
init();
while(1)
{
second_display();
minute_display();
hour_display();
date_display();
month_display();
year_display();
control();
}
}
void init()
{
db=0;
i=0;
sec=0;
min=0;
h=0;
date=1;
month=1;
year=1;
flag=0;
wela1=0;
wela2=0;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void second_display()
{
int sec_shi,sec_ge;
sec_shi=sec/10;
sec_ge=sec%10;
if(flag==1&&j!=1)
j++;
else
{
j=0;
dula=1;
P0=~table[sec_ge];
dula=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x20;
wela2=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
dula=1;
P0=~table[sec_shi];
dula=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x10;
wela2=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
}
}
void minute_display()
{
int min_shi,min_ge;
min_shi=min/10;
min_ge=min%10;
if(flag==2&&k!=1)
k++;
else
{
k=0;
dula=1;
P0=~table[min_ge];
dula=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x08;
wela2=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
dula=1;
P0=~table[min_shi];
dula=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x04;
wela2=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
}
}
void hour_display()
{
int h_shi,h_ge;
h_shi=h/10;
h_ge=h%10;
if(flag==3&&m!=1)
m++;
else
{
m=0;
dula=1;
P0=~table[h_ge];
dula=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x02;
wela2=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
delay(1);
dula=1;
P0=~table[h_shi];
dula=0;
wela1=1;
P1=0x00;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x01;
wela2=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
wela2=0;
delay(1);
}
}
void date_display()
{
int date_shi,date_ge;
date_shi=date/10;
date_ge=date%10;
if(flag==4&&n!=1)
n++;
else
{
n=0;
dula=1;
P0=~table[date_ge];
dula=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x80;
wela1=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
dula=1;
P0=~table[date_shi];
dula=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x40;
wela1=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
}
}
void month_display()
{
int month_shi,month_ge;
month_shi=month/10;
month_ge=month%10;
if(flag==5&&o!=1)
o++;
else
{
o=0;
dula=1;
P0=~table[month_ge];
dula=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x20;
wela1=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
dula=1;
P0=~table[month_shi];
dula=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x10;
wela1=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
}
}
void year_display()
{
int year_qian,year_bai,year_shi,year_ge;
year_qian=year/1000;
year_bai=year%1000/100;
year_shi=year%1000%100/10;
year_ge=year%10;
if(flag==6&&p!=1)
p++;
else
{
p=0;
dula=1;
P0=~table[year_ge];
dula=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x08;
wela1=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
dula=1;
P0=~table[year_shi];
dula=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x04;
wela1=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
dula=1;
P0=~table[year_bai];
dula=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x02;
wela1=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
dula=1;
P0=~table[2];
dula=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x01;
wela1=0;
delay(1);
dula=1;
P0=0xff;
dula=0;
wela1=0;
}
}
void control()
{
if(!key_ch)
{
delay(5);
if(!key_ch)
{
flag++;
if(flag==7)
flag=0;
}
}
while(!key_ch);
if(flag==1&&key_add==0)
{
while(!key_add);
sec++;
if(sec==60)
sec=0;
}
if(flag==1&&key_minus==0)
{
while(!key_minus);
sec--;
if(sec==-1)
sec=59;
}
if(flag==2&&key_add==0)
{
while(!key_add);
min++;
if(min==60)
min=0;
}
if(flag==2&&key_minus==0)
{
while(!key_minus);
min--;
if(min==-1)
min=59;
}
if(flag==3&&key_add==0)
{
while(!key_add);
h++;
if(h==24)
h=0;
}
if(flag==3&&key_minus==0)
{
while(!key_minus);
h--;
if(h==-1)
h=23;
}
if(flag==4&&key_add==0)
{
while(!key_add);
date++;
if(date==29)
if((year%4!=0)&&(month==2))
date=1;
if(date==30)
if((year%4==0)&&(month==2))
date=1;
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
date=1;
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
date=1;
}
if(flag==5&&key_add==0)
{
while(!key_add);
month++;
if(month==13)
month=1;
}
if(flag==5&&key_minus==0)
{
while(!key_minus);
month--;
if(month==0)
month=12;
}
if(flag==6&&key_add==0)
{
while(!key_add);
year++;
if(year==99)
year=1;
}
if(flag==6&&key_minus==0)
{
while(!key_minus);
year--;
if(year==0)
year=99;
}
}
void T0_rpt() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
time();
}
void time()
{
if(i==20)
{
i=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
h++;
if(h==24)
{
h=0;
min=0;
sec=0;
date++;
if(date==29)
if((year%4!=0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==30)
if((year%4==0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
}
}
}
}
}
这个度娘应该很多阿...自己先搜一下吧
proteus怎么实现高低电平?
proteus可以给高低电平的开关,可以用一个单刀双掷开关,如下图左边的那个开关。需要接到VCC和GND上,才能实现上拨输出高电平,下拨输出低电平。当然不会与实验箱上完全相同的开关的,但效果是完全相同的。下图是输出高电平的状态。右边的那个,是调试工具中的。这种小工具输出高电平和低电平更直观和文便...
proteus中怎么实现双拍整步正转
1、首先在电脑中打开proteus软件、新建工程,打开自己的图纸。2、其次接着在器件中间连接一条线。3、最后按下d按键,电机即可产生正转、反转、停止的效果。
proteus如何实现可控电流
proteus实现可控电流步骤如下:1、打开proteus,点击左侧P按钮打开器件库。2、据控制支路的控制量的不同,受控源分为四种:电压控制电压源(VCVS)、电流控制电压源(CCVS)、电压控制电流源(VCCS)、电流控制电流源(CCCS),根据需要的类型在Keyword栏输入关键词,比如VCVS,按enter键可得到搜索结果,双击...
proteus如何实现波形的叠加
1、运行ISIS7professional点击虚拟仪器模式按钮。选择OSCILLOSCOPE(示波器),在绘图区点击鼠标左键,出现示波器图形,并移动鼠标到合适位置点击左键放置示波器。2、依上述方法放置正弦波发生器并连接引脚。选中正弦波发生器并双击弹出属性设置面板,将频幅设置为1V,频率设置为50HZ,点击运行按钮,运行后会弹出示...
proteus怎么在实物中接地和连接电源?
在跳开的界面中需要点击“P”字按钮。可以看到界面中的数字,输入“AT89C51”就会出现各种51单片专机。接下来是一系列的数子,用鼠标双击。4、proteus地线,就是接地,GND,是电源的负极。如下图,先点左边的工具条中的端子按钮,画红圈那个,列表的POWER就是电源正极,VCC,GROUND是电源负极,GND。
proteus 怎么实现串口仿真
点击打开 此软件不需安装,直接使用。打开串口调试助手,选择串口号和波特率,注意选择的是以上设置的虚拟串口(COM9)3.打开文件夹 用proteus打开 设置串口输出的物理接口(COM4)和波特率,导入HEX文件进行仿真。通过串口调试助手向单片机发送字符串,单片机每接收到10个字符就把它显示出来并且发送回给PC....
proteus怎么连线?
在Proteus中,蓝色的粗线代表总线,要与其他线连接,需要使用网络标签(Net Label)来实现。1. 理解总线与网络标签 在Proteus的电路设计中,总线是用于表示一组电线,它简化了复杂电路中的线路布局。而网络标签则是用于标识和连接这些电线的。网络标签允许您将不同的电线或组件连接到同一网络上,即使它们在...
怎么用proteus来仿真51
用proteus来仿真51的步骤:工具\/原料:Proteus,keil c51 1、首先我们打开Proteus软件,点击左边菜单栏的P按钮,然后再搜索框里输入80c51,选择第一个就是80c51单片机;2、然后在搜索框里面输入led,找到Optoelectronics,然后再里面选择LED-RED,红色的led,当然其他颜色也可以;3、接着我们点击鼠标右键可以...
proteus求教
proteus 仿真软件中的温度传感器U1和U2,是单总线结构,输出的是串行的数字温度,而且转换和读取温度时,也需要写入命令字。所以,你画的方框内应该用一个单片机,并根据U1和U2的温度差控制继电器。下图是读取温度的仿真图。
求proteus单片机c语言程序代码,四路抢答器
void main(){ unsigned char key,cont;bit flag = 0;初始化IO口;\\\\关闭红灯点亮绿灯,数码管显示0 while(1){ key = P1&0xF;if(key!=0xF){ \/*按下的按键相应绿灯关闭*\/ LED_G1 = (bit)(key&0x1);LED_G2 = (bit)(key&0x2);LED_G3 = (bit)(key&0x4);LED_G4 = (bit...
衡衫草铂: 用51单片机就可以做.编写软件用keil.仿真软件可以用Proteus.方案可以有以下2种:1.用专门的时钟芯片,比较经典的有DS12887和DS1302,任一种都是可以的.模块就是单片机最小系统+时钟芯片模块电路就可以了.2.利用单片机的定时器来做,只是误差要大一些,也可以实现功能.日历的显示可以用液晶模块:1602,或者是用数码管搭建(较麻烦).网上应该有现成的仿真资料的,这基本都是学习单片机需要做的一个实验.如果对模块非常熟悉,可以直接买实物焊接.如果只是做着玩,做做仿真就行了.
顺庆区19671081242: 急求单片机编程高手帮我编一个AT89C51的时钟+万年历的程序! - ?
衡衫草铂: 基于单片机的数字钟(电子万年历) http://hi.baidu.com/dsu5566/blog/item/7cfe0fa480cd14fe9152eec8.html
顺庆区19671081242: 在protues上仿真单片硬件设置.怎样把汇编程序生成的文件装进去.用汇编语言编写的 - ?
衡衫草铂: 双击单片机 出现的对话框中可以导入文件(很明显,自己找一下) 然后将你生成的hex文件导入就可以了 主要设置下你单片机的晶振 默认是12M的 protues仿真时单片机不用画最小系统就能工作(电源也不用接,貌似也没有电源端口)
顺庆区19671081242: 用proteus进行单片机仿真时,是不是不管用单片机做什么,实现什么功能,都得画出晶振和复位电路才 - ?
衡衫草铂: 可以不用画 复位电路 相当于运行这个软件可以开始,停止 晶振,你双击单片机可以在对话框里面修改值.
顺庆区19671081242: 用JAVA语言怎么写“万年历”的类?急求!?
衡衫草铂: import java.util.Scanner; public class PrintCalendar { public static void main(String[] args) { System.out.println("******************欢 迎 使 用 万 年 历******************"); Scanner input = new Scanner(System.in); System.out.print("\n请选择年份...
顺庆区19671081242: 有DSN文件和HEX文件怎么用Protues运行仿真 - ?
衡衫草铂: 你应该有protues这个软件的吧双击dsn文件用protues打开,就是protues的仿真原理图,图形类似于protel原理图.如果你打不开的话就是你的protues版本和dsn文件的版本不对.而hex只能用在protues仿真图里可编程的东西如8051单片机双击单片机,里边有个选项“打开文件”,你把hex文件路径填进去,然后就可以仿真单片机了
顺庆区19671081242: 急求250行左右的C语言万年历编程 - ?
衡衫草铂: #include <stdio.h> #include <stdlib.h> #include <conio.h> #define X " Sun Mon Tue Wed Thu Fri Sat"void menu() {system("cls");printf("\nTHIS IS THE MENU OF THE PROGRAM !");printf("\nYOU CAN CHOOSE THE NUMBER FOR ...
顺庆区19671081242: 急求java万年历源代码!!!?
衡衫草铂: package org.java.test; import java.util.Scanner; public class CalendarTest{ public static void main(String[] args) { System.out.println("欢 迎 使 用 万 年 历"); Scanner input = new Scanner(System.in); System.out.print("\n请选择年份: "); ...
顺庆区19671081242: 求一个单片机的系统,最好是WORD 文档,要有电路原理图,程序源代码,程序流程图等,纯软件 - ?
衡衫草铂: 发了 几个 供参考1602+DS1302+闹钟.rar DS1302时钟.rar 51 单片音乐机及编程示意.rar
顺庆区19671081242: 急:C++程序设计, 万年历:要求输入年份,输出该年各月的日历 ,谢谢各位大大了 - ?
衡衫草铂: 计算每年的第一天是周几,这个道理很简单400年的天数刚好是7的倍数,所以只求余下的那些年的天数就可 还有一点就是每年365天,364是7的倍数,所以一年多出一天,在加上闰年的多出来的那一天 int year(int ye) { int y=ye%400; int i; int dat...