公历阳历转阴历农历C51程序键盘数码管成功Word格式文档下载.docx
- 文档编号:21776433
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:20KB
公历阳历转阴历农历C51程序键盘数码管成功Word格式文档下载.docx
《公历阳历转阴历农历C51程序键盘数码管成功Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《公历阳历转阴历农历C51程序键盘数码管成功Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
0x38,0x26,0x44,0x00,
0x27,0x53,0x50,0x60,
0x46,0x53,0x24,0x00,
0x35,0x25,0x54,0x00,
0x24,0x41,0x52,0x41,//2020
0x42,0x45,0x25,0x00,
0x31,0x24,0x52,0x00,
0x21,0x51,0x12,0x21,
0x40,0x55,0x11,0x00,
0x28,0x32,0x21,0x61,//2025
0x47,0x26,0x61,0x00,
0x36,0x13,0x31,0x00,
0x25,0x05,0x31,0x51,
0x43,0x12,0x54,0x00,
0x33,0x51,0x25,0x00,//2030
0x22,0x42,0x25,0x31,
0x41,0x32,0x22,0x00,
0x30,0x55,0x02,0x71,
0x49,0x55,0x22,0x00,
0x38,0x26,0x62,0x00,//2035
0x27,0x13,0x64,0x60,
0x45,0x13,0x32,0x00,
0x34,0x12,0x55,0x00,
0x23,0x10,0x53,0x51,
0x42,0x22,0x45,0x00,//2040
0x31,0x52,0x22,0x00,
0x21,0x52,0x44,0x21,
0x40,0x55,0x44,0x00,
0x29,0x26,0x50,0x71,
0x47,0x26,0x64,0x00,//2045
0x36,0x25,0x32,0x00,
0x25,0x23,0x32,0x50,
0x44,0x44,0x55,0x00,
0x32,0x24,0x45,0x00,
0x22,0x55,0x11,0x30,//2050
0x41,0x33,0x10,0x00,
0x31,0x55,0x40,0x81,
0x49,0x55,0x50,0x00,
0x38,0x46,0x64,0x00,
0x27,0x45,0x65,0x60,//2055
0x45,0x05,0x32,0x00,
0x34,0x45,0x15,0x00,
0x23,0x26,0x23,0x40,
0x42,0x25,0x21,0x00,
0x32,0x33,0x21,0x00,//2060
0x20,0x43,0x21,0x31,
0x39,0x15,0x51,0x00,
0x28,0x12,0x52,0x71,
0x47,0x12,0x65,0x00,
0x35,0x11,0x32,0x00,//2065
0x25,0x50,0x52,0x51,
0x44,0x52,0x25,0x00,
0x33,0x26,0x22,0x00,
0x22,0x52,0x42,0x41,
0x41,0x53,0x22,0x00,//2070
0x30,0x25,0x44,0x81,
0x49,0x25,0x52,0x00,
0x37,0x22,0x65,0x00,
0x26,0x22,0x25,0x61,
0x45,0x24,0x52,0x00,//2075
0x35,0x52,0x45,0x00,
0x23,0x25,0x05,0x41,
0x42,0x26,0x44,0x00,
0x32,0x53,0x24,0x00,
0x21,0x23,0x30,0x31,//2080
0x39,0x45,0x54,0x00,
0x28,0x43,0x14,0x71,
0x47,0x45,0x25,0x00,
0x36,0x24,0x52,0x00,
0x25,0x55,0x12,0x50,//2085
0x44,0x55,0x11,0x00,
0x33,0x26,0x50,0x00,
0x23,0x52,0x61,0x41,
0x40,0x13,0x31,0x00,
0x29,0x05,0x51,0x81,//2090
0x48,0x12,0x55,0x00,
0x37,0x11,0x25,0x00,
0x26,0x45,0x25,0x60,
0x45,0x52,0x22,0x00,
0x35,0x55,0x21,0x00,//2095
0x24,0x25,0x42,0x41,
0x42,0x26,0x62,0x00,
0x31,0x13,0x52,0x00,
0x20,0x03,0x32,0x21//2099
};
unsignedcharcodeDIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsignedcharcodeso_m_d[12]={31,28,31,30,31,30,31,31,30,31,30,31};
//公历该月的天数
unsignedcharDisplayData[8];
//用来存放要显示的8位数的值
unsignedcharTempData[8];
unsignedcharTurnData[4];
//转换用于取出数据表的四个数据
unsignedcharKeyValue;
//用来存放读取到的键值
unsignedcharKV;
charyear_soH;
charyear_so;
//公历年月日
charmonth_so;
charday_so;
intSumDar_so;
//char型位数不够,出现瓶颈
charyear_lu;
//农历年月日
charmonth_lu;
charday_lu;
intSumDar_lu;
intn,H;
voidDigDisplay();
//动态显示函数
voidDelay10ms();
//延时10ms
voidKeyDown();
//检测按键函数
voidKeyShow();
//检测键值并显示
voidTurn();
//阳历转换阴历
//intLMP(intLP);
intmonth12_lu(intmonth_a,unsignedcharmonth_b,unsignedcharmonth_c);
*函数名:
main
*函数功能:
主函数
*输入:
无
*输出:
voidmain()
{
year_lu=0;
month_lu=0;
day_lu=0;
KeyShow();
//设置INT0
IT0=1;
//跳变沿出发方式(下降沿)
EX0=1;
//打开INT0的中断允许。
EA=1;
//打开总中断
while
(1)
{
DigDisplay();
//显示
if(KV==1)//进中断
{
Turn();
//转换程序
}
}
}
KeyShow
检测有按键按下并显示键值
voidKeyShow()
unsignedchari=0;
intj=0;
intq,u=0;
SumDar_so=0;
LSA=0;
//给一个数码管提供位选
LSB=0;
LSC=0;
while(i<
=7)
GPIO_KEY=0x0f;
if(GPIO_KEY!
=0x0f)//读取按键是否按下
Delay10ms();
//延时10ms进行消抖
if(GPIO_KEY!
=0x0f)//再次检测键盘是否按下
{
KeyDown();
//读取键值
if(KeyValue<
=9)//键值有效
{
TempData[i]=KeyValue;
//将按键输入的8位数存在寄存器中
DisplayData[i]=DIG_CODE[KeyValue];
//将查到的值送到显示数据寄存器
i++;
DigDisplay();
}
}
}
DigDisplay();
year_soH=(int)(TempData[0]);
//从寄存器中读取公历年份
year_soH=year_soH*10+(int)(TempData[1]);
year_so=(int)(TempData[2]);
year_so=year_so*10+(int)(TempData[3]);
month_so=(int)(TempData[4]);
month_so=month_so*10+(int)(TempData[5]);
//读取公历月
day_so=(int)(TempData[6]);
day_so=day_so*10+(int)(TempData[7]);
j=month_so-1;
for(q=0;
q<
j;
q++)
u=so_m_d[q];
SumDar_so=SumDar_so+u;
SumDar_so=SumDar_so+day_so;
H=SumDar_so;
if(j>
1)//J>
1需要考虑公历闰年
if(year_so%4==0)
SumDar_so=SumDar_so+1;
/*******************************************************************************
Turn
阳历转阴历
voidTurn()
unsignedcharTemp;
unsignedcharL_Temp;
unsignedchary;
unsignedcharsy;
unsignedcharxy;
unsignedcharL_y;
unsignedcharL_sy;
unsignedcharL_xy;
unsignedcharry;
unsignedcharZ;
unsignedcharF;
unsignedcharZ_y;
unsignedcharF_y;
unsignedcharZ_r;
unsignedcharF_r;
intj,k,m,p,T;
intl1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,LastMonth;
p=year_soH*100+year_so;
//年份20**年
Temp=(p-2000+1)*4;
//公历年份*4再去查表,存入转化暂存器
y=DataTab[Temp];
//上半年的数据
Temp++;
sy=DataTab[Temp];
//下半年的数据
xy=DataTab[Temp];
//闰月的月份和大小
ry=DataTab[Temp];
//BCD码转十进制,求出差值
n=10*(int)((y&
0xf0)>
>
4)+(int)(y&
0x0f);
//天数差值
SumDar_lu=SumDar_so-n;
//农历总天数
k=(int)((ry&
4);
//闰月月份
m=30-(int)(ry&
//闰月的天数
l1=month12_lu(1,sy,xy);
//农历1月多少天
l2=month12_lu(2,sy,xy);
l3=month12_lu(3,sy,xy);
l4=month12_lu(4,sy,xy);
l5=month12_lu(5,sy,xy);
l6=month12_lu(6,sy,xy);
l7=month12_lu(7,sy,xy);
l8=month12_lu(8,sy,xy);
l9=month12_lu(9,sy,xy);
l10=month12_lu(10,sy,xy);
l11=month12_lu(11,sy,xy);
l12=month12_lu(12,sy,xy);
T=SumDar_so;
if(T<
n)//如果跨年
L_Temp=(p-2000)*4;
//去年公历年份*4再去查表,存入转化暂存器
L_y=DataTab[L_Temp];
L_Temp++;
L_sy=DataTab[L_Temp];
L_xy=DataTab[L_Temp];
if((n-T)>
31)
month_lu=11;
//跨年到去年的11月
LastMonth=month12_lu(12,L_sy,L_xy);
day_lu=n-SumDar_so-LastMonth;
LastMonth=month12_lu(1,L_sy,L_xy);
day_lu=LastMonth-day_lu;
day_lu=day_lu+1;
}2
if(((n)>
0)&
&
((n-T)<
=31))
month_lu=12;
//跨年到去年的12月
day_lu=LastMonth-(n-T);
else//没有跨年
if((SumDar_lu-l1)>
0)
{
if((SumDar_lu-l2-l1)>
if((SumDar_lu-l3-l2-l1)>
{
if((SumDar_lu-l4-l3-l2-l1)>
if((SumDar_lu-l5-l4-l3-l2-l1)>
{
if((SumDar_lu-l6-l5-l4-l3-l2-l1)>
{
if((SumDar_lu-l7-l6-l5-l4-l3-l2-l1)>
{
if((SumDar_lu-l8-l7-l6-l5-l4-l3-l2-l1)>
{
if((SumDar_lu-l9-l8-l7-l6-l5-l4-l3-l2-l1)>
{
if((SumDar_lu-l10-l9-l8-l7-l6-l5-l4-l3-l2-l1)>
{
if((SumDar_lu-l11-l10-l9-l8-l7-l6-l5-l4-l3-l2-l1)>
{
month_lu=12;
day_lu=SumDar_lu-l11-l10-l9-l8-l7-l6-l5-l4-l3-l2-l1;
}
else
month_lu=11;
day_lu=SumDar_lu-l10-l9-l8-l7-l6-l5-l4-l3-l2-l1;
}
else
month_lu=10;
day_lu=SumDar_lu-l9-l8-l7-l6-l5-l4-l3-l2-l1;
}
}
else
month_lu=9;
day_lu=SumDar_lu-l8-l7-l6-l5-l4-l3-l2-l1;
}
else
month_lu=8;
day_lu=SumDar_lu-l7-l6-l5-l4-l3-l2-l1;
}
else
month_lu=7;
day_lu=SumDar_lu-l6-l5-l4-l3-l2-l1;
}
else
{
month_lu=6;
day_lu=SumDar_lu-l5-l4-l3-l2-l1;
}
else
{
month_lu=5;
day_lu=SumDar_lu-l4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 公历 阳历 转阴 农历 C51 程序 键盘 数码管 成功