導航:首頁 > 操作系統 > 基於51單片機lcd時鍾獨立按鍵

基於51單片機lcd時鍾獨立按鍵

發布時間:2022-07-02 19:08:31

㈠ 51單片機lcd顯示獨立按鍵次數

需要利用以前編寫的LCD顯示函數(直接),在主函數中利用累計主循環次數來實現獨立按鍵的檢測。

㈡ 51單片機簡單電子時鍾程序,通過按鍵設置時間,有圖,有解析!

#include<reg52.h>
#include<stddef.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD1602_FLAG
#defineLCD1602_PORTP0

sbitlcd1602_rs=P2^0;
sbitlcd1602_e=P2^2;
sbitlcd1602_rw=P2^1;
sbitlcd1602_busy=P0^7;
sbitkey_ch=P3^5;
sbitkey_add=P3^6;
sbitkey_minus=P3^7;

uchari,sec,min,h,date,month,flag;
uintyear;
uchar*chgstr[7]={"","sec","min","hour","date","min","year"};
ucharj,k,m,n,o,p;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchartimestr[10],datestr[10];
voidinit();
voiddelay(uint);
voidtime_display();
voiddate_display();
voidcontrol();
voidtime();
/*
************************************
*函數名稱:lcd1602_CheckBusy()
*函數功能:狀態查詢
************************************
*/

voidlcd1602_CheckBusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}

/*
***************************************
*函數名稱:lcd1602_WriteCmd()
*函數功能:寫命令
*入口參數:命令字
*出口參數:無
***************************************
*/

voidlcd1602_WriteCmd(constucharcmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}

/*
*******************************************
*函數名稱:lcd1602_WriteData()
*函數功能:寫數據
*入口參數:c--待寫數據
*出口參數:無
*********************************************
*/

voidlcd1602_WriteData(constucharc)
{
lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}

/*
***********************************************
*函數名稱:lcd1602_Init()
*函數功能:初始化LCD
*入口參數:無
*出口參數:無
***********************************************
*/

voidlcd1602_Init()
{
lcd1602_WriteCmd(0x38); //顯示模式為8位2行5*7點陣
lcd1602_WriteCmd(0x0c);//displayenable,flagenable,flashenable,
lcd1602_WriteCmd(0x06);//flagmovetoright,screendon'tmove
lcd1602_WriteCmd(0x01);//clearscreen
}

/*
************************************************
*函數名稱:lcd1602_Display()
*函數功能:字元顯示
*入口參數:ptr--字元或字元串指針
*出口參數:無
*說明:用戶可通過以下方式來調用:
*1)lcd1602_Display("Hello,world!");
*2)INT8U存儲類型txt[]="要顯示的字元串";
*或者INT8U存儲類型txt[]={'t','x','t',..,''};
*INT8U*ptr;
*ptr=&txt;
*lcd1602_Display(ptr);
*或lcd1602_Display(txt);
*或lcd1602_Display(&txt);
************************************************
*/

voidlcd1602_Display(constuchar*ptr,ucharline,ucharxaddr)
{
uchardatai=0;
uchar*dataq;

q=ptr;
switch(line)
{
case0:
lcd1602_WriteCmd(0x80+xaddr);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
case1:
lcd1602_WriteCmd(0xc0+xaddr);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
}
}


voidmain()
{
lcd1602_Init();
init();
while(1)
{
time_display();
date_display();
control();
}
}
voidinit()
{
i=0;
sec=0;
min=30;
h=7;
date=17;
month=10;
year=2017;
flag=0;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidtime_display()
{
timestr[7]=0x30+sec%10;
timestr[6]=0x30+sec/10;
timestr[5]=':';
timestr[4]=0x30+min%10;
timestr[3]=0x30+min/10;
timestr[2]=':';
timestr[1]=0x30+h%10;
timestr[0]=0x30+h/10;
timestr[8]=0;
lcd1602_Display(timestr,1,3);
}
voiddate_display()
{
datestr[9]=0x30+date%10;
datestr[8]=0x30+date/10;
datestr[7]=':';
datestr[6]=0x30+month%10;
datestr[5]=0x30+month/10;
datestr[4]=':';
datestr[3]=0x30+year%10;
datestr[2]=0x30+year/10%10;
datestr[1]=0x30+year/100%10;
datestr[0]=0x30+year/1000;
lcd1602_Display(datestr,0,2);
}
voidcontrol()
{
if(!key_ch)
{
delay(5);
if(!key_ch)
{
flag++;
TR0=0;
if(flag==7)
{flag=0;TR0=1;lcd1602_Init();}
lcd1602_Display(chgstr[flag],1,12);
}
}
while(!key_ch);
if(flag==1&&key_add==0)
{
while(!key_add);
sec++;
if(sec==60)
sec=0;
}
if(flag==1&&key_minus==0)
{
while(!key_minus);
sec--;
if(sec==-1)
sec=59;
}

if(flag==2&&key_add==0)
{
while(!key_add);
min++;
if(min==60)
min=0;
}
if(flag==2&&key_minus==0)
{
while(!key_minus);
min--;
if(min==-1)
min=59;
}

if(flag==3&&key_add==0)
{
while(!key_add);
h++;
if(h==24)
h=0;
}
if(flag==3&&key_minus==0)
{
while(!key_minus);
h--;
if(h==-1)
h=23;
}

if(flag==4&&key_add==0)
{
while(!key_add);
date++;
if(date==29)
if((year%4!=0)&&(month==2))
date=1;
if(date==30)
if((year%4==0)&&(month==2))
date=1;
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
date=1;
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
date=1;
}

if(flag==4&&key_minus==0)
{
while(!key_minus);
if(date>1)date--;
}

if(flag==5&&key_add==0)
{
while(!key_add);
month++;
if(month==13)
month=1;
}
if(flag==5&&key_minus==0)
{
while(!key_minus);
month--;
if(month==0)
month=12;
}

if(flag==6&&key_add==0)
{
while(!key_add);
year++;
if(year==99)
year=1;
}
if(flag==6&&key_minus==0)
{
while(!key_minus);
year--;
if(year==0)
year=99;
}
}

voidT0_rpt()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
time();
}

voidtime()
{
if(i==20)
{
i=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
h++;
if(h==24)
{
h=0;
min=0;
sec=0;
date++;
if(date==29)
if((year%4!=0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==30)
if((year%4==0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
}
}
}
}
}

㈢ 求51單片機獨立按鍵的代碼。功能:類似設置電子表時間。見補充

void delay(unsigned char);
void main()
{
....;
}
/************IndependentButtons*************/
char Button(void)
{
unsigned char state1,a = 1,mt = 1;
P1 = 0xff;
state1 = P1;
state1 = ~ state1;
if(state1 != 0x00)
{
delay10ms(5);
do{
if(mt > 1)
dealy10ms(100);
delay10ms(50);
a ++;
mt ++;
}while(P1 != 0xff);
}
return a;
}
為相應的獨立按鍵c代碼(為8個獨立按鍵,如果要4個獨立按鍵可以在上面程序該的),其他的只要用main調用,在main里製表,就行了。

㈣ 51單片機中用數碼管做秒錶時怎麼用一個獨立按鍵控制開始和暫停,即第一次按下計時,在按下時暫停

其實,控制秒錶的啟動和停止,很簡單。要做秒錶,一定要用定時器吧,假如用T0,那開始初始化時,不寫TR0=1,先不啟動。
當按一下鍵,再啟動,TR0=1,就開始計時了。
再 按一下鍵,就停止,TR0=0,就不計時了。
程序好寫,先 定義一個按鍵
sbit key=P1^1; //具體是哪個 鍵,你自己改
主程序中,判斷按鍵和啟動/停止
if(key==0)
{
delay(); //具體延時時間自己定
if(key==0)
{
TR0=!TR0; //每按一次,取反 一次
while(key==0);
}
}

㈤ 51單片機,時鍾想做個獨立按鍵控制時間暫停,我用了定時器取反,但是每次按下按鍵都會顯示亂碼,再按一

你將顯示放main主循環里顯示即可,還有,在你的按下去的按鍵按下裡面,也加上顯示函數不就可以顯示了。

㈥ 求教一個51單片機程序。。(LCD電子時鍾)

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;
#define yh 0x80
#define er 0x80+0x40//液晶屏的與 C51 之間的引腳連接定義
sbit rs=P2^5;
sbit en=P2^7;
sbit rw=P2^6;//如果硬體上 rw 接地,就不用寫這句和後面的 rw=0
//DS1302 時鍾晶元與 C51 之間的引腳連接定義
sbit IO=P3^6;
sbit SCLK=P3^5;
sbit RST=P3^7;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;//校時按鍵與 C51 的引腳連接定義
sbit key1=P3^2;//設置鍵
sbit key2=P3^3;//加鍵
sbit key3=P3^4;//減鍵
uchar code tab1[]={"20//////////"};//年顯示的固定字元
uchar code tab2[]={"LOVE ::::::"};//時間顯示的固定字元

//延時函數,後面經常調用
void delay(uint xms)//延時函數,有參函數
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
/********液晶寫入指令函數與寫入數據函數,以後可調用**************/
write_1602com(uchar com) //****液晶寫入指令函數****
{
rs=0; //數據/指令選擇置為指令
rw=0; //讀寫選擇 置為寫
P0=com; //送入數據
delay(1);
en=1; //拉高使能端,為製造有效的下降沿做准備
delay(1);
en=0;
//en 由高變低,產生下降沿,液晶執行命令
}

write_1602dat(uchar dat) //***液晶寫入數據函數****
{
rs=1; //數據/指令選擇置為數據
rw=0; //讀寫選擇置為寫
P0=dat; //送入數據
delay(1);
en=1; //en 置高電平,為製造下降沿做准備
delay(1);
en=0; //en 由高變低,產生下降沿,液晶執行命令

}

lcd_init() //***液晶初始化函數****//
{
write_1602com(0x38); //設置液晶工作模式,意思:16*2 行顯示,5*7 點陣,8 位數據
write_1602com(0x0c); //開顯示不顯示游標
write_1602com(0x06); //整屏不移動,游標自動右移
write_1602com(0x01); //清顯示
write_1602com(yh+1); //日歷顯示固定符號從第一行第 1 個位置之後開始顯示
for(a=0;a<14;a++)
{
write_1602dat(tab1[a]); //向液晶屏寫日歷顯示的固定符號部分
}
write_1602com(er+1);//時間顯示固定符號寫入位置,從第 2 個位置後開始顯示
for(a=0;a<12;a++)
{
write_1602dat(tab2[a]);//寫顯示時間固定符號,兩個冒號
}
}
/***************DS1302 有關子函數********************/
void write_byte(uchar dat)//寫一個位元組
{
ACC=dat;
RST=1;
for(a=8;a>0;a--)
{
IO=ACC0;//相當於匯編中的 RRC
SCLK=0;
SCLK=1;
ACC=ACC>>1;
}
}
uchar read_byte() //讀一個位元組
{
RST=1;
for(a=8;a>0;a--)
{
ACC7=IO;
SCLK=1;
SCLK=0;
ACC=ACC>>1;
}
return (ACC);
}
//----------------------------------------//
void write_1302(uchar add,uchar dat) //向 1302 晶元寫函數,指定寫入地址,數據
{
RST=0;
SCLK=0;
RST=1;
write_byte(add);
write_byte(dat);
SCLK=1;
RST=0;
}
uchar read_1302(uchar add) //從 1302 讀數據函數,指定讀取數據來源地址
{
uchar temp;
RST=0;
SCLK=0;
RST=1;
write_byte(add);
temp=read_byte();
SCLK=1;
RST=0;
return(temp);
}
uchar BCD_Decimal(uchar bcd)//BCD 碼轉十進制函數,輸入 BCD,返回十進制
{
uchar Decimal;
Decimal=bcd>>4;
return(Decimal=Decimal*10+(bcd&=0x0F));
}
//--------------------------------------//
void ds1302_init()//1302 晶元初始化子函數(2010-01-07,12:00:00,week4)
{
RST=0;
SCLK=0;
write_1302(0x8e,0x00);//允許寫,禁止防寫
write_1302(0x8e,0x80);//打開防寫
}
//時分秒顯示子函數
void write_sfm(uchar add,uchar dat)//向 LCD 寫時分秒,有顯示位置加、現示數據,兩個參數
{
uchar gw,sw;
gw=dat%10;//取得個位數字
sw=dat/10;//取得十位數字
write_1602com(er+add);//er 是頭文件規定的值 0x80+0x40
write_1602dat(0x30+sw);//數字+30 得到該數字的 LCD1602 顯示碼
write_1602dat(0x30+gw);//數字+30 得到該數字的 LCD1602 顯示碼
}
//年月日顯示子函數
void write_nyr(uchar add,uchar dat)//向 LCD 寫年月日,有顯示位置加數、顯示數據,兩個參數
{
uchar gw,sw;
gw=dat%10;//取得個位數字
sw=dat/10;//取得十位數字
write_1602com(yh+add);//設定顯示位置為第一個位置+add
write_1602dat(0x30+sw);//數字+30 得到該數字的 LCD1602 顯示碼
write_1602dat(0x30+gw);//數字+30 得到該數字的 LCD1602 顯示碼
}
void write_week(uchar week)//寫星期函數
{
write_1602com(yh+0x0c);//星期字元的顯示位置
switch(week)
{
case 1:write_1602dat('M');//星期數為一時,顯示
write_1602dat('o');
write_1602dat('n');break;
case 2:write_1602dat('T');//星期數據為二時顯示
write_1602dat('u');
write_1602dat('e');break;
case 3:write_1602dat('W');//星期數據為三時顯示
write_1602dat('e');
write_1602dat('d');break;
case 4:write_1602dat('T');//星期數據為四是顯示
write_1602dat('h');
write_1602dat('u');break;
case 5:write_1602dat('F');//星期數據為五時顯示
write_1602dat('r');
write_1602dat('i');break;
case 6:write_1602dat('S');//星期數據為六時顯示
write_1602dat('t');
write_1602dat('a');break;
case 7:write_1602dat('S');//星期數據為日時顯示
write_1602dat('u');
write_1602dat('n');break;
}
}
//****************鍵盤掃描有關函數**********************
void keyscan()
{
if(key1==0)//key1 為功能鍵(設置鍵)
{
delay(9);//延時,用於消抖動
if(key1==0)//延時後再次確認按鍵按下
{
delay(20);
while(!key1);
key1n++;
if(key1n==9)
key1n=1;//設置按鍵共有秒、分、時、星期、日、月、年、返回,8 個功能循環
switch(key1n)
{
case 1:TR0=0;//關閉定時器
write_1602com(er+0x0E);//設置按鍵按動一次,秒位置顯示游標
write_1602com(0x0f);//設置游標為閃爍
temp=(miao)/10*16+(miao)%10;//秒數據寫入 DS1302
write_1302(0x8e,0x00);
write_1302(0x80,0x80|temp);//miao
write_1302(0x8e,0x80);break;
case 2:write_1602com(er+11);//按 2 次 fen 位置顯示游標
break;
case 3:write_1602com(er+8);//按動 3 次,shi
break;
case 4:write_1602com(yh+0x0e);//按動 4 次,week
break;
case 5:write_1602com(yh+0x0a);//按動 5 次,ri
break;
case 6:write_1602com(yh+0x07);//按動 6 次,yue
break;
case 7:write_1602com(yh+0x04);//按動 7 次,nian
break;
case 8:write_1602com(0x0c);//按動到第 8 次,設置游標不閃爍
TR0=1;//打開定時器
TR0=1;
temp=(miao)/10*16+(miao)%10;
write_1302(0x8e,0x00);
write_1302(0x80,0x00|temp);//miao 數據寫入 DS1302
write_1302(0x8e,0x80);break;
}
}
}
//------------------------------加鍵 key2----------------------------//
if(key1n!=0)//當 key1 按下以下。再按以下鍵才有效(按鍵次數不等於零)
{
if(key2==0)//上調鍵
{
delay(10);
if(key2==0)
{
delay(20);
while(!key2);
switch(key1n)
{
case 1:miao++;//設置鍵按動 1 次,調秒
if(miao==60)
miao=0;
write_sfm(0x0D,miao);
temp=(miao)/10*16+(miao)%10;
write_1302(0x8e,0x00);
write_1302(0x80,temp);
write_1302(0x8e,0x80);
write_1602com(er+0x0E);
break;
case 2:fen++;
if(fen==60)
fen=0;
write_sfm(0x0A,fen);
temp=(fen)/10*16+(fen)%10;
write_1302(0x8e,0x00);
write_1302(0x82,temp);
write_1302(0x8e,0x80);
write_1602com(er+11);
break;
case 3:shi++;
if(shi==24)
shi=0;
write_sfm(7,shi);
temp=(shi)/10*16+(shi)%10;
write_1302(0x8e,0x00);
write_1302(0x84,temp);
write_1302(0x8e,0x80);
write_1602com(er+8);
break;
case 4:week++;
if(week==8)
week=1;
write_1602com(yh+0x0C) ;
write_week(week);
temp=(week)/10*16+(week)%10;
write_1302(0x8e,0x00);
write_1302(0x8a,temp);
write_1302(0x8e,0x80);
write_1602com(yh+0x0e);
break;
case 5:ri++;
if(ri==32)
ri=1;
write_nyr(9,ri);
temp=(ri)/10*16+(ri)%10;
write_1302(0x8e,0x00);
write_1302(0x86,temp);
write_1302(0x8e,0x80);
write_1602com(yh+10);
break;
case 6:yue++;
if(yue==13)
yue=1;
write_nyr(6,yue);
temp=(yue)/10*16+(yue)%10;
write_1302(0x8e,0x00);
write_1302(0x88,temp);
write_1302(0x8e,0x80);
write_1602com(yh+7);
break;
case 7:nian++;
if(nian==100)
nian=0;
write_nyr(3,nian);
temp=(nian)/10*16+(nian)%10;
write_1302(0x8e,0x00);
write_1302(0x8c,temp);
write_1302(0x8e,0x80);
write_1602com(yh+4);
break;
}
}
}
//------------------減鍵 key3,各句功能參照'加鍵'注釋---------------
if(key3==0)
{
delay(10);
//調延時,消抖動
if(key3==0)
{
delay(20);
while(!key3);
switch(key1n)
{
case 1:miao--;
if(miao==-1)
miao=59;
write_sfm(0x0D,miao);
temp=(miao)/10*16+(miao)%10;
write_1302(0x8e,0x00);
write_1302(0x80,temp);
write_1302(0x8e,0x80);
write_1602com(er+0x0E);
break;
case 2:fen--;
if(fen==-1)
fen=59;
write_sfm(10,fen);
temp=(fen)/10*16+(fen)%10;
write_1302(0x8e,0x00);
write_1302(0x82,temp);
write_1302(0x8e,0x80);
write_1602com(er+11);
break;
case 3:shi--;
if(shi==-1)
shi=23;
write_sfm(7,shi);
temp=(shi)/10*16+(shi)%10;
write_1302(0x8e,0x00);
write_1302(0x84,temp);
write_1302(0x8e,0x80);
write_1602com(er+8);
break;
case 4:week--;
if(week==0)
week=7;
write_1602com(yh+0x0C);
write_week(week);
temp=(week)/10*16+(week)%10;
write_1302(0x8e,0x00);
write_1302(0x8a,temp);
write_1302(0x8e,0x80);
write_1602com(yh+0x0e);
break;
case 5:ri--;
if(ri==0)
ri=31;
write_nyr(9,ri);
temp=(ri)/10*16+(ri)%10;//十進制轉換成 DS1302 要求的 DCB 碼
write_1302(0x8e,0x00);//允許寫,禁止防寫
write_1302(0x86,temp);//向 DS1302 內寫日期寄存器 86H 寫入調整後的日期數據 BCD 碼
write_1302(0x8e,0x80);//打開防寫
write_1602com(yh+10);//因為設置液晶的模式是寫入數據後,指針自動加一,所以需要游標回位
break;
case 6:yue--;
if(yue==0)
yue=12;
write_nyr(6,yue);
temp=(yue)/10*16+(yue)%10; //十進制轉換成 DS1302 要求的 DCB 碼
write_1302(0x8e,0x00); //允許寫,禁止防寫
write_1302(0x88,temp); //向 DS1302 內寫月份寄存器 88H 寫入調整後的月份數據 BCD 碼
write_1302(0x8e,0x80); //打開防寫
write_1602com(yh+7); //因為設置液晶的模式是寫入數據後,指針自動加一,所以需要游標回位
break;
case 7:nian--;
if(nian==-1)
nian=99;
write_nyr(3,nian);
temp=(nian)/10*16+(nian)%10; //十進制轉換成 DS1302 要求的 DCB 碼
write_1302(0x8e,0x00); //允許寫,禁止防寫
write_1302(0x8c,temp); //向 DS1302 內寫年份寄存器 8cH 寫入調整後的年份數據 BCD 碼
write_1302(0x8e,0x80); //打開防寫
write_1602com(yh+4); //因為設置液晶的模式是寫入數據後,指針自動加一,所以需要游標回位
break;
}
}
}
}
}
void init()
//定時器、計數器設置函數
{
TMOD=0x11;
//指定定時/計數器的工作方式為 3
TH0=0;
//定時器 T0 的高四位=0
TL0=0;
//定時器 T0 的低四位=0
EA=1;
//系統允許有開放的中斷
ET0=1;
//允許 T0 中斷
TR0=1;
//開啟中斷,啟動定時器
}
//*******************主函數**************************
void main()
{
lcd_init(); //調用液晶屏初始化子函數
ds1302_init(); //調用 DS1302 時鍾的初始化子函數
init(); //調用定時計數器的設置子函數
delay(80);
while(1)
//無限循環下面的語句:
{
keyscan();
//調用鍵盤掃描子函數
}
}
void timer0() interrupt 1 //取得並顯示日歷和時間
{ //讀取秒時分周日月年七個數據(DS1302 的讀寄存器與寫寄存器不一樣)
miao = BCD_Decimal(read_1302(0x81));
fen = BCD_Decimal(read_1302(0x83));
shi = BCD_Decimal(read_1302(0x85));
ri = BCD_Decimal(read_1302(0x87));
yue = BCD_Decimal(read_1302(0x89));
nian=BCD_Decimal(read_1302(0x8d));
week=BCD_Decimal(read_1302(0x8b));
//顯示秒、時、分數據:
write_sfm(13,miao); //秒,從第二行第 8 個字後開始顯示(調用時分秒顯示子函數)
write_sfm(10,fen); //分,從第二行第 5 個字元後開始顯示
write_sfm(7,shi); //小時,從第二行第 2 個字元後開始顯示
//顯示日、月、年數據:
write_nyr(9,ri); //日期,從第二行第 9 個字元後開始顯示
write_nyr(6,yue); //月份,從第二行第 6 個字元後開始顯示
write_nyr(3,nian); //年,從第二行第 3 個字元後開始顯示
write_week(week);
}

㈦ 求一段為51單片機編寫的LCD電子時鍾的設計,簡單就好!高分伺候!

簡單的時鍾,不用1302即可辦到。

題目要求的設計已經完成,電路圖如下。

程序稍長,放在我的網路空間了。

可以用網路、網頁,進行查找:

做而論道用LCD1602顯示的時鍾

網路一下,即可查到。

㈧ 51單片機能不能使lcd獨立運行

多任務那肯定要上操作系統的,用keil自帶的rtx-tiny51就可以,或者移植ucosii,你想讓單片機可以同時做其他事只需再添加一個任務既可,並且任務之間互不影響,任務之間還可以通信,rtxtiny51API函數少,使用非常簡單

㈨ 51單片機控制數碼管顯示時鍾,獨立按鍵怎麼弄

獨立按鍵處理起來是非常簡單的,一般都是IO口單獨控制,所以只需要消抖和判斷按鍵按下抬起狀態就好。比如:
sbitkey=P1^0;
if(key==0)
{
delay(10);
if(key==0)
{
keyval=1;
while(key==0);
}
}

閱讀全文

與基於51單片機lcd時鍾獨立按鍵相關的資料

熱點內容
喜鵲快貸app怎麼了 瀏覽:263
海龜編輯器積木編程怎麼安裝 瀏覽:185
程序員理發店生意怎麼樣 瀏覽:603
程序員羅技 瀏覽:180
軟考初級程序員課程2021下載 瀏覽:491
杭州程序員奶奶 瀏覽:880
不聽命令造成錯誤 瀏覽:981
kool系統源碼 瀏覽:610
流氓app在哪裡看 瀏覽:98
域名購買了怎麼指向伺服器 瀏覽:121
安卓手機如何讓照片顏色反轉 瀏覽:859
怎麼下載卓睿安手機版 瀏覽:514
h3crange命令 瀏覽:468
php前景和python 瀏覽:338
php壓縮圖片內存大小 瀏覽:495
在哪裡可以查看雲伺服器的信息 瀏覽:70
python讀取非txt文件 瀏覽:799
艾莫迅用什麼編程軟體好 瀏覽:227
android文件存儲讀取 瀏覽:214
php基礎教程第5版 瀏覽:543