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

硬件设计

链接:https://pan.baidu.com/s/1pzPJLqoLtPbm4fwqqWfHuA
提取码:8rny
电话键盘中拨出的某一电话号码,显示在LCD显示屏上。电话键盘共有12个键,除了“0”~ “9”10个数字键外,还有“*”键用于实现退格功能,即清除输入的号码;“#”键用于清除显示屏上所有的数字显示。每按下一个键要发出声响,以表示按下该键。
在这里插入图片描述

代码设计

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar keycode,DDram_value=0xc0;
sbit rs=P2^0;
sbit rw=P2^1;
sbit e =P2^2; 
sbit speaker=P2^3;
uchar code table[]={0x30,0x31,0x32,0x33,0x34,
                    0x35,0x36,0x37,0x38,0x39,0x20};
uchar code table_designer[]=" XXX  Design";
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();
	lcd_wr_con(0x80);
	for(num=0;num<=14;num++)
	{
	  lcd_wr_data(table_designer[num]);
	}
	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)
	   {
	   	  uchar i,j;
		  j=0xc0;
		  for(i=0;i<=15;i++)
		  {
		    lcd_wr_con(j);
		  	lcd_wr_data(table[10]);
			j++;
		  }
		  DDram_value=0xc0;
	   }
	}

}
//液晶工作时的延时函数
void lcd_delay()
{
  uchar y;
  for(y=0;y<0xff;y++)
  {
  	 ;
  }
}
//液晶初始化
void lcd_init(void)
{
   lcd_wr_con(0x01);
   lcd_wr_con(0x38);
   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;
	temp=P1;
	temp=temp&0xf0;
	if(temp==0xf0)
	{
	   return(0);
	}
	else
	{
	   return(1);
	}
}
//键盘扫描函数,返回所按下的键盘号
uchar keyscan(void)
{
   uchar hanghao,liehao,keyvalue,buff;
   if(checkkey()==0)
   {
   	  return(0xff);//无键按下,返回0xff
   }
   else
   {
  • 6
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于51单片机的电子时钟项目需要通过Keil编写程序,并使用Proteus进行仿真电路搭建。该项目主要包括以下几个步骤: 1. 硬件搭建:按照电子时钟的设计需求,连接51单片机和相关的电子元件,如晶体振荡器、数码管、按键等。通过Proteus软件,可以将这些元件连接起来,搭建出完整的电路。 2. Keil程序编写:使用Keil软件,编写51单片机的C语言程序。该程序需要实现时钟的功能,包括时、分、秒的显示和计时、调整时间、闹钟功能等。通过编程,可以控制数码管的显示,以及对按键进行响应。 3. Proteus仿真:将编写好的程序通过Proteus软件连接至搭建好的电路。进行仿真测试时,可以通过模拟时钟的不同状态,调试和验证编写的程序的正确性和稳定性。仿真过程中,可以检查数码管的显示情况,以及程序对按键输入的响应。 4. 优化和调试:根据仿真过程中的结果,对程序进行优化和调试。可能需要根据具体的需求,修改程序中的一些逻辑或代码,确保电子时钟的功能正常运行,并符合设计要求。 总的来说,基于51单片机的电子时钟项目需要通过Keil编写程序,并结合Proteus进行仿真电路搭建和测试。通过这样的开发流程,可以实现一个功能完善、稳定可靠的电子时钟。 ### 回答2: 基于51单片机的电子时钟keil程序和protues仿真电路组成了一个完整的设计方案。 首先,keil程序是用于开发51单片机的集成开发环境,它提供了编译、调试和仿真等功能,能够帮助程序员快速开发出51单片机的应用程序。在电子时钟的设计中,我们可以使用keil来编写单片机的程序代码,实现时钟的各种功能。 其次,protues是一款电子设计自动化软件,它提供了电子电路仿真和PCB布局设计等功能,能够帮助我们快速验证电路的正确性。在电子时钟的设计中,我们可以使用protues来建立电子时钟的仿真电路,验证单片机代码的正确性和稳定性。 基于51单片机的电子时钟设计,我们可以使用keil来编写单片机的程序代码,实现时钟的各种功能,包括时间显示、报时功能、闹钟功能等。通过keil的编译、调试和仿真功能,我们可以验证代码的正确性和稳定性。 在电路设计方面,我们可以使用protues来建立电子时钟的仿真电路,通过仿真可以验证电路的正确性和稳定性,包括时钟电路、数码管驱动电路、按钮输入电路等。通过protues的电路仿真功能,我们可以检查电路设计的错误和漏洞,提前解决电路问题。 基于51单片机电子时钟keil程序和protues仿真电路的组合,我们可以全面验证电子时钟的功能和性能,确保设计的准确性和可靠性,为最终实现一个完整的电子时钟设计提供了有力的支持。 ### 回答3: 基于51单片机的电子时钟keil程序和protues仿真电路可以实现以下功能: 1. 显示当前时间:我们可以使用数码管或LCD显示模块来显示当前的时、分和秒。通过编写相应的程序,我们可以从单片机的时钟源获取当前时间,并将其转换为可以在数码管或LCD上显示的格式。 2. 时间调整功能:可以通过按钮或旋钮等输入设备来调整电子时钟的时间。当用户按下或旋转输入设备时,我们可以响应用户的操作,并对时钟的时间进行相应的调整。 3. 闹钟功能:我们可以设置闹钟功能,让电子时钟在特定的时间点发出警报声。通过在程序中设置闹钟时间和警报声的播放方式,我们可以实现这一功能。 4. 温湿度监测:如果我们希望电子时钟能够同时监测室内的温度和湿度,我们可以连接温湿度传感器,并在程序中读取传感器的数据。然后,我们可以将这些数据显示在数码管或LCD上。 程序开发过程中,我们可以使用keil来编写51单片机的程序,通过keil提供的调试工具来测试和调试程序的正确性。同时,我们可以在protues设计仿真电子时钟的电路,包括单片机、显示模块、输入设备和传感器等所有的硬件组件。这样,我们可以在protues中验证电路的功能和效果,并进行性能优化和调试。当电路和程序都满足我们的要求后,我们就可以将程序烧录到实际的硬件上,并使用它作为一台完整的电子时钟了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值