⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock-1620.c

📁 液晶1602的驱动程序。 用的是勤正达的FM1602A--3。 MCU用51
💻 C
字号:
#include"reg51.h"
#define uchar unsigned char
#define uint  unsigned int


sbit rs=P3^0;
sbit rw=P3^1;
sbit e=P3^2;
sbit ds=P1;
sbit button=P2^0;
sbit bf=P1^7;

uint ms=0;
uint second=0;
uint min=0;
uint hr=0;



uchar code tab[]={"***FM1602A--3***"};
uchar code tab1[]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11,
0x1F,0x11,0x11,0x11,0x1F,0x11,0x11,0x1F};         //   月日
uchar code number[]={"0123456789"};

uchar code inti0[]={"11 25   00:00:00"};



void nop(){}

void delay(uint q)               //延时
{uchar n;
while(q--)
{for(n=0;n<24;n++){;;}}
}



void check()                       //    判忙
{rs=0;
rw=1;
e=0;
P1=0xff;
e=1;
nop();
nop();
while(P&0x80){};
delay(10);
}

void sendc(uchar com)            //  发命令字
{check();
 
 
 rs=0;
 rw=0;
 e=1;
 P1=com;
 
 nop();
 e=0;
 nop();
 }

void sendd(uchar word)            // 发显示字
{check();
 
 
 rs=1;
 rw=0;
 e=1;
P1=word;
nop();
e=0;
 nop();
 }

void inti()                        // 初始化
{uchar d;
sendc(0x01);
 sendc(0x38);
 sendc(0x0c);
 sendc(0x06);
 delay(10);

 sendc(0x80);
for(d=0;d<16;d++)
{sendd(*(inti0+d));};
sendc(0x82);
sendd(0x00);
sendc(0x85);
sendd(0x01);
 sendc(0xc0);
for(d=0;d<16;d++)
{sendd(*(tab+d));};
}

void cpuinti()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
TR0=1;
EA=1;
ET0=1;
 }



void keyboard()
{}


void displayhr()         //////显示小时
{uchar ho,ht;
if(hr>9)
{
ht=hr/10;
ho=hr%10;}
else{ht=0;ho=hr;};

sendc(0x88);
sendd(*(number+ht));
sendc(0x89);
sendd(*(number+ho));
while(hr==24)
{hr=0;
//day++;
//displayhr();
};
}



void displaymin()   ///////////显示 分
{uchar mo,mt;
if(min>9)
{
mt=min/10;
mo=min%10;}
else{mt=0;mo=min;};

sendc(0x8b);
sendd(*(number+mt));
sendc(0x8c);
sendd(*(number+mo));
while(min==60)
{min=0;
hr++;
displayhr();};
}



void displaysec()   /////////////显示 秒
{uchar o,t;
if(second>9)
{
t=second/10;
o=second%10;}
else{t=0;o=second;};

sendc(0x8e);
sendd(*(number+t));
sendc(0x8f);
sendd(*(number+o));
while(second==60)
{second=0;
min++;
displaymin();};
}
 
 


void timer() interrupt 1            ///////////中断入口
{
ms++;

displaysec();
while(ms==14){TH0=0x3c;TL0=0xb0;
ms=0;
second++;}
}


void setcgram()
{uchar x; 
 sendc(0x40);
 for(x=0;x<16;x++)
 {sendd(*(tab1+x));}
}






void main()
{setcgram();
 inti(); 
cpuinti();
 
 while(1){};
 
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -