导航:首页 > 操作系统 > 单片机编程页面

单片机编程页面

发布时间:2025-08-15 04:22:07

‘壹’ 急救!!!各位兄弟姐妹们谁懂单片机编程啊,帮帮我啊!用单片机编辑一个数字钟的程序啊,要求如下:

给你一个我用液晶屏12864写的程序,一个是功能键,按照顺序按一下是第一位跳动,接下再按就是第二位,一次类推。第二个按键是控制加,第三个按键是控制减,你的数码管和这个很类似,比这个还简单,在这你也没有要求数码管是怎么接的。你可以参考的。
#include<reg52.h>
#include<chushihua.h> //12864的初始化函数;
char gwnian,nian,yue,ri,xq,shi,fen,miao;
sbit DQ =P3^5; //定义DS18B20通信端口
sbit led_en_port = P2^5; /*发光二极管寄存器LE引脚*/
sbit sled_en_port = P3^6; /*数码管寄存器LE引脚*/
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
uchar code mun_to_char[] = {"0123456789"}; /*数字转换为ASCII字符码*/
uchar table[]={"制作人:"};
uchar table2[]={"2009年11月28日晚"};
uchar table1[]={"江向阳"};
uchar table31[]={"年"};
uchar table32[]={"月"};
uchar table33[]={"日"};
uchar table4[]={"星期"};
uchar table51[]={"时"};
uchar table52[]={"分"};
uchar table53[]={"秒"};
uchar table6[]={"当前温度:20.3"};
//uchar table61[]={"??度"};
uchar xq1[]={"一"};
uchar xq2[]={"二"};
uchar xq3[]={"叁"};
uchar xq4[]={"四"};
uchar xq5[]={"五"};
uchar xq6[]={"六"};
uchar xq7[]={"日"};

/***************写星期函数*******************/
write_xq(uchar z)
{
uchar num;
write_com(0x90+5);
switch(z)
{
case 1: for(num=0;num<2;num++)
{
write_date(xq1[num]);
delay(1);
}
break;
case 2: for(num=0;num<2;num++)
{
write_date(xq2[num]);
delay(1);
}
break;
case 3: for(num=0;num<2;num++)
{
write_date(xq3[num]);
delay(1);
}
break;
case 4: for(num=0;num<2;num++)
{
write_date(xq4[num]);
delay(1);
}
break;
case 5: for(num=0;num<2;num++)
{
write_date(xq5[num]);
delay(1);
}
break;
case 6: for(num=0;num<2;num++)
{
write_date(xq6[num]);
delay(1);
}
break;
case 7: for(num=0;num<2;num++)
{
write_date(xq7[num]);
delay(1);
}
break;
}
}

/*************写年月日函数**************/
void write_nyr(uchar date,uchar add)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+shi);
write_date(0x30+ge);
}

/*************写时分秒函数**************/
void write_sfm(uchar date,uchar add)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x88+add);
write_date(0x30+shi);
write_date(0x30+ge);
}

/*****************键盘扫描*****************/
void keyscan()
{
uchar keynum;
if(key1==0)
{
delay(5);
if(key1==0)
{
while(!key1);
delay(5);
while(!key1);
keynum++;
TR0=0;
if(keynum==1)
{
//TR0=0;
write_com(0x8D);
write_com(0x0f);

}
if(keynum==2)
{
//TR0=0;
write_com(0x8B);
write_com(0x0f);
}
if(keynum==3)
{
//TR0=0;
write_com(0x89);
write_com(0x0f);
}
if(keynum==4)
{
//TR0=1;
write_com(0x95);
write_com(0x0f);
}
if(keynum==5)
{
//TR0=1;
write_com(0x85);
write_com(0x0f);
}
if(keynum==6)
{
//TR0=1;
write_com(0x83);
write_com(0x0f);
}
if(keynum==7)
{
//TR0=1;
write_com(0x81);
write_com(0x0f);
}
if(keynum==8)
{
//TR0=1;
write_com(0x80);
write_com(0x0f);
}
if(keynum==9)
{
TR0=1;
keynum=0;
//write_com(0x95);
write_com(0x0c);
}
}
}
if(keynum==1)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
delay(5);
while(!key2);
miao++;
if(miao==60)
miao=0;
write_sfm(miao,5);
write_com(0x8D);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
delay(5);
while(!key3);
miao--;
if(miao==-1)
miao=59;
write_sfm(miao,5);
write_com(0x8D);
}
}
}
if(keynum==2)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
delay(5);
while(!key2);
fen++;
if(fen==60)
fen=0;
write_sfm(fen,3);
write_com(0x8B);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
delay(5);
while(!key3);
fen--;
if(fen==-1)
fen=59;
write_sfm(fen,3);
write_com(0x8B);
}
}
}
if(keynum==3)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
delay(5);
while(!key2);
shi++;
if(shi==24)
shi=0;
write_sfm(shi,1);
write_com(0x89);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
delay(5);
while(!key3);
shi--;
if(shi==-1)
shi=23;
write_sfm(shi,1);
write_com(0x89);
}
}
}
if(keynum==4)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
delay(5);
while(!key2);
xq++;
if(xq==8)
xq=1;
write_xq(xq);
write_com(0x95);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
delay(5);
while(!key3);
xq--;
if(xq==0)
xq=7;
write_xq(xq);
write_com(0x95);
}
}
}
if(keynum==5)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
delay(5);
while(!key2);
ri++;
if(ri==31)
ri=1;
write_nyr(ri,5);
write_com(0x85);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
delay(5);
while(!key3);
ri--;
if(ri==0)
ri=30;
write_nyr(ri,5);
write_com(0x85);
}
}
}
if(keynum==6)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
delay(5);
while(!key2);
yue++;
if(yue==13)
yue=1;
write_nyr(yue,3);
write_com(0x83);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
delay(5);
while(!key3);
yue--;
if(yue==0)
yue=12;
write_nyr(yue,3);
write_com(0x83);
}
}
}
if(keynum==7)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
delay(5);
while(!key2);
nian++;
if(nian==100)
nian=0;;
write_nyr(nian,1);
write_com(0x81);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
delay(5);
while(!key3);
nian--;
if(nian==-1)
nian=99;
write_nyr(nian,1);
write_com(0x81);
}
}
}
if(keynum==8)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
delay(5);
while(!key2);
gwnian++;
if(gwnian==100)
gwnian=0;
write_nyr(gwnian,0);
write_com(0x80);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
delay(5);
while(!key3);
gwnian--;
if(gwnian==-1)
gwnian=99;
write_nyr(gwnian,0);
write_com(0x80);
}
}
}
}

/************主函数********************/
void main()
{
uint num;
led_en_port = 0;/*关闭发光二极管显示*/
sled_en_port = 0;/*关闭数码管显示*/
gwnian=20;
nian=9;
yue=11;
ri=28;
xq=6;
shi=23;
fen=58;
miao=45;
init(); //12864液晶初始化;

write_com(0x80);//设置初始显示的坐标;
for(num=0;num<8;num++) /******在第一行显示制作人*******/
{
write_date(table[num]);
delay(100);
}
write_com(0x93); //第二行的初始坐标;
for(num=0;num<6;num++) /**********在第二行显示江向阳*******/
{
write_date(table1[num]);
delay(100);
}
write_com(0x88);//第三行的初始坐标
for(num=0;num<16;num++) /******在第三行显示制作时间*******/
{
write_date(table2[num]);
delay(100);
}
for(num=50;num>0;num--) ///延时,第一屏的显示时间 ;
delay(50000);
TMOD=0x01; //定时器0工作方式1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=0X01;
ET0=0X01;
TR0=0X01;
write_com(0x01);//清屏;
// delay(5);
// write_com(0x01);
write_com(0x80); //写入初始的年月日数据(2009-11-28);
write_date('2');
write_date('0');
write_date('0');
write_date('9');
write_com(0x83);
write_date('1');
write_date('1');
write_com(0x85);
write_date('2');
write_date('8');
write_com(0x95);
for(num=0;num<2;num++) //写入星期函数(周六);
{
write_date(xq6[num]);
}
write_com(0x89); //写入初始的时分秒函数(23:58:45);
write_date('2');
write_date('3');
write_com(0x8B);
write_date('5');
write_date('8');
write_com(0x8D);
write_date('4');
write_date('5');
write_com(0x82);
for(num=0;num<2;num++) //固定显示‘年’
{
write_date(table31[num]);
delay(1);
}
write_com(0x84);
for(num=0;num<2;num++) //固定显示‘月’
{
write_date(table32[num]);
delay(1);
}
write_com(0x86); //固定显示‘日’
for(num=0;num<2;num++)
{
write_date(table33[num]);
delay(1);
}
write_com(0x92); //固定显示‘星期’
for(num=0;num<4;num++)
{
write_date(table4[num]);
delay(1);
}
write_com(0x8A); //固定显示'时'
for(num=0;num<2;num++)
{
write_date(table51[num]);
delay(1);
}
write_com(0x8C); //固定显示'分'
for(num=0;num<2;num++)
{
write_date(table52[num]);
delay(1);
}
write_com(0x8E); //固定显示'秒'
for(num=0;num<2;num++)
{
write_date(table53[num]);
delay(1);
}
write_com(0x98); //固定显示'当前温度:20.3'
for(num=0;num<14;num++)
{
write_date(table6[num]);
delay(1);
}

/***************显示温度字符命令****************/
write_com(0x64); //开启扩展指令显示;
write_com(0x9f); //设置显示地址 ;
write_date(0xA1); //显示的字符编码地址;
write_date(0xE6);
write_com(0x66); //关闭扩展功能;

while(1)
{
keyscan;
}
}
void timer0() interrupt 1
{
uchar count;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
ri++;
xq++;
if(xq==8)
{
xq=1;
}
if(ri==31)
{
ri=1;
yue++;
if(yue==13)
{
yue=1;
nian++;
if(nian==100)
{
nian=0;
gwnian++;
if(gwnian==100)
gwnian=0;
write_nyr(gwnian,0);
}
write_nyr(nian,1);
}
write_nyr(yue,3);
}
write_xq(xq);
write_nyr(ri,5);
}
write_sfm(shi,1);
}
write_sfm(fen,3);
}
write_sfm(miao,5);
}

}

阅读全文

与单片机编程页面相关的资料

热点内容
如何修改手机编译时间 浏览:989
压缩机管不冷 浏览:674
控制器单片机固件 浏览:216
狼人杀服务器怎么填 浏览:406
单片机定义和使用一个变量 浏览:713
程序员宅客 浏览:198
怎么取消手机防误触模式安卓手机 浏览:709
兰特加密狗是什么 浏览:137
句柄的编译方法 浏览:79
微信电脑版在那个文件夹 浏览:410
辛巴app是什么 浏览:285
端游cf连接不上服务器为什么 浏览:878
华为编译器面试 浏览:722
单片机usbhid 浏览:877
待加密的数字签名 浏览:404
importandroid报错 浏览:934
通过云服务器导入脚本 浏览:430
指纹模块连接到单片机 浏览:236
显控51软件怎么编译不了 浏览:208
云服务器做训练 浏览:886