基于51单片机的万年历,用到了单片机独立键盘、数码管、LED灯模块实现。
想要简单还是DS1302好用。
1 /************************************************** 2 3 作者:纟彖氵戋 博客:http://www.cnblogs.com/yllinux/ 4 5 时间:2017年6月7日 6 7 目标:利用单片机独立键盘、数码管、LED灯模块实现万年历(算法实现) 8 9 ***************************************************/ 10 #include <reg52.h> 11 #define uchar unsigned char 12 #define uint unsigned int 13 14 uchar a[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80 }; //字形码表0~9和. 15 uchar b[] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff }; //数码管位码表1~8和0 16 uchar c[] = { 0x3f,0xf3,0xcf }; 17 uint year = 2100; 18 uchar month = 2, day = 14; 19 uchar hour = 8, minute = 40, second = 0; 20 uchar count; //时钟计数 21 uchar n = 1; //年月日调位指示 22 uchar j = 1; //时分秒调位指示 23 24 sbit Key1 = P3 ^ 0; //计时停止 25 sbit Key2 = P3 ^ 1; //调位 26 sbit Key3 = P3 ^ 2; //加一 27 sbit Key4 = P3 ^ 3; //切换 28 sbit LED1 = P1 ^ 0; //可删此灯,有冲突 29 sbit we = P2 ^ 7; 30 sbit du = P2 ^ 6; 31 32 void Delayms(uint z) 33 { 34 uint x, y; 35 for (x = 0; x < z; x++) 36 for (y = 0; y < 114; y++); 37 } 38 39 //时分秒显示函数 40 void Dispaly1(uchar hour, uchar minute, uchar second) 41 { 42 //数码管1 43 P0 = b[8]; 44 we = 1; 45 we = 0; 46 P0 = a[hour / 10]; 47 du = 1; 48 du = 0; 49 P0 = b[0]; 50 we = 1; 51 we = 0; 52 Delayms(1); 53 //数码管2 54 P0 = b[8]; 55 we = 1; 56 we = 0; 57 P0 = a[hour % 10]; 58 du = 1; 59 du = 0; 60 P0 = b[1]; 61 we = 1; 62 we = 0; 63 Delayms(1); 64 //数码管2小数点 65 P0 = b[8]; 66 we = 1; 67 we = 0; 68 P0 = a[10]; 69 du = 1; 70 du = 0; 71 P0 = b[1]; 72 we = 1; 73 we = 0; 74 Delayms(1); 75 //数码管3 76 P0 = b[8]; 77 we = 1; 78 we = 0; 79 P0 = a[minute / 10]; 80 du = 1; 81 du = 0; 82 P0 = b[2]; 83 we = 1; 84 we = 0; 85 Delayms(1); 86 //数码管4 87 P0 = b[8]; 88 we = 1; 89 we = 0; 90 P0 = a[minute % 10]; 91 du = 1; 92 du = 0; 93 P0 = b[3]; 94 we = 1; 95 we = 0; 96 Delayms(1); 97 //数码管4小数点 98 P0 = b[8]; 99 we = 1; 100 we = 0; 101 P0 = a[10]; 102 du = 1; 103 du = 0; 104 P0 = b[3]; 105 we = 1; 106 we = 0; 107 Delayms(1); 108 //数码管5 109 P0 = b[8]; 110 we = 1; 111 we = 0; 112 P0 = a[second / 10]; 113 du = 1; 114 du = 0; 115 P0 = b[4]; 116 we = 1; 117 we = 0; 118 Delayms(1); 119 //数码管6 120 P0 = b[8]; 121 we = 1; 122 we = 0; 123 P0 = a[second % 10]; 124 du = 1; 125 du = 0; 126 P0 = b[5]; 127 we = 1; 128 we = 0; 129 Delayms(1); 130 } 131 132 133 //年月日显示函数 134 void Dispaly2(uint year, uchar month, uchar day) 135 { 136 //数码管1 137 P0 = b[8]; 138 we = 1; 139 we = 0; 140 P0 = a[year / 1000]; 141 du = 1; 142 du = 0; 143 P0 = b[0]; 144 we = 1; 145 we = 0; 146 Delayms(1); 147 148 //数码管2 149 P0 = b[8]; 150 we = 1; 151 we = 0; 152 P0 = a[(year % 1000) / 100]; 153 du = 1; 154 du = 0; 155 P0 = b[1]; 156 we = 1; 157 we = 0; 158 Delayms(1); 159 160 //数码管3 161 P0 = b[8]; 162 we = 1; 163 we = 0; 164 P0 = a[(year % 100) / 10]; 165 du = 1; 166 du = 0; 167 P0 = b[2]; 168 we = 1; 169 we = 0; 170 Delayms(1); 171 172 //数码管4 173 P0 = b[8]; 174 we = 1; 175 we = 0; 176 P0 = a[year % 10]; 177 du = 1; 178 du = 0; 179 P0 = b[3]; 180 we = 1; 181 we = 0; 182 Delayms(1); 183 184 //数码管4小数点 185 P0 = b[8]; 186 we = 1; 187 we = 0; 188 P0 = a[10]; 189 du = 1; 190 du = 0; 191 P0 = b[3]; 192 we = 1; 193 we = 0; 194 Delayms(1); 195 196 //数码管5 197 P0 = b[8]; 198 we = 1; 199 we = 0; 200 P0 = a[month / 10]; 201 du = 1; 202 du = 0; 203 P0 = b[4]; 204 we = 1; 205 we = 0; 206 Delayms(1); 207 208 //数码管6 209 P0 = b[8]; 210 we = 1; 211 we = 0; 212 P0 = a[month % 10]; 213 du = 1; 214 du = 0; 215 P0 = b[5]; 216 we = 1; 217 we = 0; 218 Delayms(1); 219 //数码管6小数点 220 P0 = b[8]; 221 we = 1; 222 we = 0; 223 P0 = a[10]; 224 du = 1; 225 du = 0; 226 P0 = b[5]; 227 we = 1; 228 we = 0; 229 Delayms(1); 230 //数码管7 231 P0 = b[8]; 232 we = 1; 233 we = 0; 234 P0 = a[day / 10]; 235 du = 1; 236 du = 0; 237 P0 = b[6]; 238 we = 1; 239 we = 0; 240 Delayms(1); 241 //数码管8 242 P0 = b[8]; 243 we = 1; 244 we = 0; 245 P0 = a[day % 10]; 246 du = 1; 247 du = 0; 248 P0