久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于51單片機的數字電子鐘C程序設計 仿真圖
[打印本頁]
作者:
51黑科技
時間:
2016-2-4 03:40
標題:
基于51單片機的數字電子鐘C程序設計 仿真圖
/***************************lns主程序snl***************************/
#include <absacc.h> //包含頭文件
#include <reg52.h> //包含頭文件
/***************************數據類型定義***************************/
#define uchar unsigned char //數據類型定義
/*************************定義變量并初始化*************************/
uchar n=31; //定義月份天數變量并初始化
uchar ms=0; //定義毫秒變量并初始化
uchar h1=0,m1=0,s1=0; //定義計時時、分、秒變量并初始化
uchar h2=0,m2=1,s2=1; //定義定時時、分、秒變量并初始化
uchar year=7,month=9,day=8; //定義年、月、日變量并初始化
uchar wday=6; //定義星期變量并初始化
uchar *h=&h1,*m=&m1,*s=&s1; //定義顯視位變量并初始化
uchar *p; //定義調節指針
uchar k1=0,k2=0,k3=0,k4=0,k5=0; //定義控制變量并初始化
uchar counter=0; //定義鈴聲節拍變量并初始化
uchar count=0; //定義鈴聲音符變量并初始化
sbit sound=P1^0; //定義鈴聲輸出位
uchar a[8]={1,2,3,4,5,6,7}; //定義顯視輸出位數組并初始化
uchar code tt[12]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x40,0x00
}; //數碼管顯視代碼
uchar code array[]={
0x18, 0x30, 0x1C, 0x10, 0x20, 0x40, 0x1C, 0x10,
0x18, 0x10, 0x20, 0x10, 0x1C, 0x10, 0x18, 0x40,
0x1C, 0x20, 0x20, 0x20, 0x1C, 0x20, 0x18, 0x20,
0x20, 0x80, 0xFF, 0x00, 0x20, 0x30, 0x1C, 0x10,
0x18, 0x20, 0x15, 0x20, 0x1C, 0x20, 0x20, 0x20,
0x26, 0x40, 0x20, 0x20, 0x2B, 0x20, 0x26, 0x20,
0x20, 0x20, 0x30, 0x80, 0xFF, 0x00, 0x20, 0x20,
0x1C, 0x10, 0x18, 0x10, 0x20, 0x20, 0x26, 0x20,
0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40, 0x20, 0x20,
0x1C, 0x10, 0x18, 0x10, 0x20, 0x20, 0x26, 0x20,
0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40, 0x20, 0x30,
0x1C, 0x10, 0x18, 0x20, 0x15, 0x20, 0x1C, 0x20,
0x20, 0x20, 0x26, 0x40, 0x20, 0x20, 0x2B, 0x20,
0x26, 0x20, 0x20, 0x20, 0x30, 0x80, 0x20, 0x30,
0x1C, 0x10, 0x20, 0x10, 0x1C, 0x10, 0x20, 0x20,
0x26, 0x20, 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40,
0x20, 0x15, 0x1F, 0x05, 0x20, 0x10, 0x1C, 0x10,
0x20, 0x20, 0x26, 0x20, 0x2B, 0x20, 0x30, 0x20,
0x2B, 0x40, 0x20, 0x30, 0x1C, 0x10, 0x18, 0x20,
0x15, 0x20, 0x1C, 0x20, 0x20, 0x20, 0x26, 0x40,
0x20, 0x20, 0x2B, 0x20, 0x26, 0x20, 0x20, 0x20,
0x30, 0x30, 0x20, 0x30, 0x1C, 0x10, 0x18, 0x40,
0x1C, 0x20, 0x20, 0x20, 0x26, 0x40, 0x13, 0x60,
0x18, 0x20, 0x15, 0x40, 0x13, 0x40, 0x18, 0x80,
0x00, 0x00
}; //array[i]=0x00 代表歌曲演唱完畢
//array[i]=0xff 代表是休止符
/*******************************************************************
* 函數名稱:leap()
* 功 能:計算二月份天數
* 入口參數:year
* 出口參數:無
*******************************************************************/
uchar leap(uchar year) //判斷是否閏年并返回二月份的天數
{ //閏年返回29,平年返回28
year+=2000;
if(year%4==0)
{if(year%100==0)
{if(year%400==0)
return 29;
else return 28;
}
else return 29;
}
else return 28;
}
/*******************************************************************
* 函數名稱:mon()
* 功 能:計算并返回每個月的天數
* 入口參數:month
* 出口參數:無
*******************************************************************/
uchar mon(uchar month) //計算并返回每個月的天數
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:return 31;break; //1,3,5,7,8,10,12月每月31天
case 4:
case 6:
case 9:
case 11:return 30;break; //4,6,9,11月每月30天
case 2: return leap(year);break;//返回二月份的天數
default:break;
}
}
/*******************************************************************
* 函數名稱:music()
* 功 能:音樂節拍控制
* 入口參數:無
* 出口參數:無
*******************************************************************/
void music(void) //鈴聲音樂
{
counter++; //節拍次數計數
if(counter>=array[count+1]) //節拍次數判斷
{
count+=2; //音符變換
counter=0; //清0節拍數
if(count>=192) //判斷是否唱完一曲
count=0; //返回第一個音符
}
}
/*******************************************************************
* 函數名稱:timer1()
* 功 能:音樂頻率設置
* 入口參數:無
* 出口參數:無
*******************************************************************/
void timer1(void)interrupt 1 using 1 //音調設置
{
sound=~sound; //鈴聲輸出
TH0=(0xffff-30*array[count])>>8; //音頻設置
TL0=(0xffff-30*array[count])&0xff;
}
/*******************************************************************
* 函數名稱:timer3()
* 功 能:中斷計時
* 入口參數:無
* 出口參數:無
*******************************************************************/
void timer3(void) interrupt 3 using 3 //計時中斷
{
TH1=0xd8; //計數器初值重載
TL1=0xef; //定義單位節拍的延時大小為10ms
if(k5)music(); //調用鬧鈴音樂lns
else TR0=0; //達到所設鬧鈴時間長度關鈴聲
if(++ms==100) //計時一秒鐘
{ms=0;
if(++s1==60) //計時一分鐘
{s1=0;
if(++m1==60) //計時一小時
{m1=0;
if(++h1==24) //計時一天
{h1=0;
n=mon(month); //取每月的天數
if(++day>n) //計時一個月
{day=1;
if(++month>12) //計時一年
{month=1;
year++;
}
}
if(++wday>6) //星期計數
wday=0;
}
}
k5--; //鬧鈴時間長度倒記時
if(h1==h2&&m1==m2) //判斷是否到定時時刻
{
TR0=1; //開鈴聲中斷lns
k5=s2; //設置鬧鈴時間長度
}
}
}
}
/*******************************************************************
* 函數名稱:d3()
* 功 能:數碼管輸出顯示
* 入口參數:無
* 出口參數:無
*******************************************************************/
void d3(void) //顯示輸出
{
uchar sel=0x80,i ; //定義sel為位選通變量并初使化
if(k2) //判斷是否處于調時狀態
{
if(k2==4)a[0]=a[1]=a[4]=a[6]=a[7]=10; //星期顯示設置
if(k1&&(k3--==0)) k3=255; //設置位調節閃爍初值
}
for(i=0;i<=8;i++) //循環顯示八個數碼管
{
P2=0xff; //清屏
P0=tt[a[i]]; //輸出顯示數值
if(k1&&(k3>200)) //判斷是否閃爍
if (k1==1&&(i==6||i==7))P2=0xff; //時位閃爍
else if(k1==2&&(i==3||i==4))P2=0xff; //分位閃爍
else if(k1==3&&(i==0||i==1))P2=0xff; //秒位閃爍
else P2=~sel; //非閃爍狀態
else P2=~sel; //非閃爍狀態
sel=sel>>1; //顯示位移位
}
}
/*******************************************************************
* 函數名稱:d2()
* 功 能:循環調用
* 入口參數:無
* 出口參數:無
*******************************************************************/
void d2(void)
{
while(1)
{
a[0]=*s%10; //給顯示數組賦值
a[1]=*s/10;
a[2]=10;
a[3]=*m%10;
a[4]=*m/10;
a[5]=10;
a[6]=*h%10;
a[7]=*h/10;
d3(); //調用顯示輸出函數
}
}
/*******************************************************************
* 函數名稱:d1()
* 功 能:中斷設置
* 入口參數:無
* 出口參數:無
*******************************************************************/
void d1(void)
{
TMOD=0x11;
TH1=0xff; TH0=0xff;
TL1=0xff; TL0=0xff;
IE=0x8f;
TR1=1;
IT0=1; IT1=1;
IP=0x02;
}
/*******************************************************************
* 函數名稱:main()
* 功 能:程序入口,調用功能子函數
* 入口參數:無
* 出口參數:無
*******************************************************************/
void main(void) {
d1(); //調用中斷位設置函數
d2();
}
/*******************************************************************
* 函數名稱:d5()
* 功 能:切換顯示菜單
* 入口參數:無
* 出口參數:無
*******************************************************************/
void d5(void) //顯示菜單調節函數
{
switch(k2)
{
case 1:{h=&h1; m=&m1; s=&s1; }break; //菜單1:顯示時鐘時間
case 2:{h=&h2; m=&m2; s=&s2; }break; //菜單2:顯示定時時刻
case 3:{h=&year;m=&month;s=&day; }break; //菜單3:顯示日歷年月日
case 4:{h=&wday;m=&wday; s=&wday;}break; //菜單4:顯示星期0--6
default:{k2=0;h=&h1;m=&m1;s=&s1; }break; //復位顯示
}
}
/*******************************************************************
* 函數名稱:d7()
* 功 能:調節限制,防止數值調節超出值域
* 入口參數:無
* 出口參數:無
*******************************************************************/
void d7(void) //調節限制函數
{
if(k2==1||k2==2) //計時與定時限制
if (k1==1&&*p>=24) *p=0; //小時限制
else if(*p>=60) *p=0; //分、秒限制
if(k2==3) //日歷限制
if (k1==1&&*p>=100)*p=0; //年限制
else if(k1==2&&*p>12) *p=1; //月限制
else if(k1==3&&*p>n) *p=1; //日限制
if(k2==4)
if (k1==2&&*p>6) *p=0; //星期限制
}
/*******************************************************************
* 函數名稱:timer0()
* 功 能:菜單切換及位加數調節
* 入口參數:無
* 出口參數:無
*******************************************************************/
/**外部中斷1調節函數**/
void timer0(void)interrupt 0 using 0 //外部中斷0調節
{
if(k1) //判斷是位調節還是菜單調節
{
(*p)++; //位加數調節
d7(); //調用調節限制函數
}
else
{
k2++; //菜單加數調節
d5(); //調用調節菜單
}
}
/*******************************************************************
* 函數名稱:timer2()
* 功 能:調節位選擇及關鈴聲
* 入口參數:無
* 出口參數:無
*******************************************************************/
void timer2(void)interrupt 2 using 2 //外部中斷1調節
{
TR0=0;k5=0; //手動關鈴聲
if(k2) //斷是否處于調節狀態
{
if (k2==4){k1++;} //期調節位選擇
if (++k1==1) p=h; //選擇時位
else if(k1==2) p=m; //選擇分位
else if(k1==3) p=s; //選擇秒位
else k1=0; //復位
}
}
/***************************lns主程序snl***************************/
復制代碼
作者:
2719881771
時間:
2017-12-20 14:36
6想下載仿真
作者:
45e67
時間:
2017-12-27 11:05
學習學習了
作者:
123asasd
時間:
2018-5-7 12:23
為什么我的不可以運行成功結果?是不是程序中缺少主函數的緣故?
可以給一下源代碼和仿真文件給我嗎?謝謝!!!!
作者:
1642284037
時間:
2018-6-9 19:34
哈哈,學習一下、謝謝老大
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
最新伦理片
|
欧美日韩在线电影
|
国产美女在线免费观看
|
欧美在线观看一区
|
一区二区三区在线观看视频
|
国产亚洲成av人片在线观看桃
|
国产免费一区二区三区免费视频
|
色综合美女
|
在线观看中文字幕视频
|
日韩一区在线播放
|
亚州无限乱码
|
美女艹b
|
亚洲精品久久区二区三区蜜桃臀
|
成人黄色电影在线观看
|
色婷婷av一区二区三区软件
|
色精品
|
一a一片一级一片啪啪
|
精品一区二区久久
|
好姑娘影视在线观看高清
|
孰女乱色一区二区三区
|
91小视频在线
|
午夜网站视频
|
日韩www
|
精品亚洲一区二区三区四区五区
|
爱综合
|
av在线免费网
|
亚洲一区久久
|
一区二区亚洲
|
91中文字幕在线
|
成人国产精品一级毛片视频毛片
|
成人永久免费
|
日本精品一区二区三区视频
|
久草.com
|
九九亚洲
|
国产精品永久免费观看
|
91激情视频
|
日本黄色大片免费
|
免费在线黄色av
|
欧美日韩一
|
国产成人精品久久二区二区91
|
欧美阿v
|