當前位置:編程學習大全網 - 編程語言 - 急救!!!各位兄弟姐妹們誰懂單片機編程啊,幫幫我啊!用單片機編輯壹個數字鐘的程序啊,要求如下:

急救!!!各位兄弟姐妹們誰懂單片機編程啊,幫幫我啊!用單片機編輯壹個數字鐘的程序啊,要求如下:

給妳壹個我用液晶屏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);

}

}

  • 上一篇:教育培訓廣告語大全
  • 下一篇:如何用Scapy寫壹個端口掃描器
  • copyright 2024編程學習大全網