历史上的今天
今天是: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
史海拾趣
|
如何自制 USB电子琴 YouTube中视频效果 市场上的USB电子琴,多为出口单,产品类型基本上分为两种: 一是假USB,它只是多了一个USB接口,用来取电,作为电池以外的第二电源而已;其喇叭和音调发生器芯片,导致了它的乐器种类偏少、音色效果较低; ...… 查看全部问答> |
|
我只要求点亮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 ...… 查看全部问答> |
|
前一篇讲了串口发送,这一篇把串口接收补上。原本小鱼有水同学想这么做的,串口接收到什么就发送什么,无奈,小鱼有水写的发送模块和接收模块没对上号,导致上位机接收的字节数和发送的字节数不等,很郁闷,正应了那句话:时序是事先设计出来的,不 ...… 查看全部问答> |
|
多亏了Googleman的帮忙,现在已经解决多个图像的问题了,这里对他表示感谢。 我用的是2450, ov9650的摄像头。 现在我想把采集到的RGB图像转化成PC能识别的图像格式如jpeg,bmp。 现在没有头绪,请问大家一些转化的简单 ...… 查看全部问答> |
|
要求:单片机I/0口接4个开关、1个数码管和M95320,两个开关用于改变数码管上的显示数字,1个开关用于将数码管上的值写入到M95320,另外1个开关用于将存储在M95320中的值读取上来,并在数码管中显示。 两个开关用于改变的已经做好了,就是对M95 ...… 查看全部问答> |
|
求助:PC 的并口(LPT1) 和串口哪个速度快一些啊?谢谢2! 请教: PC 的并口(LPT1) 和串口 哪个稳定些? 速度快些? 并口(LPT1)可以做 I/O 口使用,是不? 还有,请给个有这方面资料的网址啊 ^_^ 谢谢!… 查看全部问答> |
|
如题,我用cypress的芯片控制nand flash,型号是k9f1g08u0a,gpif波形图如下,现在我换了一个flash,时序上不一样,没弄过这些,不知道这些图形都代表什么,盼高手指点。 d:\\flash\\gpif\\1.jpg d:\\flash\\gpif\\2.jpg d:\\flash\\gpif\\3.jpg ...… 查看全部问答> |




