標題: 基于51單片機的串口通信+帶I2C存儲+時間+鬧鐘+按鍵+狀態機+定時中斷源碼 [打印本頁]
作者: 999994 時間: 2018-4-10 15:28
標題: 基于51單片機的串口通信+帶I2C存儲+時間+鬧鐘+按鍵+狀態機+定時中斷源碼
分享個基于51單片機設計的 串口通信+帶I2C存儲+時間+鬧鐘+按鍵+狀態機+定時中斷
矩陣 按鍵 中 隨意抽取 6個按鍵 來完成一下功能:
1) K1 ,K3,K5 分別為 秒鐘,分鐘,小時的+1功能;
2) K2 ,K4,K6 分別為 秒鐘,分鐘,小時的 -1功能;
3) K7 切換顯示 時間 和鬧鐘的;
0.jpg (37.23 KB, 下載次數: 32)
下載附件
2018-4-10 17:17 上傳
全時鐘自動運行 的邏輯
全時鐘自動運行 代碼 邏輯(流程)分析
時鐘的原理
小時 - 分鐘 - 秒鐘
分鐘由59—>0時刻+1 秒鐘由59—>0時刻 +1 每一秒加1
/*******************************************************************/
定義全局變量a_mstime=0 , 累計本代碼的總共毫秒數量(最后看這個定義)
定義全局變量 flag=0 , 讓秒鐘自動加1的一個信號。 (最后看這個定義)
主函數
{
定義 數碼管顯示數組 00-00-00 ,長度為8;
定義 時間數組 23,55,35 (小時,分鐘,秒鐘)
while(1)
{
判斷flag == 1 ;
秒鐘+1 ;(還要確保 0 – 59 之間)
判斷秒鐘 >= 60
秒鐘 = 0;( 由60變成 0 , 60出現的時間多長?4us左右,4us之前59出現了1秒了) 59(1s)—>60(4us) —>0(1秒)
分鐘 +1;(也要控制分鐘取值范圍0-59)
判斷分鐘 >= 60
分鐘 = 0;
小時 +1;(控制小時取值范圍0-23)
判斷按鍵1是否按下
如果按下,去抖,等待完全松開
讓秒鐘加1;(你可以寫任何你想做的事情)
判斷按鍵2是否按下
如果按下,去抖,等待完全松開
讓分鐘加1;(你可以寫任何你想做的事情)
判斷按鍵3是否按下
如果按下,去抖,等待完全松開
讓小時加1;(你可以寫任何你想做的事情)
把時間數組[3] 拆解到 顯示數組[8]里面去;
通過函數LED7_display(a, 8); 把拆解后的時間顯示出來
}
}
子函數LED7_display(a, 8)
{
把a里面的8個內容逐個的送到每個數碼管顯示,
調用8次ms_delay(2);(每個數碼管 要消耗2ms 的點亮時間;)
}
子函數ms_delay(毫秒數量) // 就是模仿小孩子 等人 時的 數數(動名)
{
2個空循環;
///////////////////////////
a_mstime += 毫秒數量;(把本代碼的毫秒數累計起來)
判斷a_mstime 大于等于 1000 的時刻,
flag =1 ;秒鐘加1的信號
a_mstime = a_mstime-1000 ;
}
-------------------------------------
秒鐘自動+1 的邏輯
秒鐘自動加1的 代碼 邏輯(流程)分析
定義全局變量a_mstime=0 , 累計本代碼的總共毫秒數量(最后看這個定義)
定義全局變量 flag=0 , 讓秒鐘自動加1的一個信號。 (最后看這個定義)
主函數
{
定義 數碼管顯示數組 00-00-00 ,長度為8;
定義 時間數組 23,55,35 (小時,分鐘,秒鐘)
while(1)
{
判斷flag == 1 ;
秒鐘+1 ;(還要確保 0 – 59 之間)
判斷按鍵1是否按下
如果按下,去抖,等待完全松開
讓秒鐘加1;(你可以寫任何你想做的事情)
判斷按鍵2是否按下
如果按下,去抖,等待完全松開
讓分鐘加1;(你可以寫任何你想做的事情)
判斷按鍵3是否按下
如果按下,去抖,等待完全松開
讓小時加1;(你可以寫任何你想做的事情)
把時間數組[3] 拆解到 顯示數組[8]里面去;
通過函數LED7_display(a, 8); 把拆解后的時間顯示出來
}
}
子函數LED7_display(a, 8)
{
把a里面的8個內容逐個的送到每個數碼管顯示,
調用8次ms_delay(2);(每個數碼管 要消耗2ms 的點亮時間;)
}
子函數ms_delay(毫秒數量) // 就是模仿小孩子 等人 時的 數數(動名)
{
2個空循環;
///////////////////////////
a_mstime += 毫秒數量;(把本代碼的毫秒數累計起來)
判斷a_mstime 大于等于 1000 的時刻,
flag =1 ;秒鐘加1的信號
a_mstime = a_mstime-1000 ;
}
單片機源程序如下:
-
- #include <reg52.h>
- #include <type_h.h>
- #include <timer.h>
- #include <key.h>
- #include <LED_7.h>
- #include <alarm.h>
- #include <I2CROM.h>
- #include <com.h>
- void main()
- {
- uint8 key = 0;
- uint16 ms = 50 ;
- //uint8 LED7_len = 8 ; // 顯示長度 初始8 ,鬧鐘長度為5
- ms_delay(100);
- Timer0_set() ; //初始化 定時器 T0
- x24c02_init();
- read_time() ; //包含了 數據校驗
- Com_Init() ;
- while(1)
- {
-
- maketime(b);
- Naozhong() ;
- key = Keyx_scanf(); // 此 函數 內部已經 做好了 去抖動 等一系列操作
- key_do_something(key);
- // 根據 顯示指針 所指向的 對象,來確定 顯示的長度
- LED7_display(disp, 8); //數碼管顯示 耗時16ms
- Task_sendtime() ;
- ms_delay(1);
-
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
串口通信 帶I2C存儲 時間 鬧鐘 按鍵 狀態機 定時中斷.rar
(105.16 KB, 下載次數: 119)
2018-4-10 15:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: cezhua 時間: 2019-4-24 21:10
學習一下
作者: 大山兒子20@ 時間: 2023-12-2 17:56
期盼壇主能發電路仿真圖protues
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
亚洲精品乱码久久久久久9色
|
99爱在线
|
五月婷婷亚洲
|
女生羞羞视频
|
国产91丝袜在线播放
|
午夜精品三区
|
亚洲高清av
|
欧美精品一区二区三区在线播放
|
亚洲精品一区二区
|
国产亚洲一区二区在线观看
|
国产成人jvid在线播放
|
伊人狠狠操
|
国产乱xxav
|
草逼网站
|
精品亚洲一区二区三区四区五区
|
99视频免费播放
|
av在线免费观看网站
|
日韩欧美国产一区二区三区
|
亚洲精品色
|
91精品国产综合久久久久久丝袜
|
日韩午夜一区二区三区
|
久久不卡
|
精品国产一区二区三区久久狼黑人
|
特级做a爰片毛片免费看108
|
国产精品久久久久久久久久久久
|
国产一级片网站
|
亚洲成人一区
|
国产精品a免费一区久久电影
|
精品国产乱码久久久久久1区2区
|
天天拍天天操
|
亚洲精品国产偷自在线观看
|
亚洲一区中文字幕在线观看
|
国产视频一区二区在线观看
|
91麻豆精品一区二区三区
|
免费一区二区在线观看
|
久久久看
|
久久久久久久一区
|
操操网站
|
亚洲精品99
|
91亚洲欧美
|
国产日韩欧美在线观看
|