基于Proteus的C51远程计算器
一、具体要求:
1、 主机的矩阵键盘输入数和运算符号,从机显示运算结果
2、 主从单片机串行通信系统,并在 LCD 上显示运算内容及结果
二、实验要点:
1、按键扫描
2、串口通信
3、字符串数据处理
4、LCD实时显示
三、设计方案:
1、主机通过扫描矩阵按键,返回对应数据,并经程序处理后将字符通过串口发送给从机,主机并不执行其他功能。
2、从机接收串口发送的数据,当接收到字符"="时,进行等式运算,并实时进行LCD显示。当接收到字符"c"时,LCD清屏,缓存的全部数据清0。
四、程序源码:
由于我是以小项目分块写的,所以各个程序不在同一个页面,如果强行复制在一起,可能会出问题,就只给出了main函数的程序,各个子函数就需要另外安排了,这就当给大家提供一个思路。
我开始还想着直接主机处理完全部数据,从机直接LCD显示就是了,为此还浪费了我不少时间,没想到换个思路主机传输数据,从机来处理计算一下子就好了。
当然如果大家需要,我的整个项目文件包括源程序和仿真我都放在文章末尾如果大家需要可以直接下载,喜欢的话点个关注,来个赞呗,谢谢哦。
1、主机main:
// 主机:按键扫描,并实时发送给从机
void main()
{
UsartInit();//串口初始化
delay(200);
while(1)
{
num=KeyPro();//按键扫描
if(num!=0xff) //按键按下
{
putchar(num);//串口实时发送
}
}
}
2、从机main:
// 接收串口数据,实时显示,并适时做等式运算
void main()
{
UsartInit(); //串口初始化
LCD_init(); //LCD初始化
putstring("Hello,this is calaulator\r\n");//串口打印数据,但LCD不显示
putstring("He is made from Hebin and Wangshaoji\r\n");
showstring(0,0,Hello_0);//LCD1602第1行
showstring(0,1,Hello_1);//LCD1602第2行
delayms(500);
while(1)
{
// 字符数据处理程序是写在中断函数里面的,所以这里直接调用显示就可以了
showstring(0,0,dis_table0);//LCD实时显示
showstring(0,1,dis_table1);
}
}
五、Proteus仿真:
六、项目资料
失效链接:https://pan.baidu.com/s/1OAhFDi9IraFuk_7ZbbuOGA
提取码:nzfd
更新链接:https://pan.baidu.com/s/1fPRoXaYUJqUE23Uh_9PMzA
提取码:t9q4
蓝奏云:https://wwi.lanzoup.com/iRNRd0rdbwfe
更新日期20230329
最近才看见有小伙伴需要这个项目的资料,于是重新更新了一下链接。
不过找不到proteus软件了,而且我当时完成的时候软件是一个比较老版本的。
还好的是代码和基于老版本的仿真图还在,自己重新绘制一下仿真就行。
另外还有个问题:
大家都看见了,我在仿真时,调用了Proteus的矩阵键盘,但是又自己画了一个,是有原因的,就是调用的矩阵键盘不能使用,我也没有找到原因,但估计时程序里面的按键扫描函数需要升级,如果大家解决了,希望留言。
感谢大家的阅读,欢迎提问和共同学习。