30 DisPlayWidgets之lcdNum

本文介绍如何使用Qt的QLcdNum组件创建一个LCD风格的数字时钟。通过设置UI属性如小数点显示、位数、显示模式等,结合定时器更新时间显示,实现了数字时钟的功能。

介绍: QLcdNum类QLCDNumber小部件显示一个带有lcd的数字的数字

UI属性介绍

smallDecimalPoint:是否显示小数

digitConunt:显示的位数

mode:以几进制显示

segmentStyle:显示方式

value:当前值

intvalue:初值

函数接口介绍

disPlay显示文本()

 

实例代码:

LCD时钟

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));//每次时间改变都触发
    timer->start(1000);

    showTime();

    ui->lcdNumber->setWindowTitle(tr("Digital Clock"));
    ui->lcdNumber->resize(150, 60);
}

void Widget::showTime()
{
    QTime time = QTime::currentTime();
    QString text = time.toString("hh:mm");
    if ((time.second() % 2) == 0)  //每两秒闪烁一次
        text[2] = ' ';
    ui->lcdNumber->display(text);//显示数字
}

运行结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

#include "MatrixKey.h" #include "lcd1602.h" unsigned char LCDnum2,str[4]; unsigned int Password=0,count=0,count1; void main() { lcd1602_init(); lcd1602_show_string(0,0,"Password:"); while(1) { LCDnum2=LECNUM1(); Password=Password*10+LCDnum2%10; LCD_ShowNum(1,2,Password,4); } } #include "lcd1602.h" #include "Public.h" /******************************************************************************* * º¯ ʽ û : lcd1602_write_cmd * º¯ʽ¹¦Ĝ : LCD1602дüÁ* ʤ ȫ : cmd£ºָÁ* ʤ ³ö : Ξ *******************************************************************************/ #if (LCD1602_4OR8_DATA_INTERFACE==0)//8λLCD void lcd1602_write_cmd(u8 cmd) { LCD1602_RS=0;//ѡԱüÁ LCD1602_RW=0;//ѡԱд LCD1602_E=0; LCD1602_DATAPORT=cmd;//׼±¸üÁ delay_ms(1); LCD1602_E=1;//ʹĜ½Ņψɏɽјдȫ delay_ms(1); LCD1602_E=0;//ʹĜ½Ņº󸺌ø±䍪³ɐ´ȫ } #else //4λLCD void lcd1602_write_cmd(u8 cmd) { LCD1602_RS=0;//ѡԱüÁ LCD1602_RW=0;//ѡԱд LCD1602_E=0; LCD1602_DATAPORT=cmd;//׼±¸üÁ delay_ms(1); LCD1602_E=1;//ʹĜ½Ņψɏɽјдȫ delay_ms(1); LCD1602_E=0;//ʹĜ½Ņº󸺌ø±䍪³ɐ´ȫ LCD1602_DATAPORT=cmd<<4;//׼±¸üÁ delay_ms(1); LCD1602_E=1;//ʹĜ½Ņψɏɽјдȫ delay_ms(1); LCD1602_E=0;//ʹĜ½Ņº󸺌ø±䍪³ɐ´ȫ } #endif /******************************************************************************* * º¯ ʽ û : lcd1602_write_data * º¯ʽ¹¦Ĝ : LCD1602дʽ¾ݍ * ʤ ȫ : dat£ºʽ¾ݍ * ʤ ³ö : Ξ *******************************************************************************/ #if (LCD1602_4OR8_DATA_INTERFACE==0)//8λLCD void lcd1602_write_data(u8 dat) { LCD1602_RS=1;//ѡԱʽ¾ݍ LCD1602_RW=0;//ѡԱд LCD1602_E=0; LCD1602_DATAPORT=dat;//׼±¸ʽ¾ݍ delay_ms(1); LCD1602_E=1;//ʹĜ½Ņψɏɽјдȫ delay_ms(1); LCD1602_E=0;//ʹĜ½Ņº󸺌ø±䍪³ɐ´ȫ } #else void lcd1602_write_data(u8 dat) { LCD1602_RS=1;//ѡԱʽ¾ݍ LCD1602_RW=0;//ѡԱд LCD1602_E=0; LCD1602_DATAPORT=dat;//׼±¸ʽ¾ݍ delay_ms(1); LCD1602_E=1;//ʹĜ½Ņψɏɽјдȫ delay_ms(1); LCD1602_E=0;//ʹĜ½Ņº󸺌ø±䍪³ɐ´ȫ LCD1602_DATAPORT=dat<<4;//׼±¸ʽ¾ݍ delay_ms(1); LCD1602_E=1;//ʹĜ½Ņψɏɽјдȫ delay_ms(1); LCD1602_E=0;//ʹĜ½Ņº󸺌ø±䍪³ɐ´ȫ } #endif /******************************************************************************* * º¯ ʽ û : lcd1602_init * º¯ʽ¹¦Ĝ : LCD1602³õʼ»¯ * ʤ ȫ : Ξ * ʤ ³ö : Ξ *******************************************************************************/ #if (LCD1602_4OR8_DATA_INTERFACE==0)//8λLCD void lcd1602_init(void) { lcd1602_write_cmd(0x38);//ʽ¾ݗ܏߸룬ϔʾ2А£¬5*7µ㕳/ז·û lcd1602_write_cmd(0x0c);//ϔʾ¹¦Ĝ¿ª£¬Ξ¹ⱪ£¬¹ⱪɁ˸ lcd1602_write_cmd(0x06);//дȫЂʽ¾ݺ󹢱ꓒ҆£¬ϔʾƁ²»҆¶¯ lcd1602_write_cmd(0x01);//ǥƁ } #else void lcd1602_init(void) { lcd1602_write_cmd(0x28);//ʽ¾ݗ܏ߴ룬ϔʾ2А£¬5*7µ㕳/ז·û lcd1602_write_cmd(0x0c);//ϔʾ¹¦Ĝ¿ª£¬Ξ¹ⱪ£¬¹ⱪɁ˸ lcd1602_write_cmd(0x06);//дȫЂʽ¾ݺ󹢱ꓒ҆£¬ϔʾƁ²»҆¶¯ lcd1602_write_cmd(0x01);//ǥƁ } #endif /******************************************************************************* * º¯ ʽ û : lcd1602_clear * º¯ʽ¹¦Ĝ : LCD1602ǥƁ * ʤ ȫ : Ξ * ʤ ³ö : Ξ *******************************************************************************/ void lcd1602_clear(void) { lcd1602_write_cmd(0x01); } /******************************************************************************* * º¯ ʽ û : lcd1602_show_string * º¯ʽ¹¦Ĝ : LCD1602ϔʾז·û * ʤ ȫ : x,y£ºϔʾ׸±꣬x=0~15£¬y=0~1; str£ºϔʾז·û´® * ʤ ³ö : Ξ *******************************************************************************/ void lcd1602_show_string(u8 x,u8 y,u8 *str) { u8 i=0; if(y>1||x>15)return;//АÁвΊý²»¶Ԕ򇿖ƍ˳ö if(y<1) //µڱАϔʾ { while(*str!='\0')//ז·û´®ʇҔ'\0'½Ꮂ£¬ֻҪǰæӐĚȝ¾͏Ԋ¾ { if(i<16-x)//ȧ¹ûז·û³¤¶ȳ¬¹ýµڒ»Аϔʾ·¶Χ£¬ԲԚµڶþА¼̐øϔʾ { lcd1602_write_cmd(0x80+i+x);//µڒ»Аϔʾµؖ·ɨփ } else { lcd1602_write_cmd(0x40+0x80+i+x-16);//µڶþАϔʾµؖ·ɨփ } lcd1602_write_data(*str);//ϔʾĚȝ str++;//ָիµݔö i++; } } else //µڲАϔʾ { while(*str!='\0') { if(i<16-x) //ȧ¹ûז·û³¤¶ȳ¬¹ýµڶþАϔʾ·¶Χ£¬ԲԚµڒ»А¼̐øϔʾ { lcd1602_write_cmd(0x80+0x40+i+x); } else { lcd1602_write_cmd(0x80+i+x-16); } lcd1602_write_data(*str); str++; i++; } } } /*line's region is 1~2 colume is 1~16*/ void LCD_SetCursor(unsigned char Column,unsigned char Line) { if(Line==1) { lcd1602_write_cmd(0x80|(Column-1)); } else if(Line==2) { lcd1602_write_cmd(0x80|(Column-1+0x40)); } } int LCD_Pow(int X,int Y) { unsigned char i; int Result=1; for(i=0;i<Y;i++) { Result*=X; } return Result; } void LCD_ShowNum(unsigned char Column,unsigned char Line,unsigned int Number,unsigned char Length) { unsigned char i; LCD_SetCursor(Column,Line); for(i=Length;i>0;i--) { lcd1602_write_data(Number/LCD_Pow(10,i-1)%10+'0'); } } #include <REGX52.H> #include "Public.h" unsigned char LcdNum; unsigned char LECNUM1() { P1=0xFF; P1_3=0; if(P1_7==0){delay_ms(20);while(P1_7==0);delay_ms(20);LcdNum=1;} if(P1_6==0){delay_ms(20);while(P1_6==0);delay_ms(20);LcdNum=5;} if(P1_5==0){delay_ms(20);while(P1_5==0);delay_ms(20);LcdNum=9;} if(P1_4==0){delay_ms(20);while(P1_4==0);delay_ms(20);LcdNum=13;} P1=0xFF; P1_2=0; if(P1_7==0){delay_ms(20);while(P1_7==0);delay_ms(20);LcdNum=2;} if(P1_6==0){delay_ms(20);while(P1_6==0);delay_ms(20);LcdNum=6;} if(P1_5==0){delay_ms(20);while(P1_5==0);delay_ms(20);LcdNum=10;} if(P1_4==0){delay_ms(20);while(P1_4==0);delay_ms(20);LcdNum=14;} P1=0xFF; P1_1=0; if(P1_7==0){delay_ms(20);while(P1_7==0);delay_ms(20);LcdNum=3;} if(P1_6==0){delay_ms(20);while(P1_6==0);delay_ms(20);LcdNum=7;} if(P1_5==0){delay_ms(20);while(P1_5==0);delay_ms(20);LcdNum=11;} if(P1_4==0){delay_ms(20);while(P1_4==0);delay_ms(20);LcdNum=15;} P1=0xFF; P1_0=0; if(P1_7==0){delay_ms(20);while(P1_7==0);delay_ms(20);LcdNum=4;} if(P1_6==0){delay_ms(20);while(P1_6==0);delay_ms(20);LcdNum=8;} if(P1_5==0){delay_ms(20);while(P1_5==0);delay_ms(20);LcdNum=12;} if(P1_4==0){delay_ms(20);while(P1_4==0);delay_ms(20);LcdNum=16;} return LcdNum; } typedef unsigned int u16; typedef unsigned char u8; void delay_10us(u16 ten_us) { while(ten_us--); } void delay_ms(u16 ms) { u16 i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); }为什么在我按下按键会实现乱码,
最新发布
08-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值