標(biāo)題: 基于stm32簡易計(jì)算器制作(lcd1602顯示)源程序 [打印本頁]
作者: 拾光smile 時(shí)間: 2020-11-17 21:43
標(biāo)題: 基于stm32簡易計(jì)算器制作(lcd1602顯示)源程序
這是我前幾天用stm32f03c8t6單片機(jī)做的一個(gè)簡易計(jì)算器,用4×4矩陣鍵盤輸入,LCD1602顯示。下面是對我計(jì)算器的介紹,附件中還可以下載源程序代碼碼。我的簡易計(jì)算器是搭建在面包板上面的,下面這是實(shí)物圖和仿真圖。
圖片1.png (552.68 KB, 下載次數(shù): 131)
下載附件
2020-11-17 21:24 上傳
圖片2.png (31.65 KB, 下載次數(shù): 120)
下載附件
2020-11-17 21:26 上傳
該計(jì)算器可以實(shí)現(xiàn)連續(xù)加減運(yùn)算圖:
圖片3.png (819.73 KB, 下載次數(shù): 132)
下載附件
2020-11-17 21:27 上傳
較大數(shù)字或者較小數(shù)字可以用科學(xué)計(jì)數(shù)法顯示
圖片4.png (823.62 KB, 下載次數(shù): 139)
下載附件
2020-11-17 21:34 上傳
圖片5.png (773.36 KB, 下載次數(shù): 118)
下載附件
2020-11-17 21:34 上傳
當(dāng)用除法運(yùn)算時(shí),能夠保留三位小數(shù)字
圖片6.png (773.77 KB, 下載次數(shù): 113)
下載附件
2020-11-17 21:36 上傳
另外,在運(yùn)算時(shí)還可以通過串口觀察數(shù)據(jù)變化
下面是部分源碼:
#include "stm32f10x.h"
#include "delay.h"
#include "keyscan.h"
#include "LCD1602.h"
#include "usart.h"
#include "math.h"
u8 num,flag;
double r,o;
long long a,b,x,y,z,sum,k;
int e,f,g,h,i,t,len,w,l;
int s,m,w,j,q,d,n,c=0;
int main()
{
LCD_init();
uart_init(9600);
while(1)
{
num=keyscan();
a=num;
if(a>=0&&a<=9&&s!=2&&flag!=0)
{
if(a!=0||n!=0)
{
LCD_write_data((u8)a+0x30);
if(n==0)
{
b=a;
}
else
{
b=sum*10;
sum=a;
}
sum=sum+b;
///////////////////////////////
if(q==0&&j==0)
{
x=sum;
printf("x=%lld ",x);
d=1;
m=0;
}
if(q==1&&j==1)
{
x=-sum;
printf("x=%lld ",x);
d=1;
m=0;
}
/////////////////////////////////
if(q==1&&(j==2||j==0))
{
y=sum;
printf("y=%lld ",y);
d=2;
}
/////////////////////////////////
n++;
w++;
delay_ms(100);
}
}
if(a==10&n!=0&&m!=1&&flag!=0)//+號
{
if(c>=1)
{
q=1;
j=0;
x=z;
}
//LCD_write_data('+');
LCD_write_data(0x2b);
printf(" + ");
j=0;
n=0;
q=1;
flag=1;
b=0;
sum=0;
c++;
w++;
delay_ms(100);
}
if(a==11&&m!=1&&flag!=0)
{
//LCD_write_data('-');
LCD_write_data(0x2d);//'-'號
printf(" - ");
if(c>=1)
{
q=1;
j=0;
x=z;
}
if(d==0)
{
j=1;
}
if(d==1)
{
j=2;
}
n=0;
q=1;
flag=2;
b=0;
sum=0;
m=-m;
w++;
c++;
delay_ms(100);
}
if(a==12&n!=0&&m!=1&&flag!=0)
{
LCD_write_data('*');//×號
//LCD_write_data(0x2a);//×號
if(c>=1)
{
q=1;
j=0;
x=z;
}
printf(" * ");
j=0;
n=0;
q=1;
flag=3;
b=0;
sum=0;
m=-m;
w++;
c++;
delay_ms(100);
}
if(a==13&n!=0&&m!=1&&flag!=0)
{
// LCD_write_data('');//除號
LCD_write_data(0xfd);//÷號
if(c>=1)
{
q=1;
j=0;
x=z;
}
printf("/");
NSV`S3@9{)5TFQFX2W22BPV.png (44.7 KB, 下載次數(shù): 146)
下載附件
2020-11-17 21:42 上傳
有需要的小伙伴可以到附件中去下載全部代碼。
由于本人儲(chǔ)備知識(shí)量較少,基礎(chǔ)較為薄弱,計(jì)算器中使用變量較多,代碼較為繁瑣,感興趣的小伙伴們可以在評論區(qū)相互探討學(xué)習(xí),若計(jì)算器中還存在問題,也希望大家可以指正批評。
最后,感謝大家的支持!!!
全部資料51hei下載地址:
stm32計(jì)算器.7z
(197.07 KB, 下載次數(shù): 712)
2020-11-18 05:09 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: 51hei團(tuán)團(tuán) 時(shí)間: 2020-11-18 05:11
好資料,51黑有你更精彩!!!
作者: 9876k 時(shí)間: 2020-12-19 11:17
謝謝謝謝,太棒了
作者: 9876k 時(shí)間: 2020-12-19 11:42
請問一下,電路圖中這個(gè)PR1是什么啊,求賜教
作者: 9876k 時(shí)間: 2020-12-19 15:08
您好,我想向您請教一下,我按照您的這個(gè)電路圖連接的實(shí)物,但是沒有連那個(gè)排阻,現(xiàn)在lcd背光亮,但是按動(dòng)鍵盤沒有顯示數(shù)字,能請您給我點(diǎn)建議嗎,求賜教
作者: 拾光smile 時(shí)間: 2020-12-23 21:04
電路圖中的PR1是排阻,接實(shí)物圖時(shí)可以不要,最好不要用proteus仿真stm32,目前版本效果一點(diǎn)都不好,我的8.9版本勉強(qiáng)仿真出來LCD1602,但是它現(xiàn)實(shí)的延時(shí)有問題,我這是方便大家看接線圖才在上面畫的
作者: 拾光smile 時(shí)間: 2020-12-23 21:09
仿真圖上面的VEE(實(shí)物L(fēng)CD1602那里是V00),我的這里是為了方便就直接接地了,最好接一個(gè)電位器,用來調(diào)節(jié)顯示對比度
作者: Harbor123 時(shí)間: 2020-12-31 08:24
排阻..........
作者: jjwangxu2008 時(shí)間: 2020-12-31 08:52
好資料,51黑有你更精彩!!!
作者: wyb1911 時(shí)間: 2020-12-31 12:22
嗯 有道理
作者: lojo22 時(shí)間: 2021-1-2 13:49
你好,想問一下按照你的電路圖連接的實(shí)物,LCD1602那里也接了電位器,代碼燒錄進(jìn)去之后,為什么按鍵沒有反應(yīng),怎么回事呢,能給點(diǎn)建議嗎?
作者: liang118038 時(shí)間: 2021-1-3 12:12
既然用LCD1602就加個(gè)I2C轉(zhuǎn)并口模塊吧,才2到3塊錢,反正LCD1602就那么慢,I2C的速度就能滿足了,就2個(gè)IO省了一大堆引腳省得布線麻煩而且調(diào)對比度供電引腳都集成好了!
作者: huihui12 時(shí)間: 2021-1-3 12:32
我想學(xué)習(xí)單片機(jī)
作者: ghoo 時(shí)間: 2021-5-15 01:36
我的LCD不顯示呢,是哪里有問題嗎,應(yīng)該不是電位器的問題
作者: fffnb 時(shí)間: 2021-6-7 09:30
這個(gè)版塊的ADC有沒有更簡單的寫法
作者: sang2220 時(shí)間: 2021-6-13 20:05
大哥你的這個(gè)問題解決了嗎 我的也是這個(gè)問題,實(shí)在不知道原因是啥
作者: 珍愛~ 時(shí)間: 2021-6-14 12:03
個(gè)人建議家底不厚不要入手51單片機(jī),看起來是一片金山未開化,你得有一個(gè)團(tuán)隊(duì),當(dāng)技術(shù) 成熟后必須組件生產(chǎn)線,沒個(gè)三五十五萬 你只能花閑錢做愛好而已。當(dāng)然了,有夢想是好事,當(dāng)你的實(shí)體樣品機(jī)開始出售后 估計(jì)半年就一大堆山寨機(jī)開始競爭了。新科技的 競爭及其殘忍
作者: rockroll 時(shí)間: 2021-6-14 23:34
LCD1602的線不用接完的嗎?
作者: 南瓜小公主? 時(shí)間: 2021-6-17 10:23
想問問 為啥我連接實(shí)物后lcd亮了缺沒有內(nèi)容,可能會(huì)是什么地方的問題?
作者: kai11 時(shí)間: 2021-6-29 10:35
一樣,問題解決了嗎?
作者: 錢11 時(shí)間: 2021-7-7 14:52
博主,我制作出來 LCD顯示屏不顯示數(shù)字,應(yīng)該如何排查硬件錯(cuò)誤呢?
作者: daikai 時(shí)間: 2021-11-6 17:09
就是一個(gè)排阻
作者: H_W_M 時(shí)間: 2021-12-12 23:53
求教,正常顯示八位,開機(jī)顯示0 可以進(jìn)行加減乘除,除法可以自動(dòng)舍去小數(shù),超出顯示錯(cuò)誤
作者: 13118302007 時(shí)間: 2021-12-13 19:31
不錯(cuò),不過最后一張照片有問題吧,98/6=16.3333333333,而不是16.033,區(qū)別大了!
作者: zyhow 時(shí)間: 2021-12-15 17:15
I2C轉(zhuǎn)并口模塊是什么
作者: zyhow 時(shí)間: 2021-12-15 17:17
我在某一個(gè)寶上搜I2C轉(zhuǎn)并口,要好幾十。。。
作者: 32f 時(shí)間: 2021-12-28 10:54
用點(diǎn)整能不能實(shí)現(xiàn)啊
作者: qwssd 時(shí)間: 2022-3-2 08:26
這個(gè)里邊沒有仿真吧
作者: 104551 時(shí)間: 2022-3-15 17:05
51黑有你更精彩!!!
作者: 拾光smile 時(shí)間: 2022-3-19 19:21
沒有仿真
作者: w921913520 時(shí)間: 2022-5-4 14:50
謝謝分享,幫助我解決了電路連接難題
作者: w921913520 時(shí)間: 2022-5-6 14:56
本帖最后由 w921913520 于 2022-5-6 22:17 編輯
樓主的代碼可以用于STM32F103RB的芯片不
作者: wutiaowu 時(shí)間: 2022-5-12 23:33
想問一下,LCD有亮但是按鍵盤卻沒有反應(yīng),而且蜂鳴器一直在響該怎么解決?
作者: heicad 時(shí)間: 2022-5-13 16:40
LCD有亮只能證明 背光的2個(gè)引腳沒有錯(cuò),有可能其他的數(shù)據(jù)和控制io全部都是錯(cuò)誤的接法,仔細(xì)檢查一下電路
作者: LXJG 時(shí)間: 2022-5-16 18:54
LCD不顯示加個(gè)RP電阻調(diào)節(jié)就行了
作者: 糜子 時(shí)間: 2022-5-24 14:45
檢查一下IO口是否對應(yīng)
作者: jude_li 時(shí)間: 2022-6-30 11:07
太棒了,設(shè)計(jì)就做這個(gè)了
作者: 我家哥哥愛下蛋 時(shí)間: 2023-2-27 16:27
LCD1602好難
作者: qumingzi 時(shí)間: 2023-7-5 18:48
不太明白,前來學(xué)習(xí),感謝樓主。
作者: fzuzjh666 時(shí)間: 2023-9-27 13:47
有沒有具體的接線圖呀,還是說就按著原理圖接就行
作者: keilhua 時(shí)間: 2023-10-8 20:58
太棒了,剛好想學(xué)一下
作者: were- 時(shí)間: 2023-12-2 16:37
好資料,51黑有你更精彩!!!
作者: lzm0422 時(shí)間: 2024-5-20 11:37
有人仿真顯示成功了嗎
作者: czhhb 時(shí)間: 2024-6-22 13:33
值得初學(xué)者學(xué)習(xí)。
作者: tffifuyf 時(shí)間: 2025-11-28 08:33
好資料!感謝
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |