历史上的今天
返回首页

历史上的今天

今天是:2024年12月22日(星期日)

2020年12月22日 | 单片机1602汉字与时间显示程序(年月日3个汉字)

2020-12-22 来源:51hei


//*        //-------------------------程序功能-------------------------//

        利用定时器0走时,1602显示,按键可调时间。        


        //---------------------------备注---------------------------//


        //-------------------------使用说明-------------------------//

         硬件平台:QX-X3;

         KEY13选择调节时分秒,KEY14加,KEY15减。

         硬件平台:QX-MCS;

         S2选择调节时分秒,S3加,S4减,S5确认。

**********************************************************************/

#include

#define uchar unsigned char

#define uint  unsigned int

sbit lcdrs  = P3^5;        //液晶引脚定义

sbit led_cs = P3^6;

sbit lcden  = P3^4;

sbit dx = P2^7;//数码管引脚定义

sbit wx = P2^6;

sbit key1 = P3^0;

sbit key2 = P3^1;

sbit key3 = P3^2;

sbit keyE = P3^3;

uchar num,key1num,count,hour,min,sec;

uchar code cg_1602[]={ 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,

0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,

0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00};//"年月日"

/*延时函数*/

void delay(uint xms)

{

        uint i,j;

        for(i=xms;i>0;i--)

        for(j=114;j>0;j--);

}

/*1602液晶*/

void write_com(uchar com)//写命令

{

        lcdrs=0;

        lcden=0;

        P0=com;

        delay(5);

        lcden=1;

        delay(5);

        lcden=0;

}

void write_data(uchar date)//写数据

{

        lcdrs=1;

        lcden=0;

        P0=date;

        delay(5);

        lcden=1;

        delay(5);

        lcden=0;

}

void write_by_xy(uchar x,uchar y)//坐标定位

{

        uchar address;

        if(y==0)

        address=0x80+x;//y=0,写第一行

        else

        address=0xc0+x;//y=1,写第二行

        write_com(address);

}

/*void write_char(uchar x,uchar y,uchar date)//坐标定位显示

{

        write_by_xy(x,y);//先定位

        write_data(date);//后写数

}*/

void write_string(uchar x,uchar y,uchar *s)//写字符串

{

        write_by_xy(x,y);//设定显示位置

        while(*s)//write character

        {

        P0=*s;

        write_data(*s);

        s++;

        }

}

void write_sfm(uchar add,uchar date)//写时分秒函数

{

        uchar hour,ge;

        hour=date/10;//分解一个2位数的十位和个位

        ge=date%10;

        write_com(0x80+0x40+add);//设置显示位置

        write_data(0x30+hour);//送去液晶显示十位

        write_data(0x30+ge); //送去液晶显示个位

}

void write_cg()//写入固定汉字和符号

{

        write_com(0x40); //设定CGRAM地址

        for(num=0;num<24;num++) //将自定义字型码写入CGRAM中

        {

                write_data(cg_1602[num]);

        }

        write_com(0x84);//年

        {

                write_data(0);

        }

        write_com(0x87);//月

        {

                write_data(1);

        }

        write_com(0x8a);//日

        {

                write_data(2);

        }

        write_string(2,1,":");

        write_string(5,1,":");

        write_string(9,1,"QX-MCU");

}

void init_1602()//初始化

{

        dx=0;wx=0;led_cs=0;

        hour=22;min=33;sec=55;key1num=0;count=0;

        write_com(0x38);

        write_com(0x0c);

        write_com(0x06);

        write_com(0x01);

        write_string(0,0,"2014");

        write_string(5,0,"07");

        write_string(8,0,"12");

        write_sfm(0,hour);

        write_sfm(3,min);

        write_sfm(6,sec);

        write_cg();

        TMOD=0x01;//设置定时器0工作模式1

        TH0=(65536-50000)/256;//定时器装初值

        TL0=(65536-50000)%256;

        EA=1; //开总中断

        ET0=1; //开定时器0中断

        TR0=1; //启动定时器0

}

/*键盘扫描函数*/

void keyscan()//按键扫描函数

{

        keyE =0;

        if(key1==0)

        {

                delay(5);

                if(key1==0)//确认功能键被按下

                {         

                        key1num++;//功能键按下次数记录

                        while(!key1);//释放确认

                        if(key1num==1)//第一次被按下时

                        {

                                TR0=0; //关闭定时器

                                write_com(0x80+0x40+7);//光标定位到秒位置

                                write_com(0x0f); //光标开始闪烁

                        }

                        if(key1num==2)//第二次按下光标闪烁定位到分钟位置

                        {

                                write_com(0x80+0x40+4);

                        }

                        if(key1num==3)//第三次按下光标闪烁定位到小时位置

                        {

                                write_com(0x80+0x40+1);

                        }

                        if(key1num==4)//第四次按下

                        {

                                key1num=0;//记录按键数清零

                                write_com(0x0c);//取消光标闪烁

                                TR0=1; //启动定时器使时钟开始走

                        }

                }

        }

        if(key1num!=0)//只有功能键被按下后,增加和减小键才有效

        {

                if(key2==0)

                {

                        delay(5);

                        if(key2==0)//增加键确认被按下

                        {

                                while(!key2);//按键释放

                                if(key1num==1)//若功能键第一次按下

                                {

                                        sec++; //则调整秒加1

                                        if(sec==60)//若满60后将清零

                                        sec=0;

                                        write_sfm(6,sec);//每调节一次送液晶显示一下

                                        write_com(0x80+0x40+7);//显示位置重新回到调节处

                                }

                                if(key1num==2)//若功能键第二次按下

                                {

                                        min++;//则调整分钟加1

推荐阅读

史海拾趣

Holmes Co Inc公司的发展小趣事

为了进一步提升竞争力,Holmes Electronics采取了一系列并购重组措施。他们首先收购了一家在物联网技术方面具有深厚积累的小型科技公司,通过整合双方资源,迅速在智能家居和智慧城市领域取得突破。随后,公司又成功并购了一家专业的半导体封装测试企业,进一步完善了产业链布局。这些并购重组不仅增强了Holmes Electronics的技术实力和市场地位,还为公司带来了新的增长动力。

CALMIRCO公司的发展小趣事

CALMIRCO公司自成立以来,一直致力于电子技术的研发与创新。在公司发展初期,CALMIRCO团队便成功研发出一款具有划时代意义的智能芯片,该芯片在性能和稳定性上均达到行业领先水平。这一技术突破不仅为CALMIRCO公司赢得了大量市场份额,更推动了整个电子行业的进步。此后,CALMIRCO公司继续加大研发投入,不断推出创新产品,引领行业变革。

艾吉芯(Agertech)公司的发展小趣事

在电子行业的快速发展中,艾吉芯公司凭借其在半导体芯片研发领域的深厚积累,成功推出了一系列高性能的半导体分立器件。这些产品不仅满足了市场对功率半导体的高效、稳定需求,更在技术创新方面取得了显著突破。艾吉芯公司通过持续的研发投入和严格的生产质量控制,确保了产品的可靠性和竞争力,逐渐在市场中树立起了良好的口碑。

DB Unlimited公司的发展小趣事

随着公司业务的不断发展壮大,DB Unlimited开始将目光投向全球市场。公司积极开拓海外市场,通过参加国际展会、与海外客户建立合作关系等方式,成功将产品推向了全球各地。同时,公司还根据不同国家和地区的市场需求和文化差异,对产品进行本地化改造和优化,进一步提高了产品的市场适应性和竞争力。

Electro-Mech Components Inc公司的发展小趣事

随着公司业务的不断发展壮大,EMC开始积极实施全球化战略。公司在全球范围内寻找合适的合作伙伴和销售渠道,努力将其产品推向更广阔的市场。通过与国际知名品牌的合作和交流,EMC不断提升自身的品牌形象和市场影响力。同时,公司还加强了对海外市场的调研和分析工作,以便更好地满足不同地区客户的需求和期望。

请注意,以上故事是基于已知信息构建的框架性内容,具体细节和情节需要根据实际情况进行填充和完善。

Gespac Inc公司的发展小趣事

在1966年,Electro-Mech Components, Inc. (EMC)做出了一个重要的战略决策——在墨西哥北下加利福尼亚州的蒂华纳开设一家制造工厂。这个决定标志着EMC正式进军国际市场,并开始了其在全球范围内的业务布局。蒂华纳工厂的建立为EMC带来了更低的制造成本和更广阔的市场前景。随着工厂规模的逐渐扩大,EMC的产品线也日益丰富,从最初的发光按钮开关逐渐扩展到指示灯和多开关互锁组件等多个领域。

问答坊 | AI 解惑

USB电子琴 DIY过程

如何自制 USB电子琴 YouTube中视频效果 市场上的USB电子琴,多为出口单,产品类型基本上分为两种: 一是假USB,它只是多了一个USB接口,用来取电,作为电池以外的第二电源而已;其喇叭和音调发生器芯片,导致了它的乐器种类偏少、音色效果较低; ...…

查看全部问答>

hd7279 c语言编程 点亮LED数码管

我只要求点亮LED数码管,不需要读取键盘。。。 我写的程序一个都不亮,请指教。 下面是我写的: 以下为代码内容 #include #define uchar unsigned char; #define uint unsigned int; sbit HD_CS=P0^2; sbit HD_CLK=P0^1; sbit HD_DATA=P0^0; vo ...…

查看全部问答>

FPGA初步之串口接收 代码分享

前一篇讲了串口发送,这一篇把串口接收补上。原本小鱼有水同学想这么做的,串口接收到什么就发送什么,无奈,小鱼有水写的发送模块和接收模块没对上号,导致上位机接收的字节数和发送的字节数不等,很郁闷,正应了那句话:时序是事先设计出来的,不 ...…

查看全部问答>

请问谁有上接触FPC封装呢

需要上接触FPC封装,给我发一下吧,谢谢!…

查看全部问答>

9650采集完图像怎么显示?

多亏了Googleman的帮忙,现在已经解决多个图像的问题了,这里对他表示感谢。 我用的是2450,   ov9650的摄像头。 现在我想把采集到的RGB图像转化成PC能识别的图像格式如jpeg,bmp。  现在没有头绪,请问大家一些转化的简单 ...…

查看全部问答>

M95320 E2PROM数据传送(SPI接口)

要求:单片机I/0口接4个开关、1个数码管和M95320,两个开关用于改变数码管上的显示数字,1个开关用于将数码管上的值写入到M95320,另外1个开关用于将存储在M95320中的值读取上来,并在数码管中显示。 两个开关用于改变的已经做好了,就是对M95 ...…

查看全部问答>

u-boot 的makefile问题

u-boot目录下的cpu/arm926ejs/makefile中 include路径  怎么根据不同的板子 配置不同的路径啊?…

查看全部问答>

求助:PC 的并口(LPT1) 和串口哪个速度快一些啊?谢谢2!

请教: PC 的并口(LPT1) 和串口 哪个稳定些? 速度快些? 并口(LPT1)可以做 I/O 口使用,是不? 还有,请给个有这方面资料的网址啊 ^_^ 谢谢!…

查看全部问答>

cypress的gpif波形问题,求教。

如题,我用cypress的芯片控制nand flash,型号是k9f1g08u0a,gpif波形图如下,现在我换了一个flash,时序上不一样,没弄过这些,不知道这些图形都代表什么,盼高手指点。 d:\\flash\\gpif\\1.jpg d:\\flash\\gpif\\2.jpg d:\\flash\\gpif\\3.jpg ...…

查看全部问答>

电路里三极管怎么分析他们的作用

本信息来自合作QQ群:arm linux HTTP://WWW.1YQ.COM (49900581) 群管理员在坛子里的ID:wangkj…

查看全部问答>