📄 yejingshizhong.c
字号:
#include <reg51.h>
#include "intrins.h"
#include "absacc.h"
sbit RS=P2^0;
sbit RW=P2^1;
sbit E = P2^2;
sbit PSB = P2^3;
sbit RST = P2^4;
sbit key1= P2^5;
sbit tiaoh=P2^6;
sbit tiaom=P2^7;
sbit P37=P3^7;
unsigned char dispbuf[8]={0,0,10,0,0,10,0,0};
unsigned char flag;
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned int tcnt;
unsigned char z;
unsigned int tcnt1;
unsigned char scnt1;
unsigned char y;
void delay10ms(void)
{
char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void delay_10us( unsigned char x )
{
while( x-- );
}
void delay_ms( unsigned char cnt )
{
unsigned char i;
do{
i = 4;
do{
delay_10us(39);
} while(--i);
} while( --cnt );
}
void smNop(void)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
void check_busy(void)
{
P1=0xff;
RS=0;
RW=1;
while(1)
{smNop();
E=1;
smNop();
if(P1<0x80)
break;
smNop();
E=0;
}
E=0;
}
void send_com(const unsigned char command)
{
check_busy();
RS = 0;
RW = 0;
P1 = command;
E = 1;
smNop();
E = 0;
}
void send_com_init(const unsigned char command_init )
{
RS = 0;
RW = 0;
P1 = command_init;
E = 1;
smNop();
E = 0;
}
void send_data(const unsigned char data_a)
{
check_busy();
RS = 1; //DB7-DB0为显示数据
RW = 0; //写入数据
P1 = data_a;
E = 1;
smNop();
E = 0; //下降沿
}
void initial_LCD(void)
{
PSB = 1; //水平显示
RST = 0; //复位
_nop_();
_nop_();
RST = 1; //不复位
_nop_();
delay_10us(10);
send_com_init(0x30);//30H--基本指令操作
delay_10us(4);
send_com_init(0x0c);//开显示,关光标,不闪烁。
delay_10us(10);
send_com_init(0x01);//清除显示
delay_ms(10);
send_com_init(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。
}
void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char i1 )
{
unsigned char ddram = 0x00;
if(line == 1)
ddram = 0x80;
if(line == 2)
ddram = 0x90;
if(line == 3)
ddram = 0x88;
if(line == 4)
ddram = 0x98;
ddram = ddram + col - 1;
send_com( ddram ); //定位显示起始地址
send_data( ptr[i1] );//输出单个字符
}
void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
{
unsigned char ddram = 0x00;
unsigned char i1;
if(line == 1)
ddram = 0x80;
if(line == 2)
ddram = 0x90;
if(line == 3)
ddram = 0x88;
if(line == 4)
ddram = 0x98;
ddram = ddram + col - 1;
send_com( ddram ); //定位显示起始地址
for( i1 = 0;i1 < length;i1 ++ )
{
send_data(ptr[i1*2]);//输出单个字符
send_data(ptr[i1*2+1]);
}
}
const unsigned char code suc[]=
{ "智能闹钟"
};
const unsigned char code shuzhi[]={
"0123456789 "};
void main()
{TMOD=0x22;
TH1=0x06;
TL1=0x06;
ET1=1;
EA=1;
TH0=0x06;
TL0=0x06;
ET0=1;
EA=1;
TR0=1;
initial_LCD();
Display_ch(suc,1,3,4);
while(1)
{
if(tiaoh==0)
{delay10ms();
if(tiaoh==0)
{hour++;
if(hour==24)
hour=0;
dispbuf[0]=hour/10;
dispbuf[1]=hour%10;
while(tiaoh==0);
}
}
if(tiaom==0)
{delay10ms();
if(tiaom==0)
{minite++;
if(minite==60)
minite=0;
dispbuf[3]=minite/10;
dispbuf[4]=minite%10;
while(tiaom==0);
}
}
if(flag==1)
{flag=0;
send_com(0x90);
for(y=0;y<8;y++)
{send_data( shuzhi[dispbuf[y]] );}
if(dispbuf[3]==5&&dispbuf[4]==9&&dispbuf[6]==5)
TR1=1;
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
flag=1;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
dispbuf[7]=second%10;
dispbuf[6]=second/10;
dispbuf[4]=minite%10;
dispbuf[3]=minite/10;
dispbuf[1]=hour%10;
dispbuf[0]=hour/10;
}
}
void t1(void) interrupt 3 using 1
{
scnt1++;
if(scnt1==4)
{scnt1=0;
P37=~P37;}
tcnt1++;
if(tcnt1==800)
{TR1=0;
P37=0;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -