基於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
另外還有個問題:
大家都看見了,我在仿真時,調用了Proteus的矩陣鍵盤,但是又自己畫了一個,是有原因的,就是調用的矩陣鍵盤不能使用,我也沒有找到原因,但估計時程序裏面的按鍵掃描函數需要升級,如果大家解決了,希望留言。
感謝大家的閱讀,歡迎提問和共同學習。