基于51单片机的简易计算器设计(仿真)

         该计算器系统51 系列的单片机进行的数字计算器系统设计,可以完成计算器的键盘输入, 进行加、减、乘、除的简单四则运算,并在 LCD屏幕上相应的显示结果。选择内部存储资源丰富的 51 单片机,输入采用 4×4矩阵键盘,显示采用LCD1602屏幕模块进行显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。

bit lcden=P2^7;//使能信号

uchar code table[]= "               ";

long  int data_a,data_b; 	//第一个数和第二个数
long  int data_c;			//计算结果

uchar dispaly[10];         //显示缓冲

sbit MUSIC_REST =P2^2;//语音芯片复位脚					
sbit MUSIC_DATA =P2^1;//语音芯片脉冲识别
sbit bus =P2^0;//语音芯片工作状态识别信号  
uchar bbh,xm1,xm2,xm0;

void delay_us(unsigned int us)//延时函数
{
    while(us--)
    {
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    }
} 
void Music(unsigned char music_count)
{
    MUSIC_REST=1;
    delay_us(200);
    MUSIC_REST=0;
    delay_us(200);

    while(music_count>0)
    {
        MUSIC_DATA=1;
        delay_us(100);
        MUSIC_DATA=0;
        delay_us(100);
		music_count--;
    }
} 
//************************************************************************/
// 描述: 延时t us函数
//************************************************************************/
void LCD_Delay_us(unsigned int t)
{
	while(t--);           //t=0,退出
}
//************************************************************************/
// 描述: 延时t ms函数
//************************************************************************/
void LCD_Delay_ms(unsigned int t)
{
	unsigned int i,j;
	for(i=0;i<t;i++)       		//执行t次循环
	for(j=0;j<113;j++)     		//执行113次循环
	;
}
//************************************************************************/
// 描述: 1602液晶写指令
//************************************************************************/
void write_com(uchar com)    	//1602液晶写指令
{
	rs=0;                       //写指令
	lcden=0;                    //使能1602 
	P0=com;                     //写入指令com
	LCD_Delay_ms(1);            //延时1ms
	lcden=1;                    //使能1602
	LCD_Delay_ms(2);            //延时2ms  
	lcden=0;	                //使能1602
}
//************************************************************************/
// 描述:1602液晶写数据 
//************************************************************************/
void write_date(uchar date) //1602液晶写数据
{
	rs=1;                        //写数据
	lcden=0;                     //使能1602 
	P0=date;                     //写入数据date
	LCD_Delay_ms(1);             //延时1ms
	lcden=1;                     //使能1602
	LCD_Delay_ms(2);             //延时2ms
	lcden=0;	                 //使能1602
}
//************************************************************************/
// 描述:指定x,y写入字符函数
//************************************************************************/
 void W_lcd(unsigned char x,unsigned char y,unsigned char Data) 
 {     
	 if (y == 0){write_com(0x80 + x);}   //第一行  
	 else{write_com(0xc0 + x);}          //第二行
	 write_date( Data);                  //写入数据
 }
 //指定x,y写入字符串函数
 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
 {     
 if (y == 0){write_com(0x80 + x);} 		//第一行
 else{write_com(0xC0 + x);}        		//第二行
 while (*s)                        		//
 	{write_date( *s); s++;}      		//写入数据
 }
//************************************************************************/
// 描述:初始化液晶,及画面初始化 
//************************************************************************/
void init_lcd(void)            //初始化液晶,及画面初始化
{

 

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值