历史上的今天
返回首页

历史上的今天

今天是:2025年03月02日(星期日)

2021年03月02日 | 51单片机LCD液晶屏按键电子时钟的设计

2021-03-02 来源:eefocus

液晶屏为JM12864或FYD12864(带字库),我用这两种型号的屏没问题, 4行*8列汉字=32 串行通信 接/口P1.5--P1.7,可根据你的电路修改相应的接口。

#include


#define uchar unsigned char


voidLCD_ini();


void ascii_change(void);


void delay();


void wri_add(uchar com);


void wri_dat(uchar com1);


void shan(void);


void disp();


void tkey(void);


sbit cs=P1^7;


sbit sid=P1^6;


sbit sclk=P1^5;


bit flag=1;


uchar dat,count,f=1;//f测试哪个单元为当前闪烁状态


uchar data cLOCk[3]={23,45,12};


uchar code clockname[10]={“北京时间:”};


uchar data num[6];


/*******主程序*************/


void main()


{


lcd_ini();


count=10;//机器周期为1us,每次定时50ms,此变量用来控制循环次数,在下面赋值为20,共定时1秒


TMOD=0x01;


TL0=0XB0;


TH0=0X3C;


EA=1;


ET0=1;


IT0=1;


EX0=1;


TR0=1;


while(1)


{


back:ascii_change();


disp();


delay();


if(flag==1)


goto back;


tkey();


shan();


delay();


}


}


/****lcd初始化*******/


void lcd_ini()


{


wri_add(0x30);


delay();


wri_add(0x0c);


delay();


wri_add(0x01);


delay();


wri_add(0x06);


delay();


}


/********定时程序*************/


voidtimer1() interrupt 1 using 2


{


TL0=0XB0;


TH0=0X3C;


count--;


if(count==0)


{


count=10;


clock[2]++;//秒//


}


else


goto out;


if(clock[2]==60)


{


clock[2]=0;


clock[1]++;//分//


}


if(clock[1]==60)


{


clock[1]=0;


clock[0]++;


}


if(clock[0]==24)//时//


clock[0]=0;


out:_nop_();


}


/*******十位个位转换成ASCII码************/


void ascii_change(void)


{


num[5]=clock[2]-(clock[2]/10)*10+0x30;


num[4]=clock[2]/10+0x30;


num[3]=clock[1]-(clock[1]/10)*10+0x30;


num[2]=clock[1]/10+0x30;


num[1]=clock[0]-(clock[0]/10)*10+0x30;


num[0]=clock[0]/10+0x30;


}


/********廷时程序*************/


void delay()


{


uchar i,j;


for (i=250;i》0;i--)


for (j=250;j》0;j--);


}


/*****Write address*********/


void wri_add(uchar com)


{


uchar i,j,k;


cs=0;


cs=1;


dat=0xf8;


for(i=1;i《=8;i++)


{


sid=(bit)(dat&0x80);


sclk=0;


sclk=1;


sclk=0;


dat=dat《《1;


}


dat=com;


dat=dat&0xf0;


for(j=1;j《=8;j++)


{


sid=(bit)(dat&0x80);


sclk=0;


sclk=1;


sclk=0;


dat=dat《《1;


}


dat=com;


dat=_cror_(dat,4);// 此为高低四位交换


dat=dat&0xf0;


for(k=1;k《=8;k++)


{


sid=(bit)(dat&0x80);


sclk=0;


sclk=1;


sclk=0;


dat=dat《《1;


}


}


/*********Write data*************/


void wri_dat(uchar com1)


{


uchar i,j,k;


cs=0;


cs=1;


dat=0xfa;


for(i=1;i《=8;i++)


{


sid=(bit)(dat&0x80);


sclk=0;


sclk=1;


sclk=0;


dat=dat《《1;


}


dat=com1;


dat=dat&0xf0;


for(j=1;j《=8;j++)


{


sid=(bit)(dat&0x80);


sclk=0;


sclk=1;


sclk=0;


dat=dat《《1;


}


dat=com1;


dat=_cror_(dat,4);// 此为高低四位交换


dat=dat&0xf0;


for(k=1;k《=8;k++)


{


sid=(bit)(dat&0x80);


sclk=0;


sclk=1;


sclk=0;


dat=dat《《1;


}


}


/******display program***********/


void disp()


{


uchar i,k=0;


wri_add(0x80);


for (i=1;i《=9;i++)


wri_dat(clockname[i-1]);


wri_add(0x90);


for (i=1;i《=6;i++)


{


k++;


if(k==3||k==5)


wri_dat(clockname[8]);//时间之间的冒号。


wri_dat(num[i-1]);


}


}


/*******闪烁程序*************************/


void shan(void)


{


uchar i,k=0;


wri_add(0x90);


if(f==1)


{


num[0]=‘ ’;


num[1]=‘ ’;


}


else


goto next;


for (i=1;i《=6;i++)


{


k++;


if(k==3||k==5)


wri_dat(clockname[8]);//时间之间的冒号。


wri_dat(num[i-1]);


}


goto return1;


next: if(f==2)


{


num[2]=‘ ’;


num[3]=‘ ’;


}


else


goto next1;


for (i=1;i《=6;i++)


{


k++;


if(k==3||k==5)


wri_dat(clockname[8]);//时间之间的冒号。


wri_dat(num[i-1]);


}


goto return1;


next1: if(f==3)


{


num[4]=‘ ’;


num[5]=‘ ’;


}


else


goto return1;


for (i=1;i《=6;i++)


{


k++;


if(k==3||k==5)


wri_dat(clockname[8]);//时间之间的冒号。


wri_dat(num[i-1]);


}


return1:_nop_();


}


/*******外部中断***********/


void intr0() interrupt 0 using 2


{


flag=~flag;//判断是否闪烁位//


TR0=~TR0; //闪关定时否则开定时


f=1;


}


/**********按键程序************/


void tkey(void)


{


uchar judcekey;


judcekey=P1&0x0f;


if(judcekey==0x0f)


goto return2;


/*******移位键*********/


if (judcekey==0x0e)


f++;


if (f==4)


f=1;


/**********加一键*********/


if(judcekey==0x0d)


{clock[f-1]++;}


if (f==1)


{ if (clock[f-1]==24){


clock[f-1]=0;}


}


else{ if (clock[f-1]==60)


clock[f-1]=0;


}


/******减一键***********/


if(judcekey==0x0b)


{clock[f-1]--;}


if (f==1)


{ if (clock[f-1]==0xff){


clock[f-1]=23;}


}


else


{ if (clock[f-1]==0xff)


clock[f-1]=59;


}


return2:_nop_();


}


推荐阅读

史海拾趣

CR Magnetics公司的发展小趣事

CR Magnetics深知品质是企业的生命线。因此,公司始终坚持以质量为核心的管理理念,从原材料的采购到产品的生产、检测、包装等每一个环节都严格把控。此外,公司还通过了ISO9001:2008质量管理体系认证,并确保所有产品均符合RoHS等环保要求。这些举措使得CR Magnetics的产品赢得了客户的广泛信赖和好评。

Avery Dennison公司的发展小趣事

1990年,Avery Adhesives与Dennison Manufacturing合并,成立了Avery Dennison公司。这一合并不仅增强了公司的实力,也为其全球扩张提供了有力支持。此后,Avery Dennison通过在欧洲建立工厂、收购其他公司等方式,不断拓展其业务版图。如今,公司的业务已经遍及50多个国家,成为全球领先的标签与包装材料解决方案提供商。

台湾町洋(dinkle)公司的发展小趣事

町洋注重企业文化建设,倡导以人为本的管理理念。公司为员工提供了良好的工作环境和福利待遇,并积极开展各种培训和学习活动,帮助员工提升自身素质和专业技能。这种关注员工成长和发展的企业文化使得町洋的凝聚力不断增强,为公司的持续发展提供了有力保障。

Hirel Systems Ltd公司的发展小趣事

随着电子行业的快速发展,町洋不断投入研发资源,致力于技术创新和产品升级。公司成功开发出了一系列具有高性能、高可靠性和高安全性的接线端子产品,满足了不同客户的需求。同时,町洋还积极引进国际先进技术和管理经验,不断提升自身的竞争力和市场占有率。

Goldstar Electron Co Ltd公司的发展小趣事

町洋始终坚守品质至上的原则,从原材料采购到生产流程再到成品检验,每一个环节都严格把关。这种对品质的执着追求使得町洋的产品在市场上享有极高的声誉。客户对町洋产品的信任和认可也成为了公司最宝贵的财富。

AOS公司的发展小趣事

除了热水领域,AOS公司还积极拓展其业务范围,涉足了水处理、空气净化等多个领域。公司坚持创新驱动的发展战略,不断投入研发资源,推出了一系列具有创新性和高性能的产品。这些产品的推出不仅丰富了AOS的产品线,也进一步提升了其在全球市场的竞争力。

问答坊 | AI 解惑

遇到大麻烦了,PB6.0在编译wince系统的时候 在NETCFV2_MODULES= dotnetv2处失败了。

一下子就没了头绪,网上只有问的却没有解答的。google了快一天了,没有答案。 编译日志如下 配置sysgen参数 User selected the following SYSGEN variables sysgen_as_base=1 sysgen_as_file=1 sysgen_audio=1 sysgen_auth=1 ............. ...…

查看全部问答>

SDIO自动被关闭

最近移植了下个SDIO驱动, 我把SD插进去的时候没有反应,于是我就插上去才开机, 从终端查看发现内核启动后已经识别到我的SD卡了,并且可以显示出我的SD卡的大小, 但是在最后出现一句 power down 有没有知道为什么SD驱动开启后自动关闭电源啊 ...…

查看全部问答>

如何禁止系统创建新的系统服务?

在文件过滤驱动中,如何禁止系统创建新的系统服务? 原来是想将注册表HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services设为只读, 但是发现系统有时会自己修改这个位置,比如说插入一个U盘, 设为只读会导致蓝屏。 所以问问大家,如何 ...…

查看全部问答>

谁在windows XP Embeded下有过 开发经历 有什么建议 能否用ace

谁在windows XP Embeded下有过 开发经历 有什么建议 能否用ace…

查看全部问答>

电子工程师最关心的话题

中国有多少工作很多年的电子工程师;中国每年有多少电子新手需要开始全新的技术生涯;他们有什么困惑需要去解开;他们最关心的问题是什么?他们对未来的期待是什么? 中国缺少什么样的电子工程师?中国缺少满嘴胡须的电子工程师;中国缺少坐轮椅 ...…

查看全部问答>

【招聘】 嵌入式兼职招聘(限西安)

因公司业务发展,急需招聘兼职人员,要求: 1、具有DSP/FPGA/ARM/CPLD方面的研发经验,熟悉数字电路、模拟电路设计; 2、熟悉嵌入式系统设计,熟练掌握C语言; 3、有4层以上PCB板设计经验,熟悉PCB板的设计规范; 4、对电磁兼容设计有了解; 5 ...…

查看全部问答>

应琳子姐的邀请,写一个DIY成果展示文档的例子

因为只做过一个DIY 只好炒冷饭了。 这个是我觉得DIY完成后该做的一个文档的一个大致内容。 它的目的只有一个 以简洁的方式,让读者了解整个设计的目标,优缺点,以及无需太多个人创造性工作即可原样复制该DIY; 曾经的那个收官资料,只是资 ...…

查看全部问答>

DIY一个LED小应急灯电路图

这里介绍一个纽扣电池供电的LED灯电路 主要控制芯片是比较常用NE555,纽扣电池供电,其他器件图上标的相当的清楚了,,就是连接电路是有点麻烦,可以自己腐蚀一块电路板,, …

查看全部问答>

提问+关于GPS模块

这周主体硬件完成,开始写程序,在调试GPS模块的时候,发现无法定位,如图所示 以下是串口调试助手显示的数据,可以看出没有定位 $GPGGA,,,,,,0,0,99.99,,,,,,*78 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 $GPGSV,4,1,14,01,,,33,06,,,3 ...…

查看全部问答>