有仿真有程序,需要的可以點擊下載哦
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (20.59 KB, 下載次數: 40)
下載附件
2019-1-12 17:06 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (35.78 KB, 下載次數: 37)
下載附件
2019-1-12 17:05 上傳
0.png (34.87 KB, 下載次數: 38)
下載附件
2019-1-12 17:05 上傳
單片機源程序如下:
- #include <reg52.h> //調用單片機頭文件
- #define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
- #define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
- #include "eeprom52.h"
- #include "nongli.h"
- #include "intrins.h"
- #include "keyscan.h"
- #include "ds1302.h"
- #include "lcd1602.h"
- #include "stop_watch.h"
- uchar flag_nl; //農歷 陽歷顯示標志位
- uchar key_time,flag_value; //用做連加的中間變量
- bit key_500ms ;
- /*************時鐘顯示***************/
- void init_1602_ds1302()
- {
- if(dis_mode == 0)
- {
- write_sfm2_ds1302(1,2,shi); //顯示時
- write_sfm2_ds1302(1,5,fen); //顯示分
- write_sfm2_ds1302(1,8,miao); //顯示秒
- write_week(2,12,week);
- //write_sfm1(1,14,week); //顯示星期
- if(flag_nl == 0) //顯示陽歷
- {
- write_sfm2_ds1302(2,2,nian); //顯示年
- write_sfm2_ds1302(2,5,yue); //顯示月
- write_sfm2_ds1302(2,8,ri); //顯示日
- }
- else //顯示農歷
- {
- write_sfm2_ds1302(2,2,n_nian); //顯示年
- write_sfm2_ds1302(2,5,n_yue); //顯示月
- write_sfm2_ds1302(2,8,n_ri); //顯示日
-
- }
- }
- if(dis_mode == 1) //顯示秒表
- {
- Stopwatch();
- }
- }
- /*****************主函數********************/
- void main()
- {
- delay_1ms(150);
- P0 = P1 = P2 = P3 = 0xff; //單片機IO口初始化為1
- init_time0(); //初始化定時器
- init_ds1302(); //ds1302初始化
- init_1602(); //lcd1602初始化
- init_1602_dis_csf(); //lcd1602初始化顯示
- while(1)
- {
- key(); //按鍵程序
- if(key_can < 10)
- {
- if(menu_1 == 0)
- {
- if(key_can == 4) //減鍵
- {
- if(dis_mode == 0)
- {
- flag_nl = ~flag_nl; //切換農歷和陽歷的顯示標志位
- if(flag_nl == 0)
- write_string(2,0,"2019");
- else
- write_string(2,0,"N ");
- }
- }
- }
- }
- if(dis_mode == 0)
- {
- if(flag_200ms == 1)
- {
- flag_200ms = 0;
- if(menu_1 == 0)
- {
- read_time(); //讀時間
- init_1602_ds1302(); //顯示時鐘
- }
- }
- delay_1ms(1);
- }
- if(dis_mode == 1)
- {
- init_1602_ds1302(); //顯示秒表
- if(menu_1 == 0)
- {
- if(key_can == 3) //加鍵
- {
- TR1 = ~TR1;
- }
- }
- }
- }
- }
- /**************定時器0中斷程序*****************/
- void time0() interrupt 1
- {
- static uchar value;
- TH0 = 0X3C;
- TL0 = 0XB0; //50ms
- value ++;
- if((value % 2) == 0) //100ms
- flag_100ms = 1;
- if(value >= 6) //200ms
- {
- value = 0;
- flag_200ms = 1;
- }
- }
- /**************切換顯示控制中斷函數*****************/
- void xianshimoshi()interrupt 0
- {
- clear_1602();
- dis_mode++;
- if(dis_mode != 1)init_1602_dis_csf();
- if(dis_mode > 1)
- dis_mode = 0;
- }
復制代碼
所有資料51hei提供下載:
版本1.rar
(388.45 KB, 下載次數: 74)
2019-1-12 09:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|