|
直接發包 兩個包 ,兩個電路有點差別 ,程序是一樣的,都proteus圖加源代碼 ,加生成好的hex、
帶小時 分鐘時間設置和 12/24 小時顯示按鈕
基于51單片機和PCF8583的電子鐘設計proteus仿真原理圖如下(工程文件可到附件下載):
0.png (32.65 KB, 下載次數: 121)
下載附件
2017-6-7 03:16 上傳
0.png (42.2 KB, 下載次數: 137)
下載附件
2017-6-7 03:14 上傳
0.png (49.28 KB, 下載次數: 110)
下載附件
2017-6-7 03:13 上傳
單片機源程序如下:
- //-------------------------------------------------------------------
- //名稱:高度仿真數碼管電子鐘
- //-------------------------------------------------------------------
- //說明:本例在Proteus中選用了高仿真的電子鐘元器件,并添加了時分調整
- // 功能,閃爍顯示,AM/PM切換,12h/24h制選擇等。
- #include <reg51.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar tCount=0;
- //時鐘設置開關及按鍵
- sbit K1=P0^0; //12h/24h
- sbit K2=P0^1; //設置
- sbit K3=P0^2; //小時加
- sbit K4=P0^3; //時鐘加
- //當前時間:時分秒
- uchar current_Time[ ]={12,59,00};
- //時分秒顯示緩沖(各占兩位),最后的0x00控制AM,PM及發光管閃光等
- uchar disp_Buffer[ ]={0,0,0,0,0,0,0x00};
- //12h,24h,AM,PM及SET控制標志
- uchar f_24=0,f_AM=0,f_set=0;
- //--------------------------------------------------------------------
- //延時
- //--------------------------------------------------------------------
- void DelayMS(uint x)
- {
- uchar i;
- while(--x) for (i=0;i<120;i++);
- }
- //--------------------------------------------------------------------
- //加時
- //--------------------------------------------------------------------
- void Add_Hour()
- {
- //小時數累加
- ++current_Time[0];
- //24小時制時滿24歸零
- if (f_24 ==1 && current_Time[0] == 24 ) current_Time[0] = 0;
- //12h制滿13歸1,且取反AM與PM標志
- if (f_24==0 && current_Time[0]==13)
- {
- current_Time[0]=1;
- //將原來的AM與PM位取反
- disp_Buffer[6]=(disp_Buffer[6]&0xFE)|(~(disp_Buffer[6]&0x01)&0x01);
- }
-
- }
- //--------------------------------------------------------------------
- //加分
- //--------------------------------------------------------------------
- void Add_Miniute()
- {
- //分鐘數累加
- ++current_Time[1];
- if (current_Time[1]==60)
- {
- current_Time[1]=0;
- Add_Hour();
- }
- }
- //--------------------------------------------------------------------
- //根據當前時間刷新時分秒顯示緩沖
- //--------------------------------------------------------------------
- void Refresh_Disp_Buffer()
- {
- uchar i;
- //刷新顯示緩沖
- for (i=0;i<3;i++)
- {
- disp_Buffer[2*i] = current_Time[i]/10;
- disp_Buffer[2*i+1] =current_Time[i]%10;
- }
- }
- //--------------------------------------------------------------------
- //外部中斷
- //--------------------------------------------------------------------
- void EX0_INT() interrupt 0
- {
- ++tCount;
- if (tCount==25) disp_Buffer[6] &=0xF7;//每0.5秒 LED[:]點亮
- if (tCount==50) //每秒刷新顯示緩沖等
- {
- tCount=0;
- disp_Buffer[6] |=0x08; //每1秒 LED[:]關閉
- if (++current_Time[2] == 60) //秒遞增
- {
- current_Time[2]=0;
- Add_Miniute();
- }
- Refresh_Disp_Buffer(); //刷新時分秒的顯示緩沖
- }
- }
- //--------------------------------------------------------------------
- //顯示時間
- //--------------------------------------------------------------------
- void Display_Time()
- {
- uchar i;
- for (i=0;i<7;i++)
- {
- P2=(disp_Buffer[i]<<4)|i|0x08; DelayMS(5);
- P2=P2&0xF7; DelayMS(5);
- }
- }
- //--------------------------------------------------------------------
- //時鐘調整與設置
- //--------------------------------------------------------------------
- void adjust_and_set_clock()
- {
- //設置狀態下,調整時與分,12h/24h制等
- while (K2==0)
- {
- //設置12h/24h制
- if (K1==0) //切換12h/24h制
- {
- f_24=1;disp_Buffer[6]|=0x02;
- }
- else
- {
- f_24=0;disp_Buffer[6]&=0xFD;
- }
- //加小時
- if (K3==0)
- {
- DelayMS(150);//小時增加時會影響am,pm標志,因此這里可調用數
- Add_Hour();
- }
- //加分鐘
- if (K4==0)
- {
- DelayMS(150);//因為加分鐘的函數會向小時進位,故單獨增加
- current_Time[1]=(current_Time[1]+1)%60;
- }
- Refresh_Disp_Buffer();
- Display_Time();
- }
- }
- //---------------------------------------------------------------------
- //按鍵掃描子程序
- //---------------------------------------------------------------------
- void Keyboard_scan()
- {
- if (K1==0) //切換12h/24h制
- {
- f_24=1;disp_Buffer[6]|=0x02;
- }
- else
- {
- f_24=0;disp_Buffer[6]&=0xFD;
- }
- if (K2==0) //顯示或關閉"set"
- {
- EX0=0;f_set=1;disp_Buffer[6] |=0x04;
- }
- else
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
高仿真數碼管電子鐘.rar
(28.92 KB, 下載次數: 60)
2017-6-6 23:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
高仿真電子鐘單片機1.rar
(24.51 KB, 下載次數: 57)
2017-6-6 23:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|