做了一個(gè)3310顯示的時(shí)鐘,只是用到定時(shí)器,簡(jiǎn)單一點(diǎn)。 
- //E:\DPJ-C\3310-16\3310_CLOCK\3310_CLOCK.C 2012 01 05
- #include<reg51.h>
- #include<intrins.h>
- #include"tab.h"
- #include"tab1.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit SCLK=P1^0;
- sbit SDIN=P1^1;
- sbit DC=P1^2;
- sbit SCE=P1^3;
- sbit RES=P1^4;
- sbit key_s_p=P3^0;
- sbit key_clear=P3^1;
- sbit key_hh=P3^2;
- sbit key_mm=P3^3;
- sbit key_ss=P3^4;
- uchar time,time1,num,hh,mm,ss,h_1,h_0,m_1,m_0,s_1,s_0;
- bit flag,Lkey;
- void delay(uint ms);
- void keyscan();
- void TimerINTinit();
- void write_dat(uchar dat);
- void write_com(dat);
- void set_add(uchar x,uchar y);
- void clear_scr();
- void disp_HH_MM(uchar x,uchar y,uchar *p );
- void disp_SS(uchar x,uchar y,uchar *s);
- void init_3310();
- void TimerINTinit()
- {
- TMOD=0x11;
- EA=1;
- ET0=1;
- ET1=1;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- }
- void keyscan()
- {
- while(!key_s_p)
- {
- delay(10);
- if(key_s_p)
- TR0=!TR0;
- }
- while(!key_clear) //清零鍵
- {
- delay(10);
- if(key_clear)
- {
- TR0=0;
- hh=0;
- mm=0;
- ss=0;
- }
- }
- while(!key_hh) //調(diào)時(shí)鍵
- {
- delay(10);
- TR1=1;
- if(time1>=10)
- {
- time1=0;
- Lkey=1; //長(zhǎng)按標(biāo)志置1
- }
- if(key_hh)
- {
- TR1=0;
- time1=0;
- if(Lkey)
- {
- hh=hh+10;
- Lkey=0;
- if(hh>24)
- hh=0;
- }
- else
- {
- hh++;
- }
- }
- if(hh==24)
- hh=0;
- }
- while(!key_mm) //調(diào)分鍵
- {
- delay(10);
- TR1=1;
- if(time1>=10)
- {
- time1=0;
- Lkey=1; //長(zhǎng)按標(biāo)志置1
- }
- if(key_mm)
- {
- TR1=0;
- time1=0;
- if(Lkey)
- {
- mm=mm+10; //長(zhǎng)按加10
- Lkey=0;
- if(mm>60)
- mm=0;
- }
- else
- {
- mm++;
- }
- }
- if(mm==60)
- mm=0;
- }
- while(!key_ss) //調(diào)秒鍵
- {
- delay(10);
- TR1=1;
- if(time1>=10)
- {
- time1=0;
- Lkey=1; //長(zhǎng)按標(biāo)志置1
- }
- if(key_ss)
- {
- TR1=0;
- time1=0;
- if(Lkey)
- {
- ss=ss+10; //長(zhǎng)按加10
- Lkey=0;
- if(ss>60)
- ss=0;
- }
- else
- {
- ss++;
- }
- }
- if(ss==60)
- ss=0;
- }
- }
-
- void delay(uint ms)
- {
- uchar i;
- while(ms--)
- for(i=0;i<123;i++);
- }
- void write_dat(uchar dat)
- {
- uchar i;
- SCE=0;
- for(i=0;i<8;i++)
- {
- SCLK=0;
- dat<<=1;
- SDIN=CY;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- }
- DC=1;
- SCE=1;
- }
- void write_com(dat)
- {
- DC=0;
- write_dat(dat);
- }
- void set_add(uchar x,uchar y)
- {
- write_com(x|0x80);//設(shè)置RAM的x地址 1 X?6?4 X?6?3 X?6?2 X?6?1 X?6?0 X?6?9 X?6?8
- write_com(y|0x40);//設(shè)置RAM的y地址 0 1 0 0 0 Y?6?0 Y?6?9 Y?6?8
- }
- void clear_scr()
- {
- uchar i,j;
- for(i=0;i<6;i++) //6行、84列
- {
- write_dat(0x00);
- while(j<84)
- {
- write_dat(0x00);
- j++;
- }
- j=0;
- }
- }
- void disp_HH_MM(uchar x,uchar y,uchar *p )
- {
- uint i;
- set_add(x,y);
- {
- for(i=0;i<16;i++)
- {
- write_dat(p[2*i]);
- }
- }
- set_add(x,y+1);
- {
- for(i=0;i<16;i++)
- {
- write_dat(p[2*i+1]);
- }
- }
- }
- void disp_SS(uchar x,uchar y,uchar *s)
- {
- uint i;
- set_add(x,y);
- {
- for(i=0;i<8;i++)
- {
- write_dat(s[i]);
- }
- }
- }
- void init_3310()
- {
- write_com(0x21); //功能設(shè)定,使用擴(kuò)充命令
- write_com(0x99); //設(shè)定液晶電壓
- write_com(0x20); //使用基本命令
- write_com(0x0d); //設(shè)定顯示模式,反白顯示
- clear_scr();
- }
- void main()
- {
- TimerINTinit();
- RES=0;
- RES=0;
- RES=0;
- RES=0;
- _nop_();
- _nop_();
- RES=1;
- init_3310();
- while(1)
- {
- keyscan();
- if(ss==60)
- {
- ss=0;
- mm++;
- if(mm==60)
- {
- mm=0;
- hh++;
- }
- if(hh==24)
- hh=0;
- }
- h_1=hh/10;
- h_0=hh%10;
- m_1=mm/10;
- m_0=mm%10;
- s_0=ss%10;
- s_1=ss/10;
- disp_HH_MM(0x02,0x02,tab+h_1);
- disp_HH_MM(0x12,0x02,tab+h_0);
- disp_HH_MM(0x30,0x02,tab+m_1);
- disp_HH_MM(0x40,0x02,tab+m_0);
- disp_SS(0x40,0x05,tab1+s_1);
- disp_SS(0x48,0x05,tab1+s_0);
- if(!flag)
- disp_HH_MM(0x21,0x02,tab+10);
- else
- disp_HH_MM(0x21,0x02,tab+11);
-
- }
- }
- void T0INT()interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- time++;
- if(time==20)
- {
- time=0;
- ss++;
- flag=!flag;
- }
- }
- void T1INT()interrupt 3
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- time1++; //長(zhǎng)按標(biāo)志
-
- }
-
復(fù)制代碼
"TAB.H"
- //16x16 逐列、逆向、陰碼 Microsoft Sans Serif 寬 31 高 25
- unsigned char code tab[12][32]=
- {
- {0x00,0x00,0xE0,0x0F,0xF8,0x3F,0xFC,0x7F,0x1C,0x70,0x0E,0xE0,0x06,0xC0,0x06,0xC0,
- 0x06,0xC0,0x06,0xC0,0x0E,0xE0,0x1C,0x70,0xFC,0x7F,0xF8,0x3F,0xE0,0x0F,0x00,0x00,},/*"0",0*/
- {0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x38,0x00,0x18,0x00,
- 0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"1",1*/
- {0x00,0x00,0x10,0xE0,0x18,0xE0,0x1C,0xF0,0x0E,0xD8,0x06,0xD8,0x06,0xCC,0x06,0xCC,
- 0x06,0xC6,0x06,0xC6,0x06,0xC3,0x8E,0xC1,0xFC,0xC1,0xFC,0xC0,0x78,0xC0,0x00,0x00,},/*"2",2*/
- {0x00,0x00,0x10,0x30,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x06,0xC0,0x86,0xC1,0x86,0xC1,
- 0x86,0xC1,0x86,0xC1,0xCE,0xC3,0xFC,0x63,0x7C,0x7F,0x38,0x3E,0x00,0x1C,0x00,0x00,},/*"3",3*/
- {0x00,0x00,0x00,0x0E,0x00,0x0F,0x80,0x0D,0xC0,0x0C,0x60,0x0C,0x60,0x0C,0x30,0x0C,
- 0x18,0x0C,0x0C,0x0C,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x0C,0x00,0x0C,0x00,0x00,},/*"4",4*/
- {0x00,0x00,0x00,0x10,0xE0,0x71,0xFE,0x71,0xFE,0xE1,0x9E,0xC0,0xC6,0xC0,0xC6,0xC0,
- 0xC6,0xC0,0xC6,0xC0,0xC6,0xE1,0xC6,0x71,0x86,0x7F,0x06,0x3F,0x00,0x1E,0x00,0x00,},/*"5",5*/
- {0x00,0x00,0xE0,0x0F,0xF8,0x3F,0xFC,0x7F,0xBC,0x71,0x8E,0xE1,0xC6,0xC0,0xC6,0xC0,
- 0xC6,0xC0,0xC6,0xC0,0xC6,0xE1,0xCE,0x61,0x9C,0x7F,0x1C,0x3F,0x10,0x1E,0x00,0x00,},/*"6",6*/
- {0x00,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x80,0x06,0xE0,0x06,0xF0,0x06,0xFC,
- 0x06,0x3F,0xC6,0x0F,0xE6,0x03,0xFE,0x01,0x7E,0x00,0x1E,0x00,0x06,0x00,0x00,0x00,},/*"7",7*/
- {0x00,0x00,0x00,0x3C,0x38,0x7E,0x7C,0x7E,0xFC,0xE7,0xCE,0xC3,0xC6,0xC1,0x86,0xC1,
- 0x86,0xC1,0xC6,0xC1,0xCE,0xC3,0xFC,0xE7,0x7C,0x7E,0x38,0x7E,0x00,0x3C,0x00,0x00,},/*"8",8*/
- {0x00,0x00,0xF0,0x10,0xF8,0x71,0xFC,0x73,0x0C,0xE7,0x0E,0xC7,0x06,0xC6,0x06,0xC6,
- 0x06,0xC6,0x06,0xC6,0x0E,0xE3,0x1C,0x7B,0xFC,0x7F,0xF8,0x1F,0xE0,0x0F,0x00,0x00,},/*"9",9*/
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,
- 0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*":",10*/
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*" ",11*/
- };
- /***************************************************************/
復(fù)制代碼
"TAB1.H"
- // 8x8 逐列、逆向、陰碼 Microsoft Sans Serif 字寬 14 字高 12
- unsigned char code tab1[10][8]=
- {
- {0x00,0x7C,0x82,0x82,0x82,0x82,0x7C,0x00,},/*"0",0*/
- {0x00,0x00,0x04,0x04,0xFE,0x00,0x00,0x00,},/*"1",1*/
- {0x00,0x84,0xC2,0xA2,0xA2,0x92,0x8C,0x00,},/*"2",2*/
- {0x00,0x44,0x82,0x92,0x92,0x92,0x6C,0x00,},/*"3",3*/
- {0x00,0x20,0x30,0x28,0x24,0xFE,0x20,0x00,},/*"4",4*/
- {0x00,0x4E,0x8A,0x8A,0x8A,0xCA,0x72,0x00,},/*"5",5*/
- {0x00,0x7C,0xD6,0x92,0x92,0x92,0x64,0x00,},/*"6",6*/
- {0x00,0x02,0x82,0x42,0x32,0x0A,0x06,0x00,},/*"7",7*/
- {0x00,0x6C,0x92,0x92,0x92,0x92,0x6C,0x00,},/*"8",8*/
- {0x00,0x4C,0x92,0x92,0x92,0xD2,0x7C,0x00,},/*"9",9*/
- };
復(fù)制代碼
|