欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機電子鐘程序如何修改為靜態顯示?6位 時分秒 74hc595 6個74HC595 D1302
[打印本頁]
作者:
鬼推磨
時間:
2020-3-20 12:58
標題:
單片機電子鐘程序如何修改為靜態顯示?6位 時分秒 74hc595 6個74HC595 D1302
dbb44aed2e738bd4549dad5fa18b87d6277ff924.jpg
(234.96 KB, 下載次數: 43)
下載附件
2020-3-20 12:57 上傳
電子鐘程序 6位 時分秒 74hc595 6個74HC595 D1302 電子數碼鐘
具體見2樓
作者:
鬼推磨
時間:
2020-3-20 13:02
或者怎么把下面代碼改動增加實時時鐘模塊+DS1302模塊
簡單的來說,我需要靜態數碼鐘,。不需要那種動態掃描的數碼鐘
#include <reg51.h> //包含訪問sfr庫函數reg51.h
sbit K0=P1^2; //定義K0為P1.2(時鐘修正標志鍵)
sbit K1=P1^1; //定義K1為P1.1(修正移位鍵)
sbit K2=P1^0; //定義K2為P1.0(修正加1鍵)
sbit OEs=P1^3; //定義OEs為P1.3(秒輸出控制端,0有效)
sbit OEm=P1^4; //定義OEm為P1.4(分輸出控制端,0有效)
sbit OEh=P1^5; //定義OEh為P1.5(時輸出控制端,0有效)
sbit RCK=P1^6; //定義RCK為P1.6(輸出鎖存控制端,上升沿有效)
sbit LED=P1^7; //定義LED為P1.7(秒閃爍控制端,0有效)
unsigned int ms05=0; //定義0.5ms計數器ms05,并清0
unsigned char h=0, m=0, s=0; //定義時分秒計數器h、m、s,并清0
unsigned char n=0; //定義修正位序號n
unsigned char code c[10]={ //定義共陽逆序字段碼數組,并賦值
0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
void disp6 ( ){ //6位顯示子函數
unsigned char i; //定義序號變量i
unsigned char a[6]; //定義時分秒數組a[6]
a[5]=c[h/10]; a[4]=c[h%10]; //取出時顯示字段碼
a[3]=c[m/10]; a[2]=c[m%10]; //取出分顯示字段碼
a[1]=c[s/10]; a[0]=c[s%10]; //取出秒顯示字段碼
for (i=0; i<6; i++){ //6位顯示字段碼依次串行輸出
SBUF=a[i]; //串行發送一幀數據
while (TI==0); TI=0;} //等待一幀數據串行發送完畢,完畢后TI清0
RCK=0; RCK=1;} //595 RCK端輸入觸發正脈沖
void key ( ){ //時鐘修正鍵處理子函數
TR1=1; //時鐘修正鍵按下,T1運行(用于修正位閃爍)
if (K1==0){ //若移位鍵按下,則
while (K1==0); //等待移位鍵釋放
n++; //移位鍵釋放后,修正位序號加1
if (n==3) n=0;} //若序號超限,復0
if (K2==0){ //若加1鍵按下,則
while (K2==0); //等待加1鍵釋放
switch (n){ //switch散轉,根據修正位序號修正時分秒
case 0: {h++; //時計數器加1
if (h==24) h=0; break;} //若時計數器超限,復0,跳出加1循環
case 1: {m++; //分計數器加1
if (m==60) m=0; break;} //若分計數器超限,復0,跳出加1循環
case 2: {s++; //秒計數器加1
if (s==60) s=0; break;}} //若秒計數器超限,復0,跳出加1循環
disp6 ();}} //刷新顯示
void main ( ){ //主函數
TMOD=0x12; //置T0定時器方式2,T1定時器方式1(定時131ms)
SCON=0; //置串口方式0
TH0=TL0=0x06; //置T0定時0.5ms初值(fosc=6MHz)
IP=0x02; //置T0高優先級
TR0=1; //T0運行
IE=0x8a; //T0、T1開中,串行禁中
P1=0xc7; //秒閃爍暗
disp6 (); //595允許輸出,初始顯示0
while (1) { //無限循環
while (K0==1); //等待時鐘修正鍵按下
if (K0==0) key ();}} //修正鍵按下,調用時鐘修正鍵處理子函數
void t0( ) interrupt 1{ //T0中斷函數(0.5ms中斷)
ms05++; //0.5ms計數器加1
if (K0==1) {TR1=0; //若時鐘修正鍵已釋放,T1停運行
OEh=0; OEm=0; OEs=0;} //時分秒顯示停閃爍
if (ms05==1000) LED=!LED; //0.5s到,秒閃爍亮
if (ms05==2000) {LED=!LED; //1s到,秒閃爍暗
ms05=0; //0.5ms計數器清0
if (++s==60) {s=0; //秒計數器加1,滿60s,秒計數器清0
if (++m==60) {m=0; //分計數器加1,滿60m,分計數器清0
if (++h==24) h=0;}} //時計數器加1,滿24h,時計數器清0
disp6 ();}} //滿1s,刷新顯示
void t1( ) interrupt 3{ //T1中斷函數(修正位閃爍中斷)
switch (n) { //switch散轉,根據修正位序號閃爍
case 0: {OEh=!OEh; OEm=0; OEs=0; break;} //時顯示閃爍
case 1: {OEm=!OEm; OEh=0; OEs=0; break;} //分顯示閃爍
case 2: {OEs=!OEs; OEh=0; OEm=0; break;}}} //秒顯示閃爍
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1