标题:
利用NOKIA 3310 LCD 显示屏做个电子时钟
[打印本页]
作者:
lianlian
时间:
2015-7-10 02:10
标题:
利用NOKIA 3310 LCD 显示屏做个电子时钟
做了一个3310显示的时钟,只是用到定时器,简单一点。
//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) //调时键
{
delay(10);
TR1=1;
if(time1>=10)
{
time1=0;
Lkey=1; //长按标志置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) //调分键
{
delay(10);
TR1=1;
if(time1>=10)
{
time1=0;
Lkey=1; //长按标志置1
}
if(key_mm)
{
TR1=0;
time1=0;
if(Lkey)
{
mm=mm+10; //长按加10
Lkey=0;
if(mm>60)
mm=0;
}
else
{
mm++;
}
}
if(mm==60)
mm=0;
}
while(!key_ss) //调秒键
{
delay(10);
TR1=1;
if(time1>=10)
{
time1=0;
Lkey=1; //长按标志置1
}
if(key_ss)
{
TR1=0;
time1=0;
if(Lkey)
{
ss=ss+10; //长按加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);//设置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);//设置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); //功能设定,使用扩充命令
write_com(0x99); //设定液晶电压
write_com(0x20); //使用基本命令
write_com(0x0d); //设定显示模式,反白显示
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++; //长按标志
}
复制代码
"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*/
};
/***************************************************************/
复制代码
"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*/
};
复制代码
作者:
With_commands
时间:
2018-3-23 22:23
谢谢分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1