欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
ce單片機綜合實驗程序
[打印本頁]
作者:
我是你爸爸1111
時間:
2018-6-6 00:07
標題:
ce單片機綜合實驗程序
單片機綜合實驗源程序如下:
#include<reg52.h>
#include "disp.h"
#include "text.h"
#include "readkey.h"
uint code pulse_tab[100]={//脈沖數
213, 224, 235, 246, 258, 270, 283, 296, 310, 324,
339, 354, 370, 387, 404, 421, 439, 458, 477, 497,
518, 539, 561, 583, 606, 630, 654, 680, 705, 731,
758, 786, 814, 843, 873, 903, 934, 965, 997,1030,
1063,1097,1131,1166,1202,1238,1274,1311,1348,1386,
1424,1463,1502,1542,1581,1621,1662,1702,1743,1784,
1825,1867,1908,1950,1991,2033,2075,2116,2158,2200,
2241,2283,2324,2365,2406,2447,2487,2527,2567,2607,
2646,2686,2724,2763,2801,2838,2876,2913,2949,2985,
3020,3056,3090,3124,3158,3191,3224,3256,3288,3319};
//uchar code tab[]={0x4f,0xbf,0xdf,0xef,0xf4,0xfb,0xfd,0xfe,0xff};//串行口
void work_0();//時鐘模塊
void work_1();//時間設置模塊
void work_2();//鬧鐘時間設置模塊
void work_3();//溫度顯示模塊
void rkey();//矩陣鍵盤按鍵解釋
//void work_4();
void init();//初始化函數
void Delay();//延時函數
void init()
{
TMOD=0x51; //T1作計數器 T0作定時器 工作方式1
SCON=0X00;
// TCON=0x00;
TH0=0xf0;
TL0=0x60;
TR0=1;
msta=0;
// cnt1=0;
xs=0;
// buf0=0;
num4=1;//時鐘顯示初始值
num3=4;
num2=3;
num1=0;
nz4=1; //鬧鐘初始值
nz3=4;
nz2=3;
nz1=1;
}
void main()
{
init();
while(1)
{
while(!TF0);
TH0=0xF0;
TL0=0x60;
TF0=0;
readkey();
disp(light,num4,num3,num2,num1);
switch(msta)
{
case 0:
work_0();
break;
case 1:
work_1();
break;
case 2:
work_2();
break;
case 3:
work_3();
// case 4:
// work_4();
// break;
default:break;
}
}
}
void work_0() //時鐘模塊
{
light=18;
mcnt1++;
if(nz1==num1 && nz2==num2 && nz3==num3 && nz3==num3&&dp_1==1)//到設定鬧鐘的時間
{ //串行數碼管顯示“三”
SBUF = 0x6d;
// flon=1;
// tzsta++;
// if(tzsta>=4)
// tzsta=0;
}
else
{
SBUF =0xff;
// flon=0;
}
if(mcnt1>=125)//500ms到
{
dp_1^=1;
a++;
mcnt1=0;
}
if(a>120) //1s到
{a=0;
num1++; //秒滿60,秒歸零,向分進位
if(num1>=0x0a)
{num1=0;
num2++;
if(num2>=0x06)
{num2=0; //分滿60,分歸零,
if(num4<2) //時的十位在小于2區間,即十位為0或為1時
{num3++; //時的個位可取0到9,即可以從0加到9
if(num3>=0x0a)
{num3=0; //時的個位滿10,歸零,向十位進一
num4++;
}
}
else //當十位大于等于2時
{num3++; //時的個位正常增加
if(num3>=0x05) //直到時的個位因分為60進1,由4變為5的瞬間
{num1=num2=num3=num4=0; //各個顯示位都被置零
}
}
}
}
}
if(sw1)//跳轉時間設置模塊
{
msta=1;
flon=1;
dp_1=1;
}
if(K9) //跳轉鬧鐘設置模塊
{
msta=2;
num11=num1;//存儲當前時間
num22=num2;
num33=num3;
num44=num4;
}
if(sw2)//跳轉溫度計模塊
{
msta=3;
flon=0;
dp_1=0;
num11=num1; //存儲當前時間
num22=num2;
num33=num3;
num44=num4;
}
}
void work_1() //時間設置
{
light=19;
if(sw1)//跳轉時鐘模塊
{
msta=0;
flon=0;
}
if(K9) //跳轉鬧鐘設置模塊
{
msta=2;
num11=num1;//存儲當前時間
num22=num2;
num33=num3;
num44=num4;
}
if(K11)//選擇閃控位
{
tzsta++;
if(tzsta>=4)
tzsta=0;
}
if(K10)
{
switch(tzsta)//設置
{
case 0: num1++;
if(num1>=0x0a)
num1=0;
break;
case 1: num2++;
if(num2>=0x06)
num2=0;
break;
case 2: num3++;
if(num3>=0x0a)
num3=0;
break;
case 3: num4++;
if(num4>=0x06)
num4=0;
break;
default: break;
}
}
}
void work_2() //鬧鐘設置
{
light=20;
num1=nz1;
num2=nz2;
num3=nz3;
num4=nz4;
if(sw1) //跳轉時鐘模塊
{
msta=0;
flon=0;
num1=num11;
num2=num22;
num3=num33;
num4=num44;
}
if(K11)
{
tzsta++;
if(tzsta>=4)
tzsta=0;
}
rkey();
switch(tzsta)//設置
{
case 0: if(K10)
{nz1=xs;
num1=xs;}
break;
case 1: if(K10)
{nz2=xs;
num2=xs;}
break;
case 2: if(K10)
{nz3=xs;
num3=xs;}
break;
case 3: if(K10)
{nz4=xs;
num4=xs;}
break;
default: break;
}
}
void work_3()//顯示溫度
{
uint a,b;
light=21;
pulse_cnt++;//脈沖時間計數
if(pulse_cnt>=25)
{
pulse_cnt=0;
TR1=0;
t_1=TH1;
t_0=TL1;
TH1=TL1=0;
TR1=1;
}
tt=(t_1<<8)+t_0;
if(tt>pulse_tab[x])x++;
else
if(tt<=pulse_tab[x-1]&&x!=0)x--;
a=tt-pulse_tab[x];
b=pulse_tab[x]-tt;
if(b<=a)y=x-1;
else y=x;
num4=16; //顯示溫度
num3=y/10;
num2=y%10;
num1=12;
if(sw2) //返回時鐘模塊
{
msta=0;
num1=num11;
num2=num22;
num3=num33;
num4=num44;
}
// if(K0) //脈沖數測試
// {
// num4=buf2/1000;
// num3=buf2%1000/100;
// num2=buf2%100/10;
// num1=buf2%10;
// }
}
//void work_4()
//{ mcnt1++;
// light=18;
// SBUF = 0x6d;
// flon=1;
// tzsta++;
// if(tzsta>=4)
// tzsta=0;
// if(mcnt1>=125)//500ms到
// {
// dp_1^=1;
// a++;
// mcnt1=0;
// }
//
// if(a>120) //1s到
// {a=0;
// num1++; //秒滿60,秒歸零,向分進位
// if(num1>=0x0a)
// {num1=0;
// num2++;
// if(num2>=0x06)
// {num2=0; //分滿60,分歸零,
// if(num4<2) //時的十位在小于2區間,即十位為0或為1時
// {num3++; //時的個位可取0到9,即可以從0加到9
// if(num3>=0x0a)
// {num3=0; //時的個位滿10,歸零,向十位進一
// num4++;
// }
// }
// else //當十位大于等于2時
// {num3++; //時的個位正常增加
// if(num3>=0x05) //直到時的個位因分為60進1,由4變為5的瞬間
// {num1=num2=num3=num4=0; //各個顯示位都被置零
// }
// }
// }
// }
// }
// if(K8)
// {
// msta=0;
// flon=0;
// SBUF =0xff;
// }
// if(sw1)//跳轉時間設置模塊
// {
// msta=1;
// flon=1;
// dp_1=1;
// }
// if(K9) //跳轉鬧鐘設置模塊
// {
// msta=2;
// num11=num1;//存儲當前時間
// num22=num2;
// num33=num3;
// num44=num4;
// }
// if(sw2)//跳轉溫度計模塊
// {
// msta=3;
// flon=0;
// dp_1=0;
// num11=num1; //存儲當前時間
// num22=num2;
// num33=num3;
// num44=num4;
// }
//
//
//}
void rkey() //矩陣鍵盤掃描按鍵解釋
{
if(K0)xs=0;
if(K1)xs=1;
if(K2)xs=2;
if(K3)xs=3;
if(K4)xs=4;
if(K5)xs=5;
if(K6)xs=6;
if(K7)xs=7;
if(K8)xs=8;
if(K9)xs=9;
}
void Delay(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<100;j++);
}
復制代碼
所有資料51hei提供下載:
ce綜合.rar
(68.45 KB, 下載次數: 5)
2018-6-6 00:06 上傳
點擊文件名下載附件
單片機實驗
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1