亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
51單片機制作電子鐘,在調用keyscan()函數出現問題,求助!!
[打印本頁]
作者:
bzy
時間:
2019-12-23 12:46
標題:
51單片機制作電子鐘,在調用keyscan()函數出現問題,求助!!
51單片機用1602制作電子鐘,調用keyscan()函數出現問題,求助!
代碼如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
//lcd_data = P0
sbit lcdrs = P2^2;
sbit lcdrw = P2^1;
sbit lcden = P2^0;
sbit k1 = P3^3;
sbit k2 = P3^2;
sbit k3 = P3^1;
sbit Led = P1^0; //led light
uchar i,t=0,k1num = 0;
uint year = 2019;
char h = 00,m = 00,s = 00,w = 55,month = 01,day = 01 ;
uchar code table1[] = {"2019-12-22 SUN"}; //初始日期
uchar code table2[] = {" 00:00:00 "}; //初始時間
uchar code table3[] = {" smhwdmy "}; //模式狀態選擇(秒s,分m,時h,周w,日d,月m,年y)
void delay(uchar z)
{
uchar x,y;
for(x = z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com){
lcdrs = 0;
lcdrw = 0;
P0 = com;
delay(10);
lcden = 1;
delay(10);
lcden = 0;
}
void write_dat(uchar dat) //LCD寫數據
{
lcdrs = 1;
lcdrw = 0;
P0 = dat;
delay(10);
lcden = 1;
delay(10);
lcden = 0;
}
void Monday(void) //調用星期一子函數
{
write_com(0x80 + 12);
write_dat('M');
write_com(0x80 + 13);
write_dat('O');
write_com(0x80 + 14);
write_dat('N');
}
void Tuesday(void) //調用星期二子函數
{
write_com(0x80 + 12);
write_dat('T');
write_com(0x80 + 13);
write_dat('U');
write_com(0x80 + 14);
write_dat('E');
}
void Wednesday(void) //調用星期三子函數
{
write_com(0x80 + 12);
write_dat('W');
write_com(0x80 + 13);
write_dat('E');
write_com(0x80 + 14);
write_dat('D');
}
void Thursday(void) //調用星期四子函數
{
write_com(0x80 + 12);
write_dat('T');
write_com(0x80 + 13);
write_dat('H');
write_com(0x80 + 14);
write_dat('U');
}
void Friday(void) //調用星期五子函數
{
write_com(0x80 + 12);
write_dat('F');
write_com(0x80 + 13);
write_dat('R');
write_com(0x80 + 14);
write_dat('I');
}
void Saturday(void) //調用星期六子函數
{
write_com(0x80 + 12);
write_dat('S');
write_com(0x80 + 13);
write_dat('A');
write_com(0x80 + 14);
write_dat('T');
}
void Sunday(void) //調用星期日子函數
{
write_com(0x80 + 12);
write_dat('S');
write_com(0x80 + 13);
write_dat('U');
write_com(0x80 + 14);
write_dat('N');
}
void display_week(uchar week) //星期顯示
{
switch(week)
{
case 1: Monday();break;
case 2: Tuesday();break;
case 3: Wednesday();break;
case 4: Thursday();break;
case 5: Friday();break;
case 6: Saturday();break;
case 7: Sunday();break;
}
}
void init(void) //LCD初始顯示
{
lcden = 0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
TMOD = 0x01;
ET0 = 1;
EA = 1;
TH0 = 0x3c;TL0 = 0xb0;
TR0 = 1;
write_com(0x80);
for(i=0;i<15;i++)
{
write_dat(table1[i]);delay(5);
}
write_com(0x80 + 0x40);
for(i=0;i<11;i++)
{
write_dat(table2[i]);delay(5);
}
}
void display_time(uchar ad,uchar time) //時間顯示
{
uchar a,b;
a = time/10;
b = time%10;
write_com(0x80 + 0x40 + ad);
write_dat(0x30 + a);
write_com(0x80 + 0x40 + 1 + ad);
write_dat(0x30 + b);
}
void display_date(uint nian,char yue,char ri) //日期顯示
{
uint y1,y2,y3,y4;
char a,b,c,d;
y1 = nian/1000;
y2 = nian%1000/100;
y3 = nian%1000%100/10;
y2 = nian%1000%100%10;
a = yue/10;
b = yue%10;
c = ri/10;
d = ri%10;
write_com(0x80 + 1);
write_dat(0x30 + y1);
write_com(0x80 + 2);
write_dat(0x30 + y2);
write_com(0x80 + 3);
write_dat(0x30 + y3);
write_com(0x80 + 4);
write_dat(0x30 + y4);
write_com(0x80 + 6);
write_dat(0x30 + a);
write_com(0x80 + 7);
write_dat(0x30 + b);
write_com(0x80 + 9);
write_dat(0x30 + c);
write_com(0x80 + 10);
write_dat(0x30 + d);
}
void display_state(uchar s) //模式狀態屏幕顯示
{
write_com(0x80 + 0x40 + 14);
write_dat(table3[s]);
}
void keyscan() //按鍵掃描
{
if(k1==0)
{
delay(10);
if(k1==0)
{
Led = 0;
k1num++;TR0 = 0;t = 0;
while(!k1);
if(k1num==1)
{write_com(0x80 + 0x40 + 11);write_com(0x0f);display_state(k1num - 1);} //s
if(k1num==2)
{write_com(0x80 + 0x40 + 8);display_state(k1num - 1);} //m
if(k1num==3)
{write_com(0x80 + 0x40 + 5);display_state(k1num - 1);} //h
if(k1num==4)
{write_com(0x80 + 14);display_state(k1num - 1);} //week
if(k1num==5)
{write_com(0x80 + 10);display_state(k1num - 1);} //day
if(k1num==6)
{write_com(0x80 + 7);display_state(k1num - 1);} //month
if(k1num==7)
{write_com(0x80 + 4);display_state(k1num - 1);} //year
if(k1num==8)
{k1num = 0;write_com(0x0c);TR0 = 1;Led = 1;display_state(7);}
}
}
if(k1num!=0)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
while(!k2);
if(k1num==1)
{
s++;
if(s==60)
s = 0;
display_time(10,s);
}
if(k1num==2)
{
m++;
if(m==60)
m = 0;
display_time(7,m);
}
if(k1num==3)
{
h++;
if(h==24)
h = 0;
display_time(4,h);
}
if(k1num==4)
{
w++;
if(w==8)
w = 1;
display_week(w);
}
if(k1num==5)
{
day++;
if(day==32)
day = 1;
display_date(year,month,day);
}
if(k1num==6)
{
month++;
if(month==13)
month = 1;
display_date(year,month,day);
}
if(k1num==7)
{
year++;
display_date(year,month,day);
}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
while(!k3);
if(k1num==1)
{ s--;
if(s==-1)
s=59;
display_time(10,s);
}
if(k1num==2)
{ m--;
if(m==-1)
m=59;
display_time(7,m);
}
if(k1num==3)
{ h--;
if(h==-1)
h=23;
display_time(4,h);
}
if(k1num==4)
{ w--;
if(w==0)
w=7;
display_week(w);
}
if(k1num==5)
{ day--;
if(day==0)
day=31;
display_date(year,month,day);
}
if(k1num==6)
{ month--;
if(month==0)
month=12;
display_date(year,month,day);
}
if(k1num==7)
{ year--;
display_date(year,month,day);
}
}
}
}
display_date(year,month,day);
display_week(w);
display_time(10,s);
display_time(7,m);
display_time(4,h);
}
void timer0()interrupt 1
{
t++;
TH0=0x3c;
TL0=0xb0;
if(t==20)
{s++;t=0;}
if(s==60)
{m++;s=0;}
if(m==60)
{h++;m=0;}
if(h==24)
{w++;day++;h=0;}
if(w==8)
{w=1;}
if(day==32)
{month++;day=1;}
if(month==13)
{year++;month=1;}
}
void main()
{
init();
while(1);
{
keyscan();
}
}
復制代碼
作者:
bzy
時間:
2019-12-23 12:49
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
//lcd_data = P0
sbit lcdrs = P2^2;
sbit lcdrw = P2^1;
sbit lcden = P2^0;
sbit k1 = P3^3;
sbit k2 = P3^2;
sbit k3 = P3^1;
sbit Led = P1^0; //led light
uchar i,t=0,k1num = 0;
uint year = 2019;
char h = 00,m = 00,s = 00,w = 55,month = 01,day = 01 ;
uchar code table1[] = {"2019-12-22 SUN"}; //初始日期
uchar code table2[] = {" 00:00:00 "}; //初始時間
uchar code table3[] = {" smhwdmy "}; //模式狀態選擇(秒s,分m,時h,周w,日d,月m,年y)
void delay(uchar z)
{
uchar x,y;
for(x = z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //寫命令函數
{
lcdrs = 0;
lcdrw = 0;
P0 = com;
delay(10);
lcden = 1;
delay(10);
lcden = 0;
}
void write_dat(uchar dat) //LCD寫數據
{
lcdrs = 1;
lcdrw = 0;
P0 = dat;
delay(10);
lcden = 1;
delay(10);
lcden = 0;
}
void Monday(void) //調用星期一子函數
{
write_com(0x80 + 12);
write_dat('M');
write_com(0x80 + 13);
write_dat('O');
write_com(0x80 + 14);
write_dat('N');
}
void Tuesday(void) //調用星期二子函數
{
write_com(0x80 + 12);
write_dat('T');
write_com(0x80 + 13);
write_dat('U');
write_com(0x80 + 14);
write_dat('E');
}
void Wednesday(void) //調用星期三子函數
{
write_com(0x80 + 12);
write_dat('W');
write_com(0x80 + 13);
write_dat('E');
write_com(0x80 + 14);
write_dat('D');
}
void Thursday(void) //調用星期四子函數
{
write_com(0x80 + 12);
write_dat('T');
write_com(0x80 + 13);
write_dat('H');
write_com(0x80 + 14);
write_dat('U');
}
void Friday(void) //調用星期五子函數
{
write_com(0x80 + 12);
write_dat('F');
write_com(0x80 + 13);
write_dat('R');
write_com(0x80 + 14);
write_dat('I');
}
void Saturday(void) //調用星期六子函數
{
write_com(0x80 + 12);
write_dat('S');
write_com(0x80 + 13);
write_dat('A');
write_com(0x80 + 14);
write_dat('T');
}
void Sunday(void) //調用星期日子函數
{
write_com(0x80 + 12);
write_dat('S');
write_com(0x80 + 13);
write_dat('U');
write_com(0x80 + 14);
write_dat('N');
}
void display_week(uchar week) //星期顯示
{
switch(week)
{
case 1: Monday();break;
case 2: Tuesday();break;
case 3: Wednesday();break;
case 4: Thursday();break;
case 5: Friday();break;
case 6: Saturday();break;
case 7: Sunday();break;
}
}
void init(void) //LCD初始顯示
{
lcden = 0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
TMOD = 0x01;
ET0 = 1;
EA = 1;
TH0 = 0x3c;TL0 = 0xb0;
TR0 = 1;
write_com(0x80);
for(i=0;i<15;i++)
{
write_dat(table1[i]);delay(5);
}
write_com(0x80 + 0x40);
for(i=0;i<11;i++)
{
write_dat(table2[i]);delay(5);
}
}
void display_time(uchar ad,uchar time) //時間顯示
{
uchar a,b;
a = time/10;
b = time%10;
write_com(0x80 + 0x40 + ad);
write_dat(0x30 + a);
write_com(0x80 + 0x40 + 1 + ad);
write_dat(0x30 + b);
}
void display_date(uint nian,char yue,char ri) //日期顯示
{
uint y1,y2,y3,y4;
char a,b,c,d;
y1 = nian/1000;
y2 = nian%1000/100;
y3 = nian%1000%100/10;
y2 = nian%1000%100%10;
a = yue/10;
b = yue%10;
c = ri/10;
d = ri%10;
write_com(0x80 + 1);
write_dat(0x30 + y1);
write_com(0x80 + 2);
write_dat(0x30 + y2);
write_com(0x80 + 3);
write_dat(0x30 + y3);
write_com(0x80 + 4);
write_dat(0x30 + y4);
write_com(0x80 + 6);
write_dat(0x30 + a);
write_com(0x80 + 7);
write_dat(0x30 + b);
write_com(0x80 + 9);
write_dat(0x30 + c);
write_com(0x80 + 10);
write_dat(0x30 + d);
}
void display_state(uchar s) //模式狀態屏幕顯示
{
write_com(0x80 + 0x40 + 14);
write_dat(table3[s]);
}
void keyscan() //按鍵掃描
{
if(k1==0)
{
delay(10);
if(k1==0)
{
Led = 0;
k1num++;TR0 = 0;t = 0;
while(!k1);
if(k1num==1)
{write_com(0x80 + 0x40 + 11);write_com(0x0f);display_state(k1num - 1);} //s
if(k1num==2)
{write_com(0x80 + 0x40 + 8);display_state(k1num - 1);} //m
if(k1num==3)
{write_com(0x80 + 0x40 + 5);display_state(k1num - 1);} //h
if(k1num==4)
{write_com(0x80 + 14);display_state(k1num - 1);} //week
if(k1num==5)
{write_com(0x80 + 10);display_state(k1num - 1);} //day
if(k1num==6)
{write_com(0x80 + 7);display_state(k1num - 1);} //month
if(k1num==7)
{write_com(0x80 + 4);display_state(k1num - 1);} //year
if(k1num==8)
{k1num = 0;write_com(0x0c);TR0 = 1;Led = 1;display_state(7);}
}
}
if(k1num!=0)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
while(!k2);
if(k1num==1)
{
s++;
if(s==60)
s = 0;
display_time(10,s);
}
if(k1num==2)
{
m++;
if(m==60)
m = 0;
display_time(7,m);
}
if(k1num==3)
{
h++;
if(h==24)
h = 0;
display_time(4,h);
}
if(k1num==4)
{
w++;
if(w==8)
w = 1;
display_week(w);
}
if(k1num==5)
{
day++;
if(day==32)
day = 1;
display_date(year,month,day);
}
if(k1num==6)
{
month++;
if(month==13)
month = 1;
display_date(year,month,day);
}
if(k1num==7)
{
year++;
display_date(year,month,day);
}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
while(!k3);
if(k1num==1)
{ s--;
if(s==-1)
s=59;
display_time(10,s);
}
if(k1num==2)
{ m--;
if(m==-1)
m=59;
display_time(7,m);
}
if(k1num==3)
{ h--;
if(h==-1)
h=23;
display_time(4,h);
}
if(k1num==4)
{ w--;
if(w==0)
w=7;
display_week(w);
}
if(k1num==5)
{ day--;
if(day==0)
day=31;
display_date(year,month,day);
}
if(k1num==6)
{ month--;
if(month==0)
month=12;
display_date(year,month,day);
}
if(k1num==7)
{ year--;
display_date(year,month,day);
}
}
}
}
display_date(year,month,day);
display_week(w);
display_time(10,s);
display_time(7,m);
display_time(4,h);
}
void timer0()interrupt 1
{
t++;
TH0=0x3c;
TL0=0xb0;
if(t==20)
{s++;t=0;}
if(s==60)
{m++;s=0;}
if(m==60)
{h++;m=0;}
if(h==24)
{w++;day++;h=0;}
if(w==8)
{w=1;}
if(day==32)
{month++;day=1;}
if(month==13)
{year++;month=1;}
}
void main()
{
init();
while(1);
{
keyscan();
}
}
作者:
lids
時間:
2019-12-27 09:08
你又不說是什么問題,你是想幫你的人自己去猜嗎?
作者:
Wprogrammer
時間:
2019-12-27 10:02
while(!k1); 和delay 延時做按鍵檢測效果真的差 你去參考別人用中斷做的
作者:
wulin
時間:
2019-12-27 10:27
bzy 發表于 2019-12-23 12:49
#include
#define uint unsigned int
#define uchar unsigned char
void main()
{
init();
while(1); 這里多了分號,
{
keyscan();
}
}
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1