久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機C編程(六、定時器時鐘顯示時分秒)
[打印本頁]
作者:
小寶寶不小了
時間:
2017-7-7 09:44
標題:
51單片機C編程(六、定時器時鐘顯示時分秒)
六位數碼管顯示時分秒,通過四個按鍵進行時間的控制。按下"調時"按鍵,時間顯示停止;按下"選擇時分秒"按鍵,數碼管上方的發光二極管會點亮,對應著選中的要修改的時間是小時、分鐘還是秒;按下"按下增加"按鍵,選中的時間將會增加;按下"完成"按鍵,時間繼續顯示。
已通過proteus仿真,電路圖如下所示,希望大家多多指點,積極留言:
611fac9746edd8122be24.jpg
(196.11 KB, 下載次數: 73)
下載附件
2017-7-10 02:38 上傳
//編程:jumpmysoul
#include<reg52.h>
#define ulong unsigned long
char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽數碼管數字碼
char tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x70,0x10};//共陽數碼管數字碼(帶小數點)
#define LED P0 //P0為數碼管的段選
#define LIGHT P1 //P1為時分秒位的指示燈
#define WS P2 //P2為數碼管的位選
sbit time_change=P3^0; //P3^0為“調時”按鍵
sbit time_choose=P3^1; //P3^1為“選擇時分秒”按鍵
sbit time_inc=P3^2; //P3^2為“增加”按鍵
sbit time_ok=P3^3; //P3^3為“完成”按鍵
ulong t;
ulong sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi; //定義秒,分,時,秒的個位,十位,分的個位,十位,時的個位,十位
int choose_n; //按下“選擇時分秒”按鍵的次數
int flag; //定義“調時”按鍵的標志位
//---------------------------------------------------------------------
void init();
void display();
void delay(int);
void time_modify();
//---------------------------------------------------------------------
void main()
{
init();
while(1)
{
TR0=1;
display();
time_modify();
}
}
//---------------------------------------------------------------------
void init()
{
WS=t=LIGHT=choose_n=0;
sec_ge=sec_shi,min_ge,min_shi,hour_ge,hour_shi=sec=min=hour=flag=0;
TMOD=0x01; //定義定時器0工作與方式1
TH0=(65536-5536)/256; //定時器賦初值
TL0=(65536-5536)%256;
EA=1; //開總中斷和T0中斷
ET0=1;
}
//--------------------------------延時子函數------------------------------------
void delay(int x)
{
int i,j;
for(i=x;i>0l;i--)
for(j=255;j>0;j--);
}
//-------------------------------顯示子函數---------------------------------------
void display()
{
int i=0;
if(TF0==1) //如果定時器溢出
{
TF0=0; //清中斷標志位
t++;
if(t==10)
{
t=0;
sec++; //秒加1
if(sec==60) //如果秒為60,則清零,分加1
{
sec=0;
min++;
}
if(min==60) //如果分為60,則清零,時加1
{
min=0;
hour++;
}
if(hour==24) //如果時為24,則清零
{
hour=0;
}
}
}
sec_ge=sec%10; //秒的個位和十位
sec_shi=sec/10;
min_ge=min%10; //分的個位和十位
min_shi=min/10;
hour_ge=hour%10; //時的個位和十位
hour_shi=hour/10;
WS=0x20; //循環掃描
LED=tab[sec_ge];
delay(1);
WS=0x10;
LED=tab[sec_shi];
delay(1);
WS=0x08;
LED=tab_dp[min_ge];
delay(1);
WS=0x04;
LED=tab[min_shi];
delay(1);
WS=0x02;
LED=tab_dp[hour_ge];
delay(1);
WS=0x01;
LED=tab[hour_shi];
delay(1);
}
//----------------------------調時子程序-------------------------------
void time_modify()
{
if(time_change==0) //如果“調時”按鍵按下
{
delay(5); //延時去抖
if(time_change==0)
{
flag=1; //標志位置1
while(flag) //當標志位為1時才能進行時間調整
{
TR0=0; //定時器停止
display(); //顯示停止時的時間
if(time_ok==0) //如果“完成”按鍵按下
{
delay(15); //延時去抖
if(time_ok==0)
{
flag=0; //標志位清零
}
}
if(time_choose==0) //如果“時分秒選擇”按鍵按下
{
delay(30); //延時去抖
if(time_choose==0)
{
++choose_n; //按下的次數增加
if(choose_n==4) //如果次數達到4次
{
choose_n=1; //次數清零
}
if(choose_n==1) //如果次數為1,秒指示燈亮
{
LIGHT=0x03;
}
else if(choose_n==2) //如果次數為2,分指示燈亮
{
LIGHT=0x0c;
}
else if(choose_n==3) //如果次數為3,時指示燈亮
{
LIGHT=0x30;
}
}
}
if(time_inc==0) //如果“增加”按鍵按下
{
delay(30); //延時去抖
if(time_inc==0)
{
switch(choose_n) //分支結構,根據choose_n的值來判斷哪一位加1
{
case 1: //如果choose_n為1,秒加1,到60清零
{
sec++;
if(sec==60)
sec=0;
break;
}
case 2: //如果choose_n為2,分加1,到60清零
{
min++;
if(min==60)
min=0;
break;
}
case 3: //如果choose_n為3,時加1,到24清零
{
hour++;
if(hour==24)
hour=0;
break;
}
default:break;
}
}
}
}
}
}
}
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
中文字幕在线播放第一页
|
亚洲精品中文字幕
|
日韩精品一区二区三区视频播放
|
婷婷丁香在线视频
|
久久国产精品精品
|
av一区二区三区四区
|
欧美一级大黄
|
国产精品久久久久久福利一牛影视
|
日韩成人免费中文字幕
|
国产亚洲精品久久情网
|
亚洲午夜精品
|
一区二区在线免费观看
|
亚洲3级
|
中文字幕精品一区二区三区精品
|
欧美成人免费在线视频
|
av在线免费观看网站
|
免费成人在线网
|
久久久网
|
精品国产伦一区二区三区观看说明
|
精品一区二区三区在线视频
|
婷婷开心激情综合五月天
|
亚洲 中文 欧美 日韩 在线观看
|
日韩欧美第一页
|
亚洲视频欧美视频
|
精一区二区
|
91视频一88av
|
日韩一区二区在线观看
|
久久久久久国产精品免费免费狐狸
|
中文字幕在线视频观看
|
国产 日韩 欧美 在线
|
亚洲精品欧美一区二区三区
|
狠狠操你
|
日韩av黄色
|
国产欧美二区
|
欧美一级片在线
|
www.日本在线
|
亚洲电影一区二区三区
|
五月综合激情在线
|
亚洲国产一区在线
|
国产真实乱对白精彩久久小说
|
国产欧美精品
|