登录
|
立即注册
|
使用QQ帐号登录
论坛
>
51单片机
发帖
|
基于AT89C51单片机的一位计算器仿真设计
看6380
|
回5
|
收藏
楼主
ID:269295
只看他
2017-12-30 19:57
单片机一位计算器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
代码:
#include <reg51.h>
sbit LCD_RS = P2^0;
sbit LCD_EN = P2^1;
unsigned char KeyValue = 255;
unsigned char DisCache[6]={0};
unsigned char StartFlag = 0;
void DelayTime10us(unsigned int DelayValue)
{
unsigned int a = 0,b = 0;
for(a =0 ;a < DelayValue; a++)
for(b =0 ;b < 18; b++);
}
void DelayTime10ms(unsigned int DelayValue)
{
unsigned int a = 0,b = 0;
for(a =0 ;a < DelayValue; a++)
for(b =0 ;b < 1828; b++);
}
void SendDataToLCD(unsigned char LCDData)
{
LCD_RS = 1;
P0 = LCDData;
LCD_EN = 1;
DelayTime10us(10);
LCD_EN = 0;
DelayTime10us(10);
}
void SendPositionToLCD(unsigned char LCDPosition)
{
LCD_RS = 0;
P0 = LCDPosition;
LCD_EN = 1;
DelayTime10us(10);
LCD_EN = 0;
DelayTime10us(10);
}
void DisStr(unsigned char *point)
{
char i = 0;
for(;;)
{
SendDataToLCD( *point);
point++;
if(*point =='\0')
break;
}
}
void DisStr1()
{
char i = 0;
for(i=0;i<6;i++)
{
SendDataToLCD(DisCache[i]);
}
}
void KeyScan()
{
int KeyTemp = 0;
P3 = 0xfe;
KeyTemp = P3&0xf0;
if(KeyTemp!=0xf0)
{
DelayTime10ms(1);
P3 = 0xf0;
KeyTemp = P3&0xf0;
if(KeyTemp!=0xf0)
{
switch(KeyTemp)
{
case 0xe0:KeyValue =7;break;
case 0xd0:KeyValue =8;break;
case 0xb0:KeyValue =9;break;
case 0x70:KeyValue =10;break;
}
}
}
P3 = 0xfd;
KeyTemp = P3&0xf0;
if(KeyTemp!=0xf0)
{
DelayTime10ms(1);
P3 = 0xf0;
KeyTemp = P3&0xf0;
if(KeyTemp!=0xf0)
{
switch(KeyTemp)
{
case 0xe0:KeyValue =4;break;
case 0xd0:KeyValue =5;break;
case 0xb0:KeyValue =6;break;
case 0x70:KeyValue =11;break;
}
}
}
P3 = 0xfb;
KeyTemp = P3&0xf0;
if(KeyTemp!=0xf0)
{
DelayTime10ms(1);
P3 = 0xf0;
KeyTemp = P3&0xf0;
if(KeyTemp!=0xf0)
{
switch(KeyTemp)
{
case 0xe0:KeyValue =1;break;
case 0xd0:KeyValue =2;break;
case 0xb0:KeyValue =3;break;
case 0x70:KeyValue =12;break;
}
}
}
P3 = 0xf7;
KeyTemp = P3&0xf0;
if(KeyTemp!=0xf0)
{
DelayTime10ms(1);
P3 = 0xf0;
KeyTemp = P3&0xf0;
if(KeyTemp!=0xf0)
{
switch(KeyTemp)
{
case 0xe0:KeyValue =15;break;
case 0xd0:KeyValue =0;break;
case 0xb0:KeyValue =14;break;
case 0x70:KeyValue =13;break;
}
}
}
}
void main()
{
// 01 06 0c 38
SendPositionToLCD(0x01);
SendPositionToLCD(0x06);
SendPositionToLCD(0x0c);
SendPositionToLCD(0x38);
SendPositionToLCD(0x80);
DisStr("calculator!");
for(;;)
{
KeyScan();
SendPositionToLCD(0xc0);
//DisStr(DisCache);
DisStr1();
if((KeyValue>=0)&&(KeyValue<=9)&&(StartFlag==0))
{
DisCache[0]=KeyValue+48;
StartFlag=1;
}
if(KeyValue==15)
{
StartFlag = 0;
DisCache[0]=48;
DisCache[1]=0;
DisCache[2]=0;
DisCache[3]=0;
DisCache[4]=0;
DisCache[5]=0;
DisCache[6]=0;
}
if((KeyValue>=10)&&(KeyValue<=13)&&(StartFlag==1))
{
StartFlag=2;
switch(KeyValue)
{
case 10:DisCache[1]= 47;break;
case 11:DisCache[1]= 42;break;
case 12:DisCache[1]= 45;break;
case 13:DisCache[1]= 43;break;
}
}
if((KeyValue>=0)&&(KeyValue<=9)&&(StartFlag==2))
{
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
所有资料51hei提供下载:
计算机2017-12-4.zip
(147.09 KB)
(下载次数: 123, 2017-12-30 19:56 上传)
下载积分: 黑币 -5
沙发
ID:350401
只看他
2018-6-12 16:35
没有黑币
板凳
ID:353807
只看他
2018-6-18 18:55
学习一下
地板
ID:701236
只看他
2020-3-2 16:38
怎么是80C51,标题上是AT89C51
5
#
ID:701325
只看他
2020-3-2 18:59
能问下楼主,能通过这个做出简易计算器么!
6
#
ID:701341
只看他
2020-3-2 19:42
学习一下看看怎么样
51黑电子论坛
Powered by
Discuz!
X3.1
首页
|
标准版
|
触屏版
|
电脑版