51单片机,1602动态显示时钟,有独立按键(3个k1,k2,k3)分别控制选择,加1,减一
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/03 07:34:13
51单片机,1602动态显示时钟,有独立按键(3个k1,k2,k3)分别控制选择,加1,减一
程序如下,k1键是功能键,只有k1键按下,k2(加1键)才能按下,我现在k1键按下之后能看到光标的闪烁,按k2键之后,却没有反应,应该是要加1的,
#include
#include
#include "1602.h"
sbit k1=P3^0; //功能键,设置光标闪烁
sbit k2=P3^1; //时间加1
sbit k3=P3^2; //时间减1
uchar code table1[]=" 2013-08-06 Tue ";
uchar code table2[]=" 22:58:50 ";
uchar i,count;
uchar shi,fen,miao,k1num;
void write_sfm(uchar add,uchar date);
void keyscan();
void main(){
\x05ledinit();
\x05shi=22;
\x05fen=58;
\x05miao=50;
\x05//设置定时器
\x05TMOD=0x01;
\x05TH0=0x3c;
\x05TL0=0xb0;
\x05EA=1;
\x05ET0=1;
\x05TR0=1;
\x05\x05
\x05while(table1[i]!='\0')
\x05{
\x05\x05write_data(table1[i]);
\x05\x05i++;
\x05}
\x05write_com(0xc0);
\x05i=0;
\x05while(table2[i]!='\0'){
\x05\x05write_data(table2[i]);
\x05\x05i++;\x05
\x05}
\x05while(1){
\x05\x05keyscan();
\x05\x05if(count==20){\x05//定时器为:50ms*20=1000ms=1s
\x05\x05count=0;
\x05\x05miao++;
\x05\x05if(miao==60){
\x05\x05\x05miao=0;
\x05\x05\x05fen++;
\x05\x05\x05if(fen==60){
\x05\x05\x05\x05fen=0;
\x05\x05\x05\x05shi++;
\x05\x05\x05\x05if(shi==24){
\x05\x05\x05\x05\x05shi=0;
\x05\x05\x05\x05}
\x05\x05\x05\x05write_sfm(3,shi);
\x05\x05\x05}
\x05\x05\x05write_sfm(6,fen);
\x05\x05}
\x05\x05write_sfm(9,miao);
\x05}
\x05}
\x05
\x05
}
void keyscan(){
\x05if(k1==0){
\x05\x05delay(5);
\x05\x05if(k1==0){
\x05\x05\x05k1num++;
\x05\x05\x05while(!k1);\x05 //松手
\x05\x05\x05if(k1num==1){
\x05\x05\x05\x05TR0=0;//关闭中断,计时器停止工作!
\x05\x05\x05\x05write_com(0xc0+10);\x05
\x05\x05\x05\x05write_com(0x0f); //光标闪烁命令发送一次就可以了.
\x05\x05\x05}
\x05\x05\x05if(k1num==2){
\x05\x05\x05\x05write_com(0xc0+7);
\x05\x05\x05}
\x05\x05\x05if(k1num==3){
\x05\x05\x05\x05write_com(0xc0+4);
\x05\x05\x05}
\x05\x05\x05if(k1num==4){
\x05\x05\x05\x05k1num=0;
\x05\x05\x05\x05write_com(0x0c); //取消光标的闪烁
\x05\x05\x05\x05TR0=1;
\x05\x05\x05}
\x05\x05\x05
\x05\x05//按k1键之后才能按k2,k3键
\x05\x05\x05if(k1num!=0){\x05 //说明功能键被按下
\x05\x05\x05\x05if(k2==0){
\x05\x05\x05\x05\x05delay(5);
\x05\x05\x05\x05\x05if(k2==0){
\x05\x05\x05\x05\x05\x05while(!k2); //松手
\x05\x05\x05\x05\x05\x05if(k1num==1){\x05//秒针
\x05\x05\x05\x05\x05\x05\x05miao++;
\x05\x05\x05\x05\x05\x05\x05if(miao==60)
\x05\x05\x05\x05\x05\x05\x05\x05miao=0;
//\x05\x05\x05\x05\x05\x05\x05write_com(0xc0+9);
//\x05\x05\x05\x05\x05\x05\x05write_data(0x30+miao/10);
//\x05\x05\x05\x05\x05\x05\x05write_data(0x30+miao%10);
\x05\x05\x05\x05\x05\x05\x05write_sfm(9,miao);
//\x05\x05\x05\x05\x05\x05\x05write_com(0xc0+10);//将数据指针退一格\x05
\x05\x05\x05\x05\x05\x05}
\x05\x05\x05\x05\x05\x05if(k1num==2){\x05 //分针
\x05\x05\x05\x05\x05\x05\x05fen++;
\x05\x05\x05\x05\x05\x05\x05if(fen==60)
\x05\x05\x05\x05\x05\x05\x05\x05fen=0;
\x05\x05\x05\x05\x05\x05\x05write_sfm(6,fen);
\x05\x05\x05\x05\x05\x05\x05write_com(0xc0+6);
\x05\x05\x05\x05\x05\x05}
\x05\x05\x05\x05\x05\x05if(k1num==3){\x05 //时针
\x05\x05\x05\x05\x05\x05\x05shi++;
\x05\x05\x05\x05\x05\x05\x05if(shi==24)
\x05\x05\x05\x05\x05\x05\x05\x05shi=0;
\x05\x05\x05\x05\x05\x05\x05write_sfm(3,shi);
\x05\x05\x05\x05\x05\x05\x05write_com(0xc0+3);
\x05\x05\x05\x05\x05\x05}
\x05\x05\x05\x05\x05}
\x05\x05\x05\x05}
\x05\x05\x05}\x05\x05\x05
\x05\x05}
\x05\x05
\x05}
}
//刷新时间
void write_sfm(uchar add,uchar date){
\x05uchar shiwei,gewei;
\x05shiwei=date/10;
\x05gewei=date%10;
\x05write_com(0xc0+add);
\x05write_data(0x30+shiwei);
\x05write_data(0x30+gewei);
}
void timer0() interrupt 1{
\x05TH0=0x3c;
\x05TL0=0xb0;
\x05count++;
}
程序如下,k1键是功能键,只有k1键按下,k2(加1键)才能按下,我现在k1键按下之后能看到光标的闪烁,按k2键之后,却没有反应,应该是要加1的,
#include
#include
#include "1602.h"
sbit k1=P3^0; //功能键,设置光标闪烁
sbit k2=P3^1; //时间加1
sbit k3=P3^2; //时间减1
uchar code table1[]=" 2013-08-06 Tue ";
uchar code table2[]=" 22:58:50 ";
uchar i,count;
uchar shi,fen,miao,k1num;
void write_sfm(uchar add,uchar date);
void keyscan();
void main(){
\x05ledinit();
\x05shi=22;
\x05fen=58;
\x05miao=50;
\x05//设置定时器
\x05TMOD=0x01;
\x05TH0=0x3c;
\x05TL0=0xb0;
\x05EA=1;
\x05ET0=1;
\x05TR0=1;
\x05\x05
\x05while(table1[i]!='\0')
\x05{
\x05\x05write_data(table1[i]);
\x05\x05i++;
\x05}
\x05write_com(0xc0);
\x05i=0;
\x05while(table2[i]!='\0'){
\x05\x05write_data(table2[i]);
\x05\x05i++;\x05
\x05}
\x05while(1){
\x05\x05keyscan();
\x05\x05if(count==20){\x05//定时器为:50ms*20=1000ms=1s
\x05\x05count=0;
\x05\x05miao++;
\x05\x05if(miao==60){
\x05\x05\x05miao=0;
\x05\x05\x05fen++;
\x05\x05\x05if(fen==60){
\x05\x05\x05\x05fen=0;
\x05\x05\x05\x05shi++;
\x05\x05\x05\x05if(shi==24){
\x05\x05\x05\x05\x05shi=0;
\x05\x05\x05\x05}
\x05\x05\x05\x05write_sfm(3,shi);
\x05\x05\x05}
\x05\x05\x05write_sfm(6,fen);
\x05\x05}
\x05\x05write_sfm(9,miao);
\x05}
\x05}
\x05
\x05
}
void keyscan(){
\x05if(k1==0){
\x05\x05delay(5);
\x05\x05if(k1==0){
\x05\x05\x05k1num++;
\x05\x05\x05while(!k1);\x05 //松手
\x05\x05\x05if(k1num==1){
\x05\x05\x05\x05TR0=0;//关闭中断,计时器停止工作!
\x05\x05\x05\x05write_com(0xc0+10);\x05
\x05\x05\x05\x05write_com(0x0f); //光标闪烁命令发送一次就可以了.
\x05\x05\x05}
\x05\x05\x05if(k1num==2){
\x05\x05\x05\x05write_com(0xc0+7);
\x05\x05\x05}
\x05\x05\x05if(k1num==3){
\x05\x05\x05\x05write_com(0xc0+4);
\x05\x05\x05}
\x05\x05\x05if(k1num==4){
\x05\x05\x05\x05k1num=0;
\x05\x05\x05\x05write_com(0x0c); //取消光标的闪烁
\x05\x05\x05\x05TR0=1;
\x05\x05\x05}
\x05\x05\x05
\x05\x05//按k1键之后才能按k2,k3键
\x05\x05\x05if(k1num!=0){\x05 //说明功能键被按下
\x05\x05\x05\x05if(k2==0){
\x05\x05\x05\x05\x05delay(5);
\x05\x05\x05\x05\x05if(k2==0){
\x05\x05\x05\x05\x05\x05while(!k2); //松手
\x05\x05\x05\x05\x05\x05if(k1num==1){\x05//秒针
\x05\x05\x05\x05\x05\x05\x05miao++;
\x05\x05\x05\x05\x05\x05\x05if(miao==60)
\x05\x05\x05\x05\x05\x05\x05\x05miao=0;
//\x05\x05\x05\x05\x05\x05\x05write_com(0xc0+9);
//\x05\x05\x05\x05\x05\x05\x05write_data(0x30+miao/10);
//\x05\x05\x05\x05\x05\x05\x05write_data(0x30+miao%10);
\x05\x05\x05\x05\x05\x05\x05write_sfm(9,miao);
//\x05\x05\x05\x05\x05\x05\x05write_com(0xc0+10);//将数据指针退一格\x05
\x05\x05\x05\x05\x05\x05}
\x05\x05\x05\x05\x05\x05if(k1num==2){\x05 //分针
\x05\x05\x05\x05\x05\x05\x05fen++;
\x05\x05\x05\x05\x05\x05\x05if(fen==60)
\x05\x05\x05\x05\x05\x05\x05\x05fen=0;
\x05\x05\x05\x05\x05\x05\x05write_sfm(6,fen);
\x05\x05\x05\x05\x05\x05\x05write_com(0xc0+6);
\x05\x05\x05\x05\x05\x05}
\x05\x05\x05\x05\x05\x05if(k1num==3){\x05 //时针
\x05\x05\x05\x05\x05\x05\x05shi++;
\x05\x05\x05\x05\x05\x05\x05if(shi==24)
\x05\x05\x05\x05\x05\x05\x05\x05shi=0;
\x05\x05\x05\x05\x05\x05\x05write_sfm(3,shi);
\x05\x05\x05\x05\x05\x05\x05write_com(0xc0+3);
\x05\x05\x05\x05\x05\x05}
\x05\x05\x05\x05\x05}
\x05\x05\x05\x05}
\x05\x05\x05}\x05\x05\x05
\x05\x05}
\x05\x05
\x05}
}
//刷新时间
void write_sfm(uchar add,uchar date){
\x05uchar shiwei,gewei;
\x05shiwei=date/10;
\x05gewei=date%10;
\x05write_com(0xc0+add);
\x05write_data(0x30+shiwei);
\x05write_data(0x30+gewei);
}
void timer0() interrupt 1{
\x05TH0=0x3c;
\x05TL0=0xb0;
\x05count++;
}
你好,
我这又一个参考程序,是用郭天祥的TX-1C开发板写的,有3个按键,调节光标,时间加,时间减.引脚方便可以根据自己的开发板更改,其他程序内容不变.
希望我的回答能帮助到你.
我这又一个参考程序,是用郭天祥的TX-1C开发板写的,有3个按键,调节光标,时间加,时间减.引脚方便可以根据自己的开发板更改,其他程序内容不变.
希望我的回答能帮助到你.
51单片机,1602动态显示时钟,有独立按键(3个k1,k2,k3)分别控制选择,加1,减一
单片机编程:当按下按键K1时,LED亮1个灯;当按下K2时,LED亮2个灯;K3亮3个灯;K4亮4个灯.求程序,
做一个简易时钟(1)8位数码管显示:时-分-秒;(2)4个按键:加1键,减1键,启动键/暂停复用键,清零键;(3)按键有
求解2个线性方程 1.k1-k2+3k3=0 3k1+k2+k3=0 -k1+2k2-5k3=0 2.k1-k2+2k3
单片机汇编语言按键控制流水灯,两个开关k1,k2.实现功能按下k1,流水灯左移动,按下k2,流水灯右移动.
已知三角形ABC,A(3,1),平行于AB,BC,CA边的中位线所在直线的斜率分别为k1,k2,k3,比较k1,k2,k
单片机中开关K1,K2,K3,K4分别接P1.0到P1.4口,灯D1接P2.0口,K1,K2,K3中一个开关闭合灯亮,断
EIGRP Metric的5个标准 K1 K2 K3有问
如图,直线l1、l2、l3的斜率分别为k1、k2、k3,则必有( )
int k1=1,k2=2,k3=3,x=15; if(!k1) x--; else if(k2) if(k3) x=4
k1(a1+a2)+k2(a2+a3)+k3(a3+a1)=0 所以有(k1+k3)a1+(k1+k2)a2+(k2+k
intk1=1,k2=2,k3=3,x=15;if(!k1)x--;elseif(k2)if(k3)x=4;elsex=