📄 youbing.c
字号:
///*****初始化******///
void Init()
{
//开显示;
p_di=0;
p_rw=0;
Data=0x3f;
p_cs1=0;
p_cs2=1;
p_e=1;
p_e=0;
p_cs1=1;
p_cs2=0;
p_e=1;
p_e=0;
//0行开始显示
busy();
p_cs1=0;
p_cs2=1;
Data=0xc0;
p_e=1;
p_e=0;
p_cs1=1;
p_cs2=0;
p_e=1;
p_e=0;
}
void setxy(unsigned char x,unsigned char y)
{
if(y<64)
{
//***写行地址l**//
busy();
p_di=p_rw=p_cs2=0;
p_cs1=1;
Data=0xb8|x;
p_e=1;
p_e=0;
///***写列地址l**//
busy();
p_di=p_rw=p_cs2=0;
p_cs1=1;
Data=0x40|y;
p_e=1;
p_e=0;
}
else
{
//***写行地址r**//
busy();
p_di=p_rw=p_cs1=0;
p_cs2=1;
Data = 0xb8|x;
p_e=1;
p_e=0;
///***写列地址r**//
busy();
p_di=p_rw=p_cs1=0;
p_cs2=1;
Data=0x40|y;
p_e=1;
p_e=0;
}
}
//****写数据****//
void writedata(unsigned char x,unsigned char y)
{
busy();
setxy(x,y);//set x,y address address
if(y<64)
{
p_rw=p_cs2=0;
p_cs1=1;
}
else
{
p_rw=p_cs1=0;
p_cs2=1;
}
p_di=1;
Data=0x00;
p_e=1;
p_e=0;
}
///******* 显示字******///
void writeword1(unsigned char x,unsigned char y,unsigned char d[2][16])
{
unsigned char i,j;
unsigned char temp;
for(i=0;i<2;i++)
for(j=0;j<16;j++)
{
busy();
setxy(i+x,j+y);
if(y<64)
{
p_rw=p_cs2=0;
p_di=1;
p_cs1=1;
}
else
{
p_rw=p_cs1=0;
p_di=1;
p_cs2=1;
}
temp=abs(d[i][j]/128)+abs((d[i][j]%128)/64)*2+abs((d[i][j]%64)/32)*4+abs((d[i][j]%32)/16)*8+abs((d[i][j]%16)/8)*16+abs((d[i][j]%8)/4)*32+abs((d[i][j]%4)/2)*64+abs(d[i][j]%2)*128;
Data=temp;
p_e=1;
p_e=0;
}
}
///******* 显示字符、数字******///
void writeword2(unsigned char x,unsigned char y,unsigned char d[2][8])
{
unsigned char i,j;
unsigned char temp;
{for(i=0;i<2;i++)
for(j=0;j<8;j++)
{
busy();
setxy(i+x,j+y);
if(y<64)
{
p_rw=p_cs2=0;
p_di=1;
p_cs1=1;
}
else
{
p_rw=p_cs1=0;
p_di=1;
p_cs2=1;
}
temp=abs(d[i][j]/128)+abs((d[i][j]%128)/64)*2+abs((d[i][j]%64)/32)*4+abs((d[i][j]%32)/16)*8+abs((d[i][j]%16)/8)*16+abs((d[i][j]%8)/4)*32+abs((d[i][j]%4)/2)*64+abs(d[i][j]%2)*128;
Data=temp;
p_e=1;
p_e=0;
}
}
}
///****清屏***//
void clear()
{
unsigned char i,j;
for(i=0;i<8;i++)
for(j=0;j<128;j++)
writedata(i,j);
}
//*******设定清屏********
void clearset(unsigned x,unsigned y)
{
unsigned char i,j;
for(i=x;i<x+2;i++)
for(j=y;j<y+16;j++)
writedata(i,j);
}
///***主函数****///
void main(void)
{
unsigned char m,n;
IE = 0x8f; //CPU开中断,INT0,INT1,Timer0开中断
IP = 0x04; //设置INT0为中断最高优先级
IT0=1;IT1=1; //外部INT0,IT1设置为边沿触发方式
TMOD = 0x11; //Timer0工作于模式1, 16位定时方式
TH0 = 0xdc;
TL0 = 0x00; //Timer0置10ms定时初值
TR0 = 1;
Init();
display(m,n);
delay(1500);
clear();
while(1)
{
keyhangdle();
pro_timedate();
timedisplay();
}
}
void display(unsigned char k,unsigned char j)
{
//if(m==0)
// {
/****第一屏****/
clear();
busy();
writeword1(1,32,huang);//
writeword1(1,48,ying);//
writeword1(1,64,guang);//
writeword1(1,80,lin);//
writeword2(3,0,w);//
writeword2(3,8,w);//
writeword2(3,16,w);//
writeword2(3,24,diang);//
writeword2(3,32,y);//
writeword2(3,40,O);//
writeword2(3,48,u);//
writeword2(3,56,b);//
writeword2(3,64,i);//
writeword2(3,72,n);//
writeword2(3,80,g);//
writeword2(3,88,diang);//
writeword2(3,96,c);//
writeword2(3,104,O);//
writeword2(3,112,m);//
writeword1(5,0,bang);//
writeword1(5,16,quan);//
writeword1(5,32,suo);//
writeword1(5,48,you1);//
writeword1(5,64,maohao);//
writeword1(5,80,zhang);//
writeword1(5,96,you);//
writeword1(5,112,ming);//
delay(150);
}
//**************日历画面***************//
void timedisplay()
{
unsigned char year1,year2,year3,year4,month1,month2,day1,day2;
unsigned char hour1,hour2,min1,min2,sec1,sec2;
//******时间处理**********//
//年//
year1=year/1000;
year2=(year-year1*1000)/100;
year3=(year-year1*1000-year2*100)/10;
year4=(year-year1*1000-year2*100)%10;
//月//
month1=month/10;
month2=month%10;
//日//
day1=day/10;
day2=day%10;
//时//
hour1=hour/10;
hour2=hour%10;
//分//
min1=min/10;
min2=min%10;
//秒//
sec1=sec/10;
sec2=sec%10;
writeword1(0,32,nian);//
writeword1(0,64,yue);//
writeword1(0,96,ri);//
writeword1(2,48,shi);//
writeword1(2,80,fen);//
writeword1(2,112,miao);//
//年//
writeword2(0,0,BMP[year1]);//
writeword2(0,8,BMP[year2]);//
writeword2(0,16,BMP[year3]);//
writeword2(0,24,BMP[year4]);//
//月//
writeword2(0,48,BMP[month1]);//
writeword2(0,56,BMP[month2]);//
//日//
writeword2(0,80,BMP[day1]);//
writeword2(0,88,BMP[day2]);//
//图标//
writeword1(2,adr,shu2);//
//时//
writeword2(2,32,BMP[hour1]);//
writeword2(2,40,BMP[hour2]);//
//分//
writeword2(2,64,BMP[min1]);//
writeword2(2,72,BMP[min2]);//
//秒//
writeword2(2,96,BMP[sec1]);//
writeword2(2,104,BMP[sec2]);//
//************kuang*********
writeword1(4,0,niankf);//
writeword1(4,24,ji);//吉
writeword1(4,48,yuekf);//
writeword1(4,72,ru);//如
writeword1(4,96,rikf);//
writeword1(6,0,shikf);//
writeword1(6,24,xiang);//祥
writeword1(6,48,fenkf);//
writeword1(6,72,yi);//意
writeword1(6,96,niank1f);//
//********图标2*********
// delay(50);
clearset(2,adr);
flag=-flag;
if(flag==-1) {adr=16,writeword1(2,adr,shu1);}
else adr=0;
}
void timer0() interrupt 1
{
TH0=0xdc; //Timer0置10ms定时初值dc00H(ffffH=65535D,dc00H=56320D)
TL0=0x00; //定时时间=(65535-56320)*(1/11.0592)*12=10ms (f0=11.0592Mhz)
sec100++;
if(sec100 >= 100) //1秒时间 (100*10ms=1000ms=1s)
{
sec100 = 0;
sec++;
// pro_timedate();//调用时间和日期处理程序
}
}
//时间和日期处理程序
void pro_timedate()
{
if(sec > 59)
{sec = 0;
min++;}
if(min>59)
{min=0;
hour++;}
if(hour>23)
{hour=0;
week++;
if (week>6) week=1;
day++;}
if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
if (day>31) {day=1;month++;} //大月31天
if (month==4||month==6||month==9||month==11)
if (day>30) {day=1;month++;} //小月30天
if (month==2)
{if((year%4==0 && year%100!=0)||year%400==0) //闰年的条件
{if (day>29) {day=1;month++;}} //闰年2月为29天
else
{if (day>28) {day=1;month++;}} //平年2月为28天
}
if (month>12) {month=1;year++;}
}
//***************8按键处理**************
void keyhangdle()
{
if(yearup==0)
{
delay(5);
if(yearup==0)
{
writeword1(4,0,niank);//
year++;
}
}
else if(monthup==0)
{
delay(5);
if(monthup==0)
{
writeword1(4,48,yuek);//
month++;
}
}
else if(dayup==0)
{
delay(5);
if(dayup==0)
{
writeword1(4,96,rik);//
day++;
}
}
else if(hourup==0)
{
delay(5);
if(hourup==0)
{
writeword1(6,0,shik);//
hour++;
}
}
else if(minup==0)
{
delay(5);
if(minup==0)
{
writeword1(6,48,fenk);//
min++;
}
}
else if(yeardown==0)
{
delay(5);
if(yeardown==0)
{
writeword1(6,96,niank1);//
year--;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -