51单片机lcd1602实验(单片机的模拟电话拨号)
这个程序比较简单主要就是实现矩阵键盘扫描,并在lcd1602上显示具体功能如下
(1)系统运行时将所按下的键盘显示在液晶屏上;
(2)电话号码键盘上的DELETE键能实现退格功能;
(3)电话号码键盘上的CLEAR键能实现清屏功能;
(4)每按下一个键盘能够发出声音;
(5)在LCD屏的第一行显示成员名字。
本系统包括单片机晶振复位电路和显示电路矩阵键盘和扬声器模块组成。其中显示,是由LCD 1602来做显示屏;矩阵键盘是4*3作为输入由单片机将输入的信号处理,然后在LCD屏上显示出来。
3 软件设计
void lcd_init()
{
lcd_write(0x38);
lcd_write(0x0c);
lcd_write(0x06);
lcd_write(0x01);
}
void lcd_write(uchar x) //写命令
{
lcd_busy();
e=0; rs=0; rw=0;
e=1; P0=x;
e=0;
lcd_delay();
}
void lcd_busy() //判断LCD是否忙
{
P0=0xff;
rs=0; rw=1;
e=1; e=0;
while(P0&0x80)
{
e=0;e=1;
}
lcd_delay();
}
键盘扫描模块
uchar checkkey() //检测有无按键按下
{
uchar temp;
P1=0xf0;
temp=P1;
temp=temp&0xf0;
if(temp==0xf0)
{return(0);}
else {return(1);}
}
uchar keyscan() //键盘扫描函数
{
uchar hang,lie,keyvalue,buff;
if(checkkey()==0)//无按键按下
{return(0xff);}
else //有则扬声器发声
{
uchar sound;
for(sound=50;sound>0;sound--)
{
speaker=0;
delay(1);
speaker=1;
delay(1);
}
P1=0x0f;//看哪一行按下
buff=P1;
if(buff==0x0e)
{hang=0;}
else if(buff==0x0d)
{hang=3;}
else if(buff==0x0b)
{hang=6;}
else if(buff==0x07)
{hang=9;}
P1=0xf0;//看那一列按下
buff=P1;
if(buff==0xe0)
{lie=2;}
else if(buff==0xd0)
{lie=1;}
else if(buff==0xb0)
{lie=0;}
keyvalue=hang+lie;
while(P1!=0xf0);
return(keyvalue);
}
}
3.3 主函数模块
主函数先调用初始化子函数实现初始化,然后显示第一行我们小组的个人信息,用一个while循环调用键盘扫描函数并将结果处理传递给显示屏,即将数字显示出来,并实现删除和清屏的功能,
void main() //主函数
{
uchar a;
lcd_init(); //调用初始化函数
for(a=0;a<6;a++)
{
lcd_data(designer[a]);//显示第一行信息
}
while(1)
{
num=keyscan();//调用键盘扫描函数
if((num>=0)&&(num<=9))
{
lcd_write(DDram_value);
lcd_data(table[num]);
DDram_value++;
}
else if(num==10)
{
DDram_value--;
if(DDram_value<=0xc0)
{DDram_value=0xc0;}
else if(DDram_value>=0xcf)
{DDram_value=0xcf;}
lcd_write(DDram_value);
lcd_data(0x20);//实现清除用空格
}
else if(num==11)
{
uchar p,q;
q=0xc0;
for(p=0;p<=15;p++)
{
lcd_write(q);
lcd_data(0x20);
q++;
}
DDram_value=0xc0;
}
}
}
仿真图
51单片机lcd1602实验(单片机的模拟电话拨号)相关推荐
- PIC16F887 单片机 PROTEUS 仿真 C程序 模拟电话拨号计算器 密码锁
模拟电话拨号 主要元器件包括:44按键矩阵.LCD显示.蜂鸣器 要求:模拟电话拨号时键盘拨出的电话号码(数字0~9),显示在LCD上:除0-9数字外,""用来删除最后的一个数字,& ...
- Proteus8仿真:51单片机LCD1602显示
51单片机LCD1602显示 元器件 原理图部分 代码 main.c 工程文件 元器件 元器件 名称 排阻 RESPACK-8 51单片机 AT89C51 LCD1602 LM016L 按键 BUTT ...
- 单片机定时器实验两位倒计时秒表_单片机学习「1」 初始51单片机
问题1:什么是单片机? 采用集成电路技术,将CPU(具有处理数据能力的中央处理器).RAM(随机存储器,类比电脑里的内存条).ROM(程序存储器,类比电脑硬盘).多种I/O口(类比电脑的各种接口,不过 ...
- 基于51单片机LCD1602电子时钟实物制作
之前写了51单片机的LCD1602的程序,现在画了电路图,焊接了电路板,做出了基于51单片机LCD1602电子时钟的实物. 注意事项: 焊接过程中,注意提前布局电路. 对应好端口(避免接线错误),我由 ...
- 基于51单片机LCD1602显示
基于51单片机LCD1602显示 要在1602上显示字符,要大概明白1602液晶显示屏工作原理. 一般的液晶显示器(Liquid Crystal Display, LCD) 的主要原理是以电流刺激液晶 ...
- 51单片机汇编语言实验(三)-----定时/计数器实验(附参考代码及注释)
本系列共6篇文章,本文作为本系列的第三篇文章,介绍实验三 :定时/计数器实验,本系列文章基于Dais-52PRO实验箱. 本系列文章链接: --------------------------- ...
- 使用51单片机+lcd1602转接板-iic接口进行显示
使用51单片机+lcd1602转接板-iic接口进行显示 某宝上有卖lcd1602与iic芯片pcf8574的整合,虽然lcd1602能直接用51单片机使用,不过经过整合之后只需要对SCL和SDA两个 ...
- 51单片机汇编语言实验(五)-----A/D 0809模数转换和DA0832数模转换实验(附参考代码及注释)
本系列共6篇文章,本文作为本系列的第五篇文章,介绍实验五 :A/D 0809模数转换和DA0832数模转换实验,本系列文章基于Dais-52PRO实验箱. 本系列文章链接: ---------- ...
- 【Proteus仿真】51单片机+LCD1602驱动模板
[Proteus仿真]51单片机+LCD1602驱动模板 Proteus仿真 主程序 /*51单片机LCD1602驱动模板 */ #include <REGX52.H> #include ...
最新文章
- 用Kotlin在IntelliJ Idea中无法生成 spring-configuration-metadata.json 文件
- redis必杀高级:性能测试
- Facebook 开源了一整套重要的 Linux 内核组件与工具!
- Apache - AH00558
- Java连接FTP服务器并且实现对其文件的上传和下载
- android的三个基础控件,Android基础控件——ProgressBar自定义的介绍、动画效果实现、附加三个漂亮的进度条...
- the next journal submission for mechanism should be at this journal
- Manual手册的正确姿势
- java 课后习题 键入日期输入星期几
- C++ - extern C用法浅析
- SQL存储过程跨服务器访问
- 大数据与机器学习:实践方法与行业案例.1.4 本章小结
- win10家庭版破解lr11遇到的问题
- Difference between UDP and TCP
- python入门神器_Python入门之神器,助你快速上手!
- C语言----文件存储
- NB-IoT通信模组读取IMEI、ICCID、IMSI
- python plt画图_【Python】 【绘图】plt.figure()的使用
- Thread的setDaemon(true)方法的作用
- JQUREY DOM 操作详解
热门文章
- BIO、NIO、AIO 有什么区别?
- C# WinForm实现窗口始终在顶层
- 在前端页面生成二维码并下载(兼容IE)
- 秋叶PPT高效训练营笔记 —— Day 1素材
- 算法之-判断某个整数是否为素数的自定义函数:
- UOJ 267 [清华集训2016]魔法小程序
- NodeJs核心技术-张晓飞-专题视频课程
- 强化学习——环境库OpenAI Gym
- Docker启动报错:Job for docker.service failed because the control process exited with error code. See “sy
- 黑帽SEO人员是如何对网站优化的【认准SEO黑帽大牛】