单片机液晶显示程序

发布者:创意梦者最新更新时间:2021-02-28 来源: eefocus关键字:单片机  液晶显示程序 手机看文章 扫描二维码
随时随地手机看文章

单片机液晶显示程序


硬件电路:51最小系统,没有采用总线方式,直接的I/O形式,包括矩阵键盘,1602液晶,一个数码管,LED4个,蜂鸣器等.


//单片机液晶秒表计算器完整修改版本


可以实现两种功能的切换,其他功能自行对照代码研究。4*4矩阵键盘,第一排前三列是实现小时分钟秒的加.第二排前三列是实现小时分钟秒的减.当然还可以通过设置矩阵键盘的键值,来实现加减乘除四则运算,由数码管显示参与运算的数字以及最终的运算结果


#include


#include


#include


#include


#include


#define uchar unsigned char


#define uint unsigned int


#define wc 0x8fff


#define wd 0xdfff


#define rc 0xbfff


void displayListChar(unsigned char X, unsigned char Y, uchar DData);


uchar dispbuf[]={''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'','':''};


uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,


0x92,0x82,0xf8,0x80,0x90,0x88,0x83,


0xc6,0xa1,0x86,0x8e,0x00


};


uchar second;


uchar temp1;


uchar minute;


uchar hour;


uint tcnt,g;


uchar suanfa;


bit flag2;


bit flag1=1;//////控制计算器还是液晶调整的状态灯


uint i=0,f,m,g,s,t;// for里的计数值,用于循环


// 用来标记按了什么,如+,-.*,或是/


sbit P2_0=P2^0;// 定义P2.0口用来,当计算值超过15时,P2.0所对应的灯闪几下


sbit P2_1=P2^1;// 定义P2.1口用来,当除数为0时,P2.1所对应的灯闪几下


sbit P2_2=P2^2;


sbit P2_3=P2^3;


uint num[4]={0}; //用于记录外面输入的数字


uint Tablenum;


sbit P3_4=P3^4;


sbit P3_5=P3^5;


void jieguo(void);


void SetTIme(uchar verify);


uchar kbscan(void);///键盘扫描


void Show_TIme(void);////显示时间


void SetTIme(uchar verify);//verify 在这里为调整的意思


uint transfor( uchar key1);


void delay400ms(void) ;


void delay200ms(void);


void delay5ms(void);


void delay_1s(void);


void dlms(void);


void dlms1(void)


{


uint g=20000;


while(--g); //延时100mS钟


}


void clr(void)


{


i=0;


suanfa=0;


Tablenum=0;


for(f=0;f<4;f++)


{


num[f]=0;


}


P2_0=1;


P2_1=1;


P2_2=1;


P2_3=0;


P3_4=0;


P3_5=1;


P0=0xc0;


P3_5=0;


}


//***************************************以下单片机液晶显示****************************************************


void waitLcd() //just wait unTIl 液晶不忙为止


{


char temp;


bit flag=1;


while(flag==1)


{


temp=XBYTE[rc];


if (temp>>7==0) flag=0;


P1=temp;


}


P1=0xff;


}


//just wait until 液晶不忙为止


void WriteCommand_Lcd(bit isCheck,char c)


{


if (isCheck==1) waitLcd();


XBYTE[wc]=c;


}


void writedata(char c)


{


waitLcd();


XBYTE[wd]=c;


}


void LcdInit()


{


delay5ms();


delay5ms();


delay5ms();


WriteCommand_Lcd(0,0x38); //三次显示模式设置,不检测忙信号


delay5ms();


WriteCommand_Lcd(0,0x38);


delay5ms();


WriteCommand_Lcd(0,0x38);


delay5ms();


WriteCommand_Lcd(1,0x38); //显示模式设置,开始要求每次检测忙信号,8位2行5*7


WriteCommand_Lcd(1,0x08); //关闭显示


WriteCommand_Lcd(1,0x01); //清显示


WriteCommand_Lcd(1,0x06); // 文字不动,光标右移


WriteCommand_Lcd(1,0x0C); // 显示开及光标设置


}


void displayListChar(unsigned char X, unsigned char Y, uchar DData)


{


Y &= 0x1;


X &= 0xF;


if (X <= 0xF)


{


Y &= 0x1;


X &= 0xF;


if (Y) X = 0x40;


X = 0x80;


WriteCommand_Lcd(0,X);


writedata(dispbuf[DData]);


}


}


//****************************************以上单片机液晶显示驱动*****************************************************


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


//**********************************以下显示时间*****************************************************


void Show_Time(void)


{


displayListChar(0,0,hour/10);


displayListChar(1,0,hour%10);


displayListChar(2,0,10);


displayListChar(3,0,minute/10);


displayListChar(4,0,minute%10);


displayListChar(5,0,10);


displayListChar(6,0,second/10);


displayListChar(7,0,second%10);


}


//**********************************以上显示时间*****************************************************


void main(void)


{


TMOD=0x02; //置自动重装载模式


TH0=0x06; //设初值


TL0=0x06; //设初值


TR0=1; //开始计数


ET0=1; //开定时器/计数器


EA=1; //中断开


delay400ms();//启动等待,等LCM讲入工作状态


LcdInit(); //LCM初始化


P3_4=0;


P2_0=1;


P2_1=1;


P2_2=0;


P2_3=1;


P3_5=1;


P0=0xc0;


P3_5=0;


while(1)


{


uchar key;


key=kbscan();


dlms();


// 0(11100111 0xe7)


///*****************************以下是单片机液晶显示两种状态的切换********************


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


if(key==0xe7)


{


dlms();


flag1=~flag1;


key=0x00;


if(flag1==1)


{


P2_0=1;


P2_1=1;


P2_2=0;///液晶状态灯


P2_3=1;


}


if(flag1==0)


{


P2_0=1;


P2_1=1;


P2_2=1;


P2_3=0;///计算器状态灯


}


dlms1();


}


///*****************************以上是单片机液晶显示两种状态的切换


关键字:单片机  液晶显示程序 引用地址:单片机液晶显示程序

上一篇:一种基于ARM9的彩色TFT-LCD模块设计及实现
下一篇:适用于LCD液晶显示的控制器设计

推荐阅读最新更新时间:2024-11-09 10:40

89C51编程器,89C51 programmer
89c51芯片的编程器,图片有些小,凑合看吧,附带程序 程序: #include at89x52.h #include stdio.h #include intrins.h #include ctype.h sbit rdy=P3^2; sbit vpp=P3^3; sbit p26=P3^4; sbit p27=P3^5; sbit p36=P3^6; sbit p37=P3^7; sbit prog=P2^7; void init_serial() { SCON=0x50; /*mode 1*/ TMOD=0x20; TH1=0xfd; PCON=0x80; /*38400bps*/ TR1=1; /*load tmr1*/
[单片机]
89C<font color='red'>51</font>编程器,89C<font color='red'>51</font> programmer
基于STM32单片机的酒精浓度检测系统设计
一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、按键模块、LED和蜂鸣器、MQ-3酒精传感器模块等。 主要功能: 系统运行后,LCD1602显示酒精浓度值和阈值,可通过按键K1和K2调节阈值,当检测浓度高于阈值,蜂鸣器报警。 主要功能如下: (1)酒精浓度实时检测; (2)LCD显示浓度值和阈值; (3)阈值设置、超限声光报警; (4)支持按键连按。 二、软件设计 //系统初始界面显示 void sys_open_show(void) { lcd1602_clear(); lcd1602_show_string(0,0, AL: mg/mL ); lcd1602_show
[单片机]
基于STM32<font color='red'>单片机</font>的酒精浓度检测系统设计
单片机---HLK-W801驱动触摸屏
背景介绍 最近在学习lvgl,这是个开源的嵌入式图像显示框架,足够支撑一些资源匮乏的单片机,来显示一些看起来比较专业的界面,例如下面这种 还有这种 是不是很酷 放下Lvgl姑且不表。因为是用户操作的界面,现在的大部分屏幕都可以配备触摸操作,不再需要额外的键盘鼠标,所以,今天就来学习一下配置我手中这块支持触摸的屏幕。 电阻屏 不像我们的手机,嵌入式设备大部分配备的是电阻屏,因为精准度高,并且廉价。 最常见的就是我这种4线电阻屏。就是4根线,X+,X-,Y+,Y-。 原理如下: 四线主要是由镀有ITO镀层的两层薄膜所组成。其中的一层在屏幕的左右边缘,各有一条垂直的总线,另外一层是在屏幕的顶部和底部都各有一条水平的总
[单片机]
<font color='red'>单片机</font>---HLK-W801驱动触摸屏
以C8051F340单片机为核心的红外测温系统设计
引言 螺旋装药过程中,经常会因为内部药品温度分布不均匀导致在装药过程中药品内出现气泡的现象,这严重影响了弹体内的药品质量和弹药参数。因此,本文希望通过设计一种温度监测系统来实现对腔体内药品温度检测,寻找装药过程中温度与药品质量之间的关系。由于装药机结构的特殊性,我们无法通过传统的接触测温法获取药品的温度。因此本文设计了一种基于红外测温方法的系统来实现对药品温度的实时检测。 1 时分复用原理 复用方法的设计主要依据TN9红外传感器的信号特征及接口特点,TN9红外温度传感器具有5个接口,其中电源和地不需要接到CPLD上,其余三个接口分别为低电平有效的TN9工作使能接口,工作在主模式的SPI时钟接口和数据接口。采用复用模式是只需通过设置
[单片机]
以C80<font color='red'>51</font>F340<font color='red'>单片机</font>为核心的红外测温系统设计
STC89C52单片机 串口通信
串口初始化 void UARTInit() { EA = 1; //打开总中断 ES = 1; //打开串口中断 SM0 = 0; SM1 = 1;//串口工作方式1,8位UART波特率可变 REN = 1;//串口允许接收 TR1 = 1;//启动定时器1 TMOD |= 0x20;//定时器1,工作模式2 8位自动重装 TH1 = 0xfd; // 根据下面的公式计算得到 TL1 = 0xfd; //设置比特率9600 } 例如:计算9600的波特率 SMOD在没有设置的情况下,默认为0. SMOD = 0 所以2的0次方为1 2^0 = 1 晶震频率计算:
[单片机]
STC89C52<font color='red'>单片机</font> 串口通信
单片机串行口通信程序设计
单片机串行口通信程序设计硬件连接图 例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通信之前,都要先对控制寄存器SCON进行初始化。在方式0中将,将00H送SCON就能了。 ---
[单片机]
<font color='red'>单片机</font>串行口通信<font color='red'>程序</font>设计
基于AT89S51单片机设计的电子琴
1.实验任务 (1).由4X4组成16个按钮矩阵,设计成16个音。 (2).可随意弹奏想要表达的音乐。 2.电路原理图 3.系统板硬件连线 (1).把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2).把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4R1-R4端口上; 4.相关程序内容 (1).4X4行列式键盘识别; (2).音乐产生的方法; 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定
[单片机]
基于AT89S<font color='red'>51</font><font color='red'>单片机</font>设计的电子琴
瑞萨推出全新RX261/RX260 MCU产品群, 具备卓越能效、先进触控功能及强大安全特性
2024 年 1 0 月 22 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子(TSE:6723)今日宣布推出RX261与RX260微控制器(MCU)产品群。这两款全新的64MHz MCU带来出色的能效比——工作模式下仅为69μA/MHz,待机模式下为1μA。此外,它们还能帮助设计人员轻松实现防水的电容式触控传感器设计,并提供强大的安全特性。得益于卓越性能与功能的完美结合,RX261/RX260产品群适用于家用电器、楼宇和工厂自动化等应用,以及智能锁、电动自行车和移动式热敏打印机等众多应用场景。 RX261/RX260产品群基于瑞萨的RXv3 CPU内核,在64MHz运行频率下可获得355CoreMark的评分
[单片机]
瑞萨推出全新RX261/RX260 <font color='red'>MCU</font>产品群,  具备卓越能效、先进触控功能及强大安全特性
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved