微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 点阵万年历(带时间、年月日星期调整及闹钟功能)C程序

点阵万年历(带时间、年月日星期调整及闹钟功能)C程序

时间:11-29 来源:互联网 点击:

/*此程序是一款用3216点阵屏与DS1302芯片以及
三个按键与STC12C5204AD 4KROM单片机组合成的
万年历电子钟具体功能如下:正常情况下上半屏
(3208)显示主时间。当第1次按下功能键时,下半
屏会左移滚动显示“年、月、日、星期”,当再
次按下时,便进入年、月、日、星期、闹铃等调
整模式,按加与减方便调整,附加功能,当在左
移滚动显示“年、月、日、星期”时,按下加“+”
按键,便可以回到主界面,当在响铃时,按下
“+键”便可以将本次响铃关闭,当按响铃时下“-”
按键时,便可以关闭闹铃功能,再次按下时,可
以恢复闹铃功能*/

视频效果祥见:http://www.tudou.com/programs/view/hQmJSwtHWWc/

完整的源代码下载地址:http://www.51hei.com/f/dzwnl.rar

#include
#define uchar unsigned char
#define uint unsigned int
#define LINE P2//定义行线IO口,即74HC154控制端
sbit DATA1=P1^4;//74HC595数据端
sbit CLK=P1^5;//74HC595移位脉冲端
sbit CLKR=P1^6;//74HC595数据锁存端
sbit BBT =P2^7;//蜂鸣器引脚
sbit SCLK=P1^2;//DS1302移位脉冲端
sbit DATA=P1^1;//DS1302数据端
sbit RST=P1^0;//DS1302控制端
sbit key=P3^4;//功能按键
sbit key1=P3^3;//加"+"按键
sbit key2=P3^2;//加"+"按键
uchar line;//行扫描变量
uchar move;//移位次数变量
uchar mov;//年月日时间左移变量,即移8次将1个字移完后加1
uchar yin;//按键计数器变量,一共10次,即功能按键有10种功能
uchar lk;//扫描两行还是1行变量
uchar readvalue;//DS1302转换结果变量
uchar shi,fen,nian,yue,ri,xin;//分别为:小时/分钟/年/月/日/星期变量
uchar shin=12,fenn;//闹钟的小时与分钟变量
bit dian;//主时间小数点位变量
bit shr,a,b,c,d,e,f,g,h,i;//按键对应的10种功能位变量
bit flag;//主程序与调整时间切换变量,即进入调整时间部分就不进入主时间部分
bit flag1;//闹钟标志位变量
bit clockbiao;//闹钟响铃主标志位
uchar BUF[19];//4组缓存数组以便动态更改数据
/******************************************************/
/**************点阵0-9代码(8*6点阵)******************/
/******************************************************/
uchar code table[]={
0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x0E,//0
0x00,0x04,0x0C,0x04,0x04,0x04,0x04,0x0E,//1
0x00,0x0E,0x11,0x01,0x02,0x04,0x08,0x1F,//2
0x00,0x0E,0x11,0x01,0x06,0x03,0x11,0x0E,//3
0x00,0x06,0x06,0x0A,0x0A,0x12,0x1F,0x02,//4
0x00,0x1F,0x10,0x10,0x1E,0x01,0x01,0x1E,//5
0x00,0x0E,0x11,0x10,0x1E,0x11,0x11,0x0E,//6
0x00,0x1F,0x01,0x02,0x02,0x04,0x04,0x08,//7
0x00,0x0E,0x11,0x11,0x0E,0x11,0x11,0x0E,//8
0x00,0x0E,0x11,0x11,0x0F,0x01,0x01,0x1E,//9
};
/******************************************************/
/**********两个小数黑屏及坚线代码8*6点阵)*************/
/******************************************************/
uchar code table1[]={
0x00,0x0C,0x0C,0x00,0x00,0x0C,0x0C,0x00,//为两个小数点":"
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//为黑屏代码
0x00,0x00,0x00,0x1E,0x1E,0x00,0x00,0x00//为两坚线"-"
};
/******************************************************/
/****此数组为74HC154译码器代码(注也可以不用数组)*****/
/******************************************************/
uchar code table2[]={
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,//上半屏行代码 0-7行
0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff//下半屏行代码 8-15行
};
/******************************************************/
/*****************延时子程序1**************************/
/******************************************************/
void delaya(uint z)
{
uint x;
for(x=z;x>0;x--);
}
/******************************************************/
/*****************延时子程序2**************************/
/******************************************************/
void delay(uint z)
{
uint x,y;
for(x=200;x>0;x--)
for(y=z;y>0;y--);
}
/******************************************************/
/***************蜂鸣器响一声子程序********************/
/******************************************************/
void bbtsoud()
{
BBT=0;//打开蜂鸣器
delay(50);//延时
BBT=1;//关闭它
}
/**********************************/
//向1302写一个字节数据//
//入口参数:dat
/*********************************/
void write1302xei(uchar dat)
{
uchar x;
SCLK=0;delaya(2);
for(x=0;x<8;x++)
{
DATA=dat&0x01;//取出最低位,从而实现一位位传送
delaya(2);
SCLK=1;
delaya(2);
SCLK=0;
dat>>=1;//等待传送第二个字节
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top