欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
程序鬧鐘-用at89s52和七段數(shù)碼管實現(xiàn)計時時鐘并用4x4矩陣鍵盤控制
[打印本頁]
作者:
daming
時間:
2014-12-30 23:44
標題:
程序鬧鐘-用at89s52和七段數(shù)碼管實現(xiàn)計時時鐘并用4x4矩陣鍵盤控制
/*
程序名稱:at89s52實現(xiàn)時鐘《二》
程序功能:用at89s52和七段數(shù)碼管實現(xiàn)計時時鐘并用4x4矩陣鍵盤控制
運行環(huán)境:keil uv2
需改進點:未能用鍵盤設置鬧鐘
作者 :hankjulianth
*/
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint sec,min,hour;//秒,分,時計數(shù)
uint t1;//定義計數(shù)器
sbit sc=P1^7;//鎖存信號
sbit sp=P1^1;//蜂鳴器
void _init_();//初始化函數(shù)
void timer0();//定時器T0中斷函數(shù)
void showtime();//時間顯示函數(shù)
void speker(uint,uint);//蜂鳴器函數(shù),定時鬧鐘
void settime(uint,uint,uint);
void delay(uint);//延時函數(shù)
//鍵盤控制區(qū)設置
//六鍵控制
//一鍵控制開始,一鍵控制停止
//一鍵控制分鐘加,一鍵控制分鐘減,一鍵控制小時加,一鍵控制小時減,用于調(diào)時
uint temp;
/*
void stop();//計時停止
void _key_5();
void start();//計時開始
void _key_6();
*/
void minminu();//分鐘減
void _key_1();
void minadd();//分鐘加
void _key_2();
void hourminu();//小時減
void _key_3();
void houradd();//小時加
void _key_4();
uchar key;//鍵值
void main()
{
t1=0;
settime(0,0,0);
temp=0;
_init_();
while(1)
{
//鍵盤監(jiān)測程序
P3=0x0f;
temp=P3;
if(temp!=0x0f)
{
temp=P3;
if(temp!=0x0f)
{
switch(temp)
{
case 0x8f : P3=0xf0;
temp=P3;
if(temp!=0xf0)
{
temp=P3;
if(temp!=0xf0)
{
switch (temp)
{
case 0xf1 : _key_1();
break;
case 0xf2 : _key_2();
break;
case 0xf4 : _key_3();
break;
case 0xf8 : _key_4();
break;
}
}
}
break;
default:
break;
/*case 0x4f : P3=0xf0;
temp=P3;
if(temp!=0xf0)
{
delay(100);
temp=P3;
if(temp!=0xf0)
{
switch (temp)
{
case 0xf1 : _key_5();
break;
case 0xf2 : _key_6();
break;
/case 0xf4 : _key_7();
break;
case 0xf8 : _key_8();
break;
}
}
}
break;
case 0x2f : P3=0xf0;
temp=P3;
if(temp!=0xf0)
{
delay(100);
temp=P3;
if(temp!=0xf0)
{
switch (temp)
{
case 0xf1 : _key_9();
break;
case 0xf1 : _key_10();
break;
case 0xf1 : _key_11();
break;
case 0xf1 : _key_12();
break;
}
}
}
break;
case 0x1f : P3=0xf0;
temp=P3;
if(temp!=0xf0)
{
delay(100);
temp=P3;
if(temp!=0xf0)
{
switch (temp)
{
case 0xf1 : _key_13();
break;
case 0xf1 : _key_14();
break;
case 0xf1 : _key_15();
break;
case 0xf1 : _key_16();
break;
}
}
}
break;*/ //此程序只用其中四個鍵盤即可
}
}
}
if(t1==20)
{
sec++;
t1=0;
speker(0,2);
}
if(sec==60)
{
min+=1;
sec=0;
}
if(min==60)
{
hour+=1;
min=0;
}
if(hour==24)
{
hour=0;
}
showtime();
}
}
void _init_()
{
//啟用且設置T0,定時50ms
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TMOD=0x01;
TR0=1;
}
void timer0() interrupt 1
{
_init_();
t1++;
}
void settime(uint i,uint j,uint k)//設置初始時間函數(shù): k : j : i
{
sec=i;
min=j;
hour=k;
}
void speker(uint i,uint j)
{
if(hour==j&&min==i)
{
sp=1;
sp=0;
}
}
void showtime()
{
//秒鐘顯示
sc=1;
P0=table[sec/10];
P2=0x06;
sc=0;
sc=1;
P0=table[sec%10];
P2=0x07;
sc=0;
//分鐘顯示
sc=1;
P0=table[min/10];
P2=0x03;
sc=0;
sc=1;
P0=table[min%10];
P2=0x04;
sc=0;
//時鐘顯示
sc=1;
P0=table[hour/10];
P2=0x01;
sc=0;
sc=1;
P0=table[hour%10];
P2=0x0;
sc=0;
}
void delay(uint z)
{
uint x,y;
for(x=100;x>=0;x--)
for(y=z;y>=0;y--);
}
/*void stop()
{
}
void start()
{
}*/
void minminu() { min--;}
void minadd() { min++;}
void hourminu() {hour--;}
void houradd() { hour++;}
void _key_1() {minminu();}
void _key_2() {minadd();}
void _key_3() {hourminu();}
void _key_4() {houradd();}
復制代碼
作者:
daming
時間:
2014-12-30 23:45
字符顯示:
/* 程序名稱:點陣顯示器顯示
程序作用:采用AT89C52和8x8點陣顯示器顯示字符
程序拓展:可以實現(xiàn)鍵盤輸入顯示字符
程序作者:hankjulianth
完成時間:10。3.30——下午
*/
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code pa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code ln[9][8]={
{0xff,0x83,0xef,0xef,0xef,0xef,0xef,0x83},//"I"
{0xff,0x99,0x66,0x7e,0xbd,0xdb,0xe7,0xff},//心符號
{0xff,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff},//"U"
{0xff,0xef,0xef,0xab,0x6d,0xe7,0xef,0xff},//"小"
{0xff,0xff,0x83,0xef,0xef,0xef,0xef,0xef},//"T"
{0xff,0xff,0xff,0x81,0xff,0xff,0xff,0xff},//"--"
{0xfd,0x11,0xd0,0x90,0x57,0x90,0xd7,0xd0},//"鄒"
{0xfb,0xfb,0xe0,0xfb,0xf1,0xd9,0x49,0x86},//"志"
{0x80,0xf7,0xd5,0xe3,0xc1,0xf7,0xf7,0xf7},//"平"
};
uint i=0,j=0,timecount=0;
void main()
{
TMOD=0x01;
TH0=(65536-3000)/256;//定時3ms
TL0=(65536-3000)%256;
TR0=1;
EA=1;
ET0=1;
while(1)
{
;
}
}
void timer0() interrupt 1
{
TMOD=0x01;
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
TR0=1;
EA=1;
ET0=1;
P0=pa[j];
P2=ln[i][j];
j++;
if(j>7)
{
j=0;
}
timecount++;
if(timecount==333)//每個字時間間隔為333 X 3ms
{
timecount=0;
i++;
if(i>8)
{
i=0;
}
}
}
復制代碼
作者:
daming
時間:
2014-12-30 23:46
改進版的程序:
/*程序名稱:改進的at89s52實現(xiàn)時鐘
程序功能:用at89s52和七段數(shù)碼管實現(xiàn)計時時鐘,用掃描方式顯示年月日時分秒
作者 :hankjulianth
*/
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint year,month,day,sec,min,hour;//秒,分,時計數(shù)
uint t1;//定義計數(shù)器
sbit sc=P3^7;//鎖存信號
sbit sp=P1^1;//蜂鳴器
void _init_();//初始化函數(shù)
void timer0();//定時器T0中斷函數(shù)
void showtime();//時間顯示函數(shù)
void speker(uint,uint);//蜂鳴器函數(shù),定時鬧鐘
void settime(uint,uint,uint,uint,uint,uint);//設置年,月,日,時,分,秒
void delay(uint);//延時函數(shù)
void main()
{
t1=0;
settime(10,4,16,0,0,0);
_init_();
while(1)
{
if(t1==20)
{
sec++;
t1=0;
}
if(sec==60)
{
min+=1;
sec=0;
}
if(min==60)
{
hour+=1;
min=0;
}
if(hour==24)
{
hour=0;
day++;
}
if(month==1|month==3|month==5|month==7|month==8|month==10|month==12)
{
if(day==31)
{
day=0;
month++;
}
}
else
{
if(month==2)
{
if(day==29)
{
day=0;
month++;
}
}
else
{
if(day==30)
{
day=0;
month++;
}
}
}
if(month==12)
{
month=0;
year++;
}
speker(0,8);
showtime();
}
}
void _init_()
{
//啟用且設置T0,定時50ms
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TMOD=0x01;
TR0=1;
}
void timer0() interrupt 1
{
_init_();
t1++;
}
void settime(uint y,uint m,uint d,uint i,uint j,uint k)//設置初始時間函數(shù): k : j : i
{
year=y;
month=m;
day=d;
sec=i;
min=j;
hour=k;
}
void speker(uint i,uint j)
{
if(hour==j&&min==i)
{
while(min==min+1)//一分鐘后,鬧鐘停止
{
sp=1;
delay(20);
sp=0;
}
}
}
void showtime()
{
if((sec%10)<7&&(sec%10)>=0)
{//秒鐘顯示
sc=1;
P0=table[sec/10];
P2=0x06;
sc=0;
sc=1;
P0=table[sec%10];
P2=0x07;
sc=0;
//分鐘顯示
sc=1;
P0=table[min/10];
P2=0x03;
sc=0;
sc=1;
P0=table[min%10];
P2=0x04;
sc=0;
//時鐘顯示
sc=1;
P0=table[hour/10];
P2=0x01;
sc=0;
sc=1;
P0=table[hour%10];
P2=0x0;
sc=0;
}
if((sec%10)>=7&&(sec%10)<=9)
{
//日期顯示
sc=1;
P0=table[day/10];
P2=0x06;
sc=0;
sc=1;
P0=table[day%10];
P2=0x07;
sc=0;
//月份顯示
sc=1;
P0=table[month/10];
P2=0x03;
sc=0;
sc=1;
P0=table[month%10];
P2=0x04;
sc=0;
//年份顯示
sc=1;
P0=table[year/10];
P2=0x01;
sc=0;
sc=1;
P0=table[year%10];
P2=0x00;
sc=0;
}
}
void delay(uint z)
{
uint x,y;
for(x=10;x>=0;x--)
for(y=z;y>=0;y--);
}
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1