0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于51單片機(jī)的簡易計(jì)算器設(shè)計(jì)

白茶茶668 ? 來源:白茶茶668 ? 作者:白茶茶668 ? 2023-08-01 00:51 ? 次閱讀

該計(jì)算器系統(tǒng)51 系列的單片機(jī)進(jìn)行的數(shù)字計(jì)算器系統(tǒng)設(shè)計(jì),可以完成計(jì)算器的鍵盤輸入, 進(jìn)行加、 減、乘、除的簡單四則運(yùn)算,并在 LCD屏幕上相應(yīng)的顯示結(jié)果。選擇內(nèi)部存儲(chǔ)資源豐富的 51 單片 機(jī),輸入采用 4×4矩陣鍵盤,顯示采用LCD1602屏幕模塊進(jìn)行顯示。軟件方面從分析計(jì)算器功能、 流程圖設(shè)計(jì),再到程序的編寫進(jìn)行系統(tǒng)設(shè)計(jì)。編程語言方面從程序總體設(shè)計(jì)以及高效性和功能性對 C 語言和匯編語言進(jìn)行比較分析, 針對計(jì)算器四則運(yùn)算算法特別是乘法和除法運(yùn)算的實(shí)現(xiàn),最終選 用全球編譯效率最高的KEIL 公司的μVision5 軟件,采用C語言進(jìn)行編程,并用 Proteus8 進(jìn)行仿真。

image.png

部分程序:

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit rs=P2^6; //數(shù)據(jù)命令選擇

sbit lcden=P2^7;//使能信號


uchar code table[]= " ";


long int data_a,data_b; //第一個(gè)數(shù)和第二個(gè)數(shù)

long int data_c; //計(jì)算結(jié)果


uchar dispaly[10]; //顯示緩沖


sbit MUSIC_REST =P2^2;//語音芯片復(fù)位腳

sbit MUSIC_DATA =P2^1;//語音芯片脈沖識(shí)別

sbit bus =P2^0;//語音芯片工作狀態(tài)識(shí)別信號

uchar bbh,xm1,xm2,xm0;


void delay_us(unsigned int us)//延時(shí)函數(shù)

{

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--;

}

}

//************************************************************************/

// 描述: 延時(shí)t us函數(shù)

//************************************************************************/

void LCD_Delay_us(unsigned int t)

{

while(t--); //t=0,退出

}

//************************************************************************/

// 描述: 延時(shí)t ms函數(shù)

//************************************************************************/

void LCD_Delay_ms(unsigned int t)

{

unsigned int i,j;

for(i=0;i;i++)>

for(j=0;j<113;j++) //執(zhí)行113次循環(huán)

;

}

//************************************************************************/

// 描述: 1602液晶寫指令

//************************************************************************/

void write_com(uchar com) //1602液晶寫指令

{

rs=0; //寫指令

lcden=0; //使能1602

P0=com; //寫入指令com

LCD_Delay_ms(1); //延時(shí)1ms

lcden=1; //使能1602

LCD_Delay_ms(2); //延時(shí)2ms

lcden=0; //使能1602

}

//************************************************************************/

// 描述:1602液晶寫數(shù)據(jù)

//************************************************************************/

void write_date(uchar date) //1602液晶寫數(shù)據(jù)

{

rs=1; //寫數(shù)據(jù)

lcden=0; //使能1602

P0=date; //寫入數(shù)據(jù)date

LCD_Delay_ms(1); //延時(shí)1ms

lcden=1; //使能1602

LCD_Delay_ms(2); //延時(shí)2ms

lcden=0; //使能1602

}

//************************************************************************/

// 描述:指定x,y寫入字符函數(shù)

//************************************************************************/

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); //寫入數(shù)據(jù)

}

//指定x,y寫入字符串函數(shù)

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++;} //寫入數(shù)據(jù)

}

//************************************************************************/

// 描述:初始化液晶,及畫面初始化

//************************************************************************/

void init_lcd(void) //初始化液晶,及畫面初始化

{

lcden=0; //使能1602

write_com(0x38); //8 位總線,雙行顯示,5X7 的點(diǎn)陣字符

LCD_Delay_us(100); //延時(shí)100us

write_com(0x0c); //開顯示,無光標(biāo),光標(biāo)不閃爍

write_com(0x06); //光標(biāo)右移動(dòng)

write_com(0x01); //清屏

write_com(0x80); //DDRAM 地址歸0

}

//************************************************************************/

// 描述: 反轉(zhuǎn)法鍵盤掃描

//************************************************************************/

short keycheckdown() /* 反轉(zhuǎn)法鍵盤掃描 */

{


short temp1,temp2,temp,a=0xff;

P1=0xf0; /* 輸入行值(或列值) */

LCD_Delay_ms(20); /* 延時(shí) */

temp1=P1; /* 讀列值(或行值) */

P1=0xff;

LCD_Delay_ms(20); /* 延時(shí) */

P1=0x0f; /* 輸入列值(或行值) */

LCD_Delay_ms(20); /* 延時(shí) */

temp2=P1; /* 讀行值(或列值) */

P1=0xff;

temp=(temp1&0xf0)|(temp2&0xf); /* 將兩次讀入數(shù)據(jù)組合 */

switch(temp) /* 通過讀入數(shù)據(jù)組合判斷按鍵位置 */

{

case 0x77 :a=0x0d;Music(27);while(!bus);break;// 按鍵/

case 0x7b :a=0x0e;Music(31);while(!bus); break;// 按鍵=

case 0x7d :a=0;Music(2);while(!bus);break;// 按鍵0

case 0x7e :a=0x0f; break;// 按鍵CE

case 0xb7 :a=0x0c;Music(26);while(!bus);break;// 按鍵*

case 0xbb :a=0x9;Music(11);while(!bus);break; // 按鍵9

case 0xbd :a=0x8;Music(10);while(!bus);break; // 按鍵8

case 0xbe :a=0x7;Music(9);while(!bus);break; // 按鍵7

case 0xd7 :a=0x0b;Music(25);while(!bus);break;// 按鍵-

case 0xdb :a=0x6;Music(8);while(!bus);break; // 按鍵6

case 0xdd :a=0x5;Music(7);while(!bus);break; // 按鍵5

case 0xde :a=0x4;Music(6);while(!bus);break; // 按鍵4

case 0xe7 :a=0x0a;Music(24);while(!bus);break;// 按鍵+

case 0xeb :a=3;Music(5);while(!bus);break; // 按鍵3

case 0xed :a=2;Music(4);while(!bus);break; // 按鍵2

case 0xee :a=1;Music(3);while(!bus);break; // 按鍵1

default :a=0xff;

}

return a; /* 返回按鍵值 */

}

image.png?

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • lcd
    lcd
    +關(guān)注

    關(guān)注

    34

    文章

    4406

    瀏覽量

    166930
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    273

    文章

    5697

    瀏覽量

    122997
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7595

    瀏覽量

    135866
  • 計(jì)算器
    +關(guān)注

    關(guān)注

    16

    文章

    437

    瀏覽量

    37251
收藏 人收藏

    評論

    相關(guān)推薦

    51單片機(jī) 簡易計(jì)算器制作

    具體東西 都在附件里基于STC89C51做的想做簡但計(jì)算器的可以看看
    發(fā)表于 04-16 11:37

    基于51單片機(jī)簡易計(jì)算器制作 相關(guān)資料推薦

    基于51單片機(jī)簡易計(jì)算器制作51單片機(jī)可以實(shí)現(xiàn)的功能很多,今天筆者介紹一種使用4*4矩陣鍵盤和
    發(fā)表于 07-06 06:12

    基于51單片機(jī)簡易計(jì)算器,用LCD1602顯示 精選資料分享

    基于51單片機(jī)簡易計(jì)算器經(jīng)歷了一番學(xué)習(xí),成功做出了一個(gè)簡易計(jì)算器,并且在程序開頭加了一個(gè)小密
    發(fā)表于 07-14 07:28

    怎樣去設(shè)計(jì)一種基于51單片機(jī)簡易計(jì)算器

    怎樣去設(shè)計(jì)一種基于51單片機(jī)簡易計(jì)算器?簡易計(jì)算器上的矩陣按鍵分別代表什么意思?
    發(fā)表于 09-07 07:01

    如何設(shè)計(jì)一個(gè)基于51單片機(jī)簡易計(jì)算器

    1.簡介本計(jì)算器是以MCS-51系列AT89C51單片機(jī)為核心構(gòu)成的簡易計(jì)算器系統(tǒng)。該系統(tǒng)通過
    發(fā)表于 11-18 08:50

    51單片機(jī)簡易計(jì)算器(單片機(jī)小實(shí)驗(yàn),含C程序和Ptotues電路圖)

    51單片機(jī)簡易計(jì)算器(單片機(jī)小實(shí)驗(yàn),含C程序和Ptotues電路圖)一個(gè)單片機(jī)的小實(shí)驗(yàn),做一個(gè)
    發(fā)表于 04-22 11:04 ?812次下載

    基于MC51單片機(jī)簡易計(jì)算器設(shè)計(jì)_畢業(yè)設(shè)計(jì)(論文)

    畢業(yè)設(shè)計(jì)(論文)-基于MC51單片機(jī)簡易計(jì)算器設(shè)計(jì) 有需要的看一看,不收積分。
    發(fā)表于 11-20 16:49 ?136次下載

    簡易計(jì)算器設(shè)計(jì)

    基于51單片機(jī)簡易計(jì)算器,采用按鍵與數(shù)碼管實(shí)現(xiàn)
    發(fā)表于 12-31 14:33 ?18次下載

    基于51單片機(jī)簡易計(jì)算器,用LCD1602顯示

    基于51單片機(jī)簡易計(jì)算器經(jīng)歷了一番學(xué)習(xí),成功做出了一個(gè)簡易計(jì)算器,并且在程序開頭加了一個(gè)小密
    發(fā)表于 11-11 15:51 ?48次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>簡易</b><b class='flag-5'>計(jì)算器</b>,用LCD1602顯示

    基于51單片機(jī)簡易計(jì)算器

    1.簡介本計(jì)算器是以MCS-51系列AT89C51單片機(jī)為核心構(gòu)成的簡易計(jì)算器系統(tǒng)。該系統(tǒng)通過
    發(fā)表于 11-11 19:51 ?54次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>簡易</b><b class='flag-5'>計(jì)算器</b>

    基于51單片機(jī)簡易計(jì)算器設(shè)計(jì)

    一.硬件方案本設(shè)計(jì)是以51單片機(jī)為核心的計(jì)算器模擬系統(tǒng)設(shè)計(jì),輸入采用4×4矩陣鍵盤,可以進(jìn)行加、減、乘、除4位帶符號數(shù)字運(yùn)算,并在LCD1602上顯示操作過程。。主要由51
    發(fā)表于 11-13 10:21 ?28次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>簡易</b><b class='flag-5'>計(jì)算器</b>設(shè)計(jì)

    基于51單片機(jī)簡易計(jì)算器LCD顯示

    分享一個(gè)小作品,是根據(jù)普中單片機(jī)給的簡易計(jì)算器的代碼的思路自己改寫的,IO口的話也能對應(yīng)的上開發(fā)板的引腳,他原來給的程序是只能實(shí)現(xiàn)兩位數(shù)差十倍的加減乘除,特別是除法的話A/B A<B在
    發(fā)表于 11-23 16:36 ?3次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>簡易</b><b class='flag-5'>計(jì)算器</b>LCD顯示

    基于51單片機(jī)簡易計(jì)算器(數(shù)碼管顯示)源代碼

    基于51單片機(jī)簡易計(jì)算器(數(shù)碼管顯示)例程源代碼
    發(fā)表于 05-12 16:39 ?39次下載

    基于51單片機(jī)簡易計(jì)算器設(shè)計(jì)

    基于51單片機(jī)簡易計(jì)算器設(shè)計(jì)(實(shí)物)
    發(fā)表于 01-02 10:02 ?9次下載

    基于51單片機(jī)簡易計(jì)算器設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)簡易計(jì)算器設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 01-12 10:50 ?9次下載