电子日历时钟系统程序设计

1. 可通过M键切换显示模式:日期(年、月、日)、时间(小时、分、秒)、秒表(小时、分、秒、1/100秒)、闹钟(小时、分、秒)。
2. 在日期显示模式,可通过A键依次使年、月、日闪烁或变色,这时可通过I键加1调整。
3. 在时间显示模式,可通过A键依次使小时、分、秒闪烁或变色,这时可通过I键加1调整。
4. 在秒表显示模式,可通过I键切换(启动/暂停)计时,当暂停计时时可通过A键复位。
5. 在闹钟显示模式,可通过A键依次使On/Off标志、小时、分、秒闪烁或变色,这时可通过I键切换On/Off标志或加1调整。
6. 调整和秒表操作不影响日期和时间的准确性。
7. 可通过Q键结束程序。
是汇编语言的 需要完整的程序源代码 邮箱[email protected] 分不多 如能帮忙不胜感激~~~

(一) 项目名称:八路温度测量检测系统
(二) 项目要求:
1.手动查询每一点的温度值
2.自动轮流显示每一点温度值
3. 可以设定每一点的温度值,超过温度
上下限时,系统自动报警
(三) 项目内容:
系统组成部分:温度采集电路、A/D转换、单片机、8155扩展单元、液晶显示、按键等。
采用的方式:手动或自动循环选择一条通道,单片机对采集到的信息进行数据处理,送给液晶显示电路,显示电路显示此通道号及此通道的温度。当温度超过设定的温度上下限时自动报警,通过调整相应通道温度,使温度在设定范围内,系统会自动退出报警状态
1. 系统框图:

2. 系统原理图:
(1) 温度采集电路

(2) A/D转换电路

(3) 显示电路

3. 程序框图
(1)程序流程图

(2)键盘扫描流程图

(4) 显示报警流程图

#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#include <wendu.h>

//主函数
void main()
{
Port_Com=0x03;
lcd_init();
while(1)
{
if(model==1)
{
for(z=0;z<8;z++)
{
ad_sz=read1543(z);
ad_data=(5.0*ad_sz)/1024;
rt=ad_data/16+5.0/11;
r=(1000*rt)/(5-rt)-100;
ti=200/75.8*r;
display();
delayms(500);
key_scan();
}
}
if(model==2)
{
ad_sz=read1543(s);
ad_data=(5.0*ad_sz)/1024;
rt=ad_data/16+5.0/11;
r=(1000*rt)/(5-rt)-100;
ti=200/75.8*r;
display();
delayms(5);
key_scan();
}
if(model==3)
{
ad_sz=read1543(t);
ad_data=(5.0*ad_sz)/1024;
rt=ad_data/16+5.0/11;
r=(1000*rt)/(5-rt)-100;
ti=200/75.8*r;
display();
key_scan();
sound();
}
}
}

#define uint unsigned int
#define uchar unsigned char
#define Port_Com XBYTE[0xfd00]
#define Port_A XBYTE[0xfd01]
#define Port_B XBYTE[0xfd02]
#define Port_C XBYTE[0xfd03]

sbit RS=P1^5;
sbit RW=P1^6;
sbit EN=P1^7;
sbit ad_out=P2^4;
sbit ad_addr=P2^5;
sbit cs=P2^6;
sbit clk=P2^7;
sbit speaker=P1^0;

uchar z,s,t;
uchar key_value;
uchar model=1;
uchar ad[16],f1[16];

uchar f=0;
uchar du=1;
uint ted1,teu1;

uint ad_dat;
uint ad_sz;

float ad_data,rt,r,ti;
float teu=40.0;
float ted=10.0;

void change();
void fun();
void add();
void dec();
void tem_du();
void sound();

void delay(uint t)
{
while(t--);
}

//m毫秒延时函数
void delayms(uint m)
{
uchar i;
while(m--)
for(i=0;i<125;i++) ;
}
//1602写命令函数
void lcd_wricmd(uchar c)
{
delay(500);
RS=0;
RW=0;
EN=1;
Port_A=c;
EN=0;

}
//1602写数据函数
void lcd_wridata(uchar d)
{
delay(500);
RS=1;
RW=0;
EN=1;
Port_A=d;
EN=0;
}
//1602初始化函数
void lcd_init()
{

lcd_wricmd(0x38); //8位数据端口,2行显示,5*7点阵
lcd_wricmd(0x0c);
lcd_wricmd(0x06);
lcd_wricmd(0x01);

}
//1602子符串输出函数
void lcd_putstr(uchar *p,bit flag)
{ uchar ad;
if(flag==0)
{
ad=0x80;
while(*p!='\0')
{
lcd_wricmd(ad); ad++;
lcd_wridata(*p); p++;
}
}
if(flag==1)
{
ad=0xc0;
while(*p!='\0')
{
lcd_wricmd(ad); ad++;
lcd_wridata(*p); p++;

}
}

}

void change()
{
ad_dat=ti*100;
ad[0]=ad_dat/10000+0x30;
ad[1]=ad_dat/1000%10+0x30;
ad[2]=ad_dat/100%10+0x30;
ad[3]='.';
ad[4]=ad_dat%100/10+0x30;
ad[5]=ad_dat%10+0x30;
ad[6]=0xdf;
ad[7]='C';
ad[8]=' ';
ad[9]=' ';
ad[10]=' ';
ad[11]=' ';
ad[12]=' ';
ad[13]=' ';
ad[14]=' ';
ad[15]=' ';
}
void change3()
{
ted1=ted*10;
teu1=teu*10;
ad_dat=ti*100;
ad[0]=ad_dat/10000+0x30;
ad[1]=ad_dat/1000%10+0x30;
ad[2]=ad_dat/100%10+0x30;
ad[3]='.';
ad[4]=ad_dat%100/10+0x30;
ad[5]=ad_dat%10+0x30;
ad[6]=0xdf;
ad[7]='C';
ad[9]='>';
ad[10]=ted1/100+0x30;
ad[11]=ted1/10%10+0x30;
ad[13]='<';
ad[14]=teu1/100+0x30;
ad[15]=teu1/10%10+0x30;

}

uint read1543(uchar addr)
{
uchar i;
uchar ah,al;
uint ad;
clk=0;
cs=0;
addr<<=4;
for(i=0;i<4;i++)
{
ad_addr=(bit)(addr&0x80);
clk=1;
clk=0;
addr<<=1;
}
for(i=0;i<6;i++)
{
clk=1;
clk=0;
}
cs=1;
delay(25);
cs=0;
_nop_();
_nop_();
_nop_();
for(i=0;i<2;i++)
{
ad_out=1;
clk=1;
ah<<=1;
if(ad_out)
ah=ah+0x01;
clk=0;
}
for(i=0;i<8;i++)
{
ad_out=1;
clk=1;
al<<=1;
if(ad_out)
al=al+0x01;
clk=0;
}
cs=1;
ad=(uint)ah;
ad<<=8;
ad=ad+(uint)al;
return(ad);
}

void display()
{

if(model==1)
{
change();
switch(z)
{
case 0: lcd_putstr("ZI DONG NO.1 : ",0);
lcd_putstr(ad,1);
break;
case 1: lcd_putstr("ZI DONG NO.2 : ",0);
lcd_putstr(ad,1);
break;
case 2: lcd_putstr("ZI DONG NO.3 : ",0);
lcd_putstr(ad,1);
break;
case 3: lcd_putstr("ZI DONG NO.4 : ",0);
lcd_putstr(ad,1);
break;
case 4: lcd_putstr("ZI DONG NO.5 : ",0);
lcd_putstr(ad,1);
break;
case 5: lcd_putstr("ZI DONG NO.6 : ",0);
lcd_putstr(ad,1);
break;
case 6: lcd_putstr("ZI DONG NO.7 : ",0);
lcd_putstr(ad,1);
break;
case 7: lcd_putstr("ZI DONG NO.8 : ",0);
lcd_putstr(ad,1);
break;
}
}
if(model==2)
{
change();
switch(s)
{
case 0: lcd_putstr("SHOU DONG NO.1 :",0);
lcd_putstr(ad,1);
break;
case 1: lcd_putstr("SHOU DONG NO.2 :",0);
lcd_putstr(ad,1);
break;
case 2: lcd_putstr("SHOU DONG NO.3 :",0);
lcd_putstr(ad,1);
break;
case 3: lcd_putstr("SHOU DONG NO.4 :",0);
lcd_putstr(ad,1);
break;
case 4: lcd_putstr("SHOU DONG NO.5 :",0);
lcd_putstr(ad,1);
break;
case 5: lcd_putstr("SHOU DONG NO.6 :",0);
lcd_putstr(ad,1);
break;
case 6: lcd_putstr("SHOU DONG NO.7 :",0);
lcd_putstr(ad,1);
break;
case 7: lcd_putstr("SHOU DONG NO.8 :",0);
lcd_putstr(ad,1);
break;
}
}
if(model==3)
{
change3();
switch(t)
{
case 0: lcd_putstr("TIAO ZHENG NO.1:",0);
lcd_putstr(ad,1);
break;
case 1: lcd_putstr("TIAO ZHENG NO.2:",0);

lcd_putstr(ad,1);
break;
case 2: lcd_putstr("TIAO ZHENG NO.3:",0);

lcd_putstr(ad,1);
break;
case 3: lcd_putstr("TIAO ZHENG NO.4:",0);

lcd_putstr(ad,1);
break;
case 4: lcd_putstr("TIAO ZHENG NO.5:",0);

lcd_putstr(ad,1);
break;
case 5: lcd_putstr("TIAO ZHENG NO.6:",0);

lcd_putstr(ad,1);
break;
case 6: lcd_putstr("TIAO ZHENG NO.7:",0);

lcd_putstr(ad,1);
break;
case 7: lcd_putstr("TIAO ZHENG NO.8:",0);

lcd_putstr(ad,1);
break;
}
}
}
void key_scan() //键盘扫描
{
key_value=Port_C|0xe0;
if(key_value!=0xff)
{
delayms(20);
key_value=Port_C|0xe0;
if(key_value!=0xff)
{
switch(key_value)
{
case 0xfe: fun(); break;
case 0xfd: add(); break;
case 0xfb: dec(); break;
case 0xf7: tem_du(); break;
}
}
}

}

void fun() //功能键
{
//delayms(20);
model++;
if(model==4)
model=1;
}

void add() //加1键
{
//delayms(20);
if(model==2)
{
s++;
if(s==8)
s=0;
}
if(model==3)
{
if(du==1)
{
t++;
if(t==8)
t=0;
}
if(du==2)
ted++;
if(du==3)
teu++;
}
}

void dec() //减1键
{
//delayms(20);
if(model==2)
{
if(s==0)
s=8;
s--;
}
if(model==3)
{
if(du==1)
{
if(t==0)
t=8;
t--;
}
if(du==2)
ted--;
if(du==3)
teu--;
}
}

void tem_du() //设定温度上下限数值
{
du++;
if(du==4)
du=1;
}
void sound()
{
if(ti<=ted)
{
lcd_wricmd(0xc9);
lcd_wridata('L');
lcd_wridata('O');
lcd_wridata('W');
lcd_wridata(' ');
speaker=0;
}
if(ti>=teu)
{
lcd_wricmd(0xcc);
lcd_wridata('H');
lcd_wridata('I');
lcd_wridata('G');
lcd_wridata('H');
speaker=0;
}
}
温馨提示:答案为网友推荐,仅供参考
相似回答