基于51单片机的手机电话拨号盘模拟proteus仿真

这篇具有很好参考价值的文章主要介绍了基于51单片机的手机电话拨号盘模拟proteus仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

功能:
0.本项目采用STC89C52作为单片机系统的控制MCU
1.采用4X4矩阵键盘实现号码输入,并在LCD液晶上显示
2.按下enter键,显示calling…,并且蜂鸣器模拟电话拨号发声
3.按下*键,退格,按下#键,清楚电话号码
4.拨号过程中,长按#取消拨号
5.采用DC002作为电源接口可直接输入5V给整个系统供电

仿真图:
基于51单片机的手机电话拨号盘模拟proteus仿真

主程序:

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar keycode, DDram_value = 0xc0;
sbit rs = P2 ^ 0;
sbit rw = P2 ^ 1;
sbit e = P2 ^ 2;
sbit speaker = P2 ^ 3; 
uchar speakerCnt = 0; 
uchar code table[] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x20};
uchar code table_designer[] = "Calling........";
void lcd_delay();
void delay(uint n);
void lcd_init(void);
void lcd_busy(void);
void lcd_wr_con(uchar c);
void lcd_wr_data(uchar d);
uchar checkkey(void);
uchar keyscan(void);

void main()
{
    uchar num;
    lcd_init();

    while (1)
    {
        keycode = keyscan();
        if ((keycode >= 0) && (keycode <= 9))
        {
            lcd_wr_con(0x06);
            lcd_wr_con(DDram_value);
            lcd_wr_data(table[keycode]);
            DDram_value++;
        }
        else if (keycode == 0x0a)
        {
            lcd_wr_con(0x04);
            DDram_value--;
            if (DDram_value <= 0xc0)
            {
                DDram_value = 0xc0;
            }
            else if (DDram_value >= 0xcf)
            {
                DDram_value = 0xcf;
            }
            lcd_wr_con(DDram_value);
            lcd_wr_data(table[10]);
        }
        else if (keycode == 0x0b)
        {
            lcd_wr_con(0x01); //清屏
            DDram_value = 0xc0;
            speakerCnt = 0;
        }
        else if (keycode == 0x0c)
        {
            uchar sound;

            lcd_wr_con(0x06);
            lcd_wr_con(0x80);
            for (num = 0; num <= 14; num++)
            {
                lcd_wr_data(table_designer[num]);
            }
            speakerCnt = 50;
            
        }
        if (speakerCnt >= 1)
        {
            speaker = 0; //发出按键响声
            delay(2000);
            speaker = 1;
            delay(2000);
            speakerCnt--;
        }
    }
}

void lcd_delay() //液晶屏显示延时函数
{
    uchar y;
    for (y = 0; y < 0xff; y++)
    {
        ;
    }
}

void lcd_init(void) //液晶屏初始化函数,向液晶写入各种命令
{
    lcd_wr_con(0x01); //清屏
    lcd_wr_con(0x38); //两行显示,5×7点阵,8位数据接口
    lcd_wr_con(0x0c); //开整体显示,光标关,无闪烁
    lcd_wr_con(0x06); //
}

void lcd_busy(void) //判断液晶显示器是否忙的函数
{
    P0 = 0xff;
    rs = 0;
    rw = 1;
    e = 1;
    e = 0;
    while (P0 & 0x80)
    {
        e = 0;
        e = 1;
    }
    lcd_delay();
}

void lcd_wr_con(uchar c) //向液晶显示器写命令
{
    lcd_busy();
    e = 0;
    rs = 0;
    rw = 0;
    e = 1;
    P0 = c;
    e = 0;
    lcd_delay();
}

void lcd_wr_data(uchar d) //向液晶显示器写数据
{
    lcd_busy();
    e = 0;
    rs = 1;
    rw = 0;
    e = 1;
    P0 = d;
    e = 0;
    lcd_delay();
}

void delay(uint n) //延时函数
{
    uchar i;
    uint j;
    for (i = 50; i > 0; i--)
        for (j = n; j > 0; j--)
            ;
}

uchar checkkey(void) //检测是否有按键按下
{
    uchar temp;
    P1 = 0xf0;          //P1口低4位为低电平
    temp = P1;          //读入P1口的电平
    temp = temp & 0xf0; //读入P1口的8位状态,并判断两次状态是否相同
    if (temp == 0xf0)   //如果P1口两次状态相同,则无键按下
    {
        return (0); //函数返回值为0
    }
    else
    {
        return (1); //有键按下,函数返回值为1
    }
}

uchar keyscan(void) //键盘扫描并返回所按下的键号函数
{
    uchar hanghao, liehao, keyvalue, buff;
    if (checkkey() == 0) //如果函数返回值为0,无键按下
    {
        return (0xff); //返回0xff
    }


仿真演示视频:
https://www.bilibili.com/video/BV1Y841187pU/文章来源地址https://www.toymoban.com/news/detail-509974.html

到了这里,关于基于51单片机的手机电话拨号盘模拟proteus仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 41、基于51单片机手机无线充电器系统锂电池存电系统设计

    方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大。其片内的8K程序存储器是FLASH工艺的,这种单

    2024年02月09日
    浏览(49)
  • 9、基于51单片机手机APP蓝牙调试助手控制四个LED灯的开关设计

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、Proteus仿真 七、程序源码 八、资料包括 随着社会的发展人们对生活质量的要求越来越高,照明在能耗中所占的比例日益增加,因而照明工能也日显重

    2024年02月12日
    浏览(45)
  • 手机蓝牙连接51单片机自动开门

    材料: 成品: 效果演示: 控制led: 控制开门: #舵机是通过绳子连接到锁栓上的,绳子和锁栓用热熔胶固定,整个装置也是用热熔胶固定在门上的。如果你的门锁拉不开,试试给锁栓缝隙上润滑油,同时调整舵机的力矩。 #自动开门效果演示视频 #app、烧录程序、hex代码资源

    2024年02月10日
    浏览(46)
  • 111、基于51单片机的电磁感应无线充电系统 手机无线充电器设计(程序+原理图+Proteus仿真+程序流程图+论文参考资料等)

    方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大。其片内的8K程序存储器是FLASH工艺的,这种单

    2024年02月13日
    浏览(46)
  • 51单片机项目(9)——基于51单片机的电子琴设计

    简易电子琴设计设计内容: 1.用矩阵键盘代表琴键,至少能弹出8个音符,分别是:音符1.23.4.,5,6,  2.键按下的时间长短表征节拍的长短,用蜂鸣器发出声音 3.数码管显示出当前音符 4.音量可调 (代码及其工程文件放在最后) 电路图如下: 51单片机电子琴是一种基于51单片机(

    2024年02月09日
    浏览(45)
  • 51单片机项目(7)——基于51单片机的温湿度测量仿真

    本次做的设计,是利用DHT11传感器,测量环境的温度以及湿度,同时具备温度报警的功能:利用两个按键,设置温度阈值的加和减,当所测温度大于温度阈值的时候,蜂鸣器就会响起,进行报警提示。 同时系统还有一个LCD1602屏幕,用于显示实时的温度湿度,还可以显示温度阈

    2024年02月10日
    浏览(47)
  • C51单片机利用HC-05蓝牙模块实现手机点灯

    蓝牙通信,实现手机端远程(15米)控制单片机,这听起来对于初学者的我来说,是那么不可思议,经过不断地实验,阅读其他大佬的文章,终于实现了。 在有基础的通信原理知识的前提下,知,HC-05蓝牙模块与51的通信其实很简单,就是蓝牙模块的RXD(接收端)接单片机的TXD(发送

    2024年02月16日
    浏览(62)
  • 基于51单片机的单片机倒车雷达报警系统

      前言 至今世界汽车工业通过了近122年的进展,今世汽车已经超级成熟和普遍了。汽车已经渗透于国防建设、国民经济和人类生活的各个领域当中,成为人类生存必不可少的、最要紧的交通工具,尽管每辆车都有后视镜,但不可幸免地都存在一个后视盲区,倒车雷达那么能够

    2024年02月04日
    浏览(49)
  • 单片机原理与应用课程设计-基于51单片机的时钟日历

    摘 要 本课程设计是基于51单片机的日历时钟设计。作为嵌入式系统中常用的控制器,单片机在各种电子设备和系统中广泛应用。日历时钟作为一个常见的功能模块,在现代生活中具有重要意义。因此,设计一个基于51单片机的日历时钟,不仅有助于我们掌握单片机编程技术和

    2024年02月20日
    浏览(65)
  • 51单片机课程设计——基于单片机的AD模数转换设计

    一、功能简介 1.A/D 是模拟量到数字量的转换,依靠的是模数转换器(AnalogtoDigitalConverter),简称ADC。D/A是数字量到模拟量的转换,依靠的是数模转换器(DigitaltoAnalogConverter),简称DAC。它们的道理是完全一样的,只是转换方向不同,因此我们讲解过程主要以A/D为例来讲解。

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包