久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 基于stm32簡易計算器制作(lcd1602顯示)源程序 [打印本頁]

作者: 拾光smile    時間: 2020-11-17 21:43
標題: 基于stm32簡易計算器制作(lcd1602顯示)源程序
這是我前幾天用stm32f03c8t6單片機做的一個簡易計算器,用4×4矩陣鍵盤輸入,LCD1602顯示。下面是對我計算器的介紹,附件中還可以下載源程序代碼碼。我的簡易計算器是搭建在面包板上面的,下面這是實物圖和仿真圖。
      



該計算器可以實現連續加減運算圖:


   
較大數字或者較小數字可以用科學計數法顯示
       

當用除法運算時,能夠保留三位小數字
   

另外,在運算時還可以通過串口觀察數據變化

下面是部分源碼:
#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("/");
有需要的小伙伴可以到附件中去下載全部代碼。
由于本人儲備知識量較少,基礎較為薄弱,計算器中使用變量較多,代碼較為繁瑣,感興趣的小伙伴們可以在評論區相互探討學習,若計算器中還存在問題,也希望大家可以指正批評。
最后,感謝大家的支持!!!

全部資料51hei下載地址:
stm32計算器.7z (197.07 KB, 下載次數: 712)

作者: 51hei團團    時間: 2020-11-18 05:11
好資料,51黑有你更精彩!!!
作者: 9876k    時間: 2020-12-19 11:17
謝謝謝謝,太棒了

作者: 9876k    時間: 2020-12-19 11:42
請問一下,電路圖中這個PR1是什么啊,求賜教
作者: 9876k    時間: 2020-12-19 15:08
您好,我想向您請教一下,我按照您的這個電路圖連接的實物,但是沒有連那個排阻,現在lcd背光亮,但是按動鍵盤沒有顯示數字,能請您給我點建議嗎,求賜教

作者: 拾光smile    時間: 2020-12-23 21:04
9876k 發表于 2020-12-19 11:42
請問一下,電路圖中這個PR1是什么啊,求賜教

電路圖中的PR1是排阻,接實物圖時可以不要,最好不要用proteus仿真stm32,目前版本效果一點都不好,我的8.9版本勉強仿真出來LCD1602,但是它現實的延時有問題,我這是方便大家看接線圖才在上面畫的
作者: 拾光smile    時間: 2020-12-23 21:09
9876k 發表于 2020-12-19 15:08
您好,我想向您請教一下,我按照您的這個電路圖連接的實物,但是沒有連那個排阻,現在lcd背光亮,但是按動 ...

仿真圖上面的VEE(實物LCD1602那里是V00),我的這里是為了方便就直接接地了,最好接一個電位器,用來調節顯示對比度
作者: Harbor123    時間: 2020-12-31 08:24
9876k 發表于 2020-12-19 11:42
請問一下,電路圖中這個PR1是什么啊,求賜教

排阻..........
作者: jjwangxu2008    時間: 2020-12-31 08:52
好資料,51黑有你更精彩!!!
作者: wyb1911    時間: 2020-12-31 12:22
徐軍寶 發表于 2020-12-23 21:04
電路圖中的PR1是排阻,接實物圖時可以不要,最好不要用proteus仿真stm32,目前版本效果一點都不好,我的8 ...

嗯  有道理
作者: lojo22    時間: 2021-1-2 13:49
你好,想問一下按照你的電路圖連接的實物,LCD1602那里也接了電位器,代碼燒錄進去之后,為什么按鍵沒有反應,怎么回事呢,能給點建議嗎?
作者: liang118038    時間: 2021-1-3 12:12
既然用LCD1602就加個I2C轉并口模塊吧,才2到3塊錢,反正LCD1602就那么慢,I2C的速度就能滿足了,就2個IO省了一大堆引腳省得布線麻煩而且調對比度供電引腳都集成好了!
作者: huihui12    時間: 2021-1-3 12:32
我想學習單片機
作者: ghoo    時間: 2021-5-15 01:36
我的LCD不顯示呢,是哪里有問題嗎,應該不是電位器的問題
作者: fffnb    時間: 2021-6-7 09:30
這個版塊的ADC有沒有更簡單的寫法
作者: sang2220    時間: 2021-6-13 20:05
ghoo 發表于 2021-5-15 01:36
我的LCD不顯示呢,是哪里有問題嗎,應該不是電位器的問題

大哥你的這個問題解決了嗎 我的也是這個問題,實在不知道原因是啥
作者: 珍愛~    時間: 2021-6-14 12:03
個人建議家底不厚不要入手51單片機,看起來是一片金山未開化,你得有一個團隊,當技術 成熟后必須組件生產線,沒個三五十五萬  你只能花閑錢做愛好而已。當然了,有夢想是好事,當你的實體樣品機開始出售后  估計半年就一大堆山寨機開始競爭了。新科技的 競爭及其殘忍
作者: rockroll    時間: 2021-6-14 23:34
LCD1602的線不用接完的嗎?
作者: 南瓜小公主?    時間: 2021-6-17 10:23
想問問 為啥我連接實物后lcd亮了缺沒有內容,可能會是什么地方的問題?
作者: kai11    時間: 2021-6-29 10:35
南瓜小公主? 發表于 2021-6-17 10:23
想問問 為啥我連接實物后lcd亮了缺沒有內容,可能會是什么地方的問題?

一樣,問題解決了嗎?
作者: 錢11    時間: 2021-7-7 14:52
博主,我制作出來 LCD顯示屏不顯示數字,應該如何排查硬件錯誤呢?
作者: daikai    時間: 2021-11-6 17:09
9876k 發表于 2020-12-19 11:42
請問一下,電路圖中這個PR1是什么啊,求賜教

就是一個排阻
作者: H_W_M    時間: 2021-12-12 23:53
求教,正常顯示八位,開機顯示0 可以進行加減乘除,除法可以自動舍去小數,超出顯示錯誤

作者: 13118302007    時間: 2021-12-13 19:31
不錯,不過最后一張照片有問題吧,98/6=16.3333333333,而不是16.033,區別大了!
作者: zyhow    時間: 2021-12-15 17:15
liang118038 發表于 2021-1-3 12:12
既然用LCD1602就加個I2C轉并口模塊吧,才2到3塊錢,反正LCD1602就那么慢,I2C的速度就能滿足了,就2個IO省 ...

I2C轉并口模塊是什么
作者: zyhow    時間: 2021-12-15 17:17
liang118038 發表于 2021-1-3 12:12
既然用LCD1602就加個I2C轉并口模塊吧,才2到3塊錢,反正LCD1602就那么慢,I2C的速度就能滿足了,就2個IO省 ...

我在某一個寶上搜I2C轉并口,要好幾十。。。
作者: 32f    時間: 2021-12-28 10:54
用點整能不能實現啊
作者: qwssd    時間: 2022-3-2 08:26
這個里邊沒有仿真吧

作者: 104551    時間: 2022-3-15 17:05
51黑有你更精彩!!!
作者: 拾光smile    時間: 2022-3-19 19:21
qwssd 發表于 2022-3-2 08:26
這個里邊沒有仿真吧

沒有仿真
作者: w921913520    時間: 2022-5-4 14:50
謝謝分享,幫助我解決了電路連接難題
作者: w921913520    時間: 2022-5-6 14:56
本帖最后由 w921913520 于 2022-5-6 22:17 編輯

樓主的代碼可以用于STM32F103RB的芯片不
作者: wutiaowu    時間: 2022-5-12 23:33
想問一下,LCD有亮但是按鍵盤卻沒有反應,而且蜂鳴器一直在響該怎么解決?
作者: heicad    時間: 2022-5-13 16:40
wutiaowu 發表于 2022-5-12 23:33
想問一下,LCD有亮但是按鍵盤卻沒有反應,而且蜂鳴器一直在響該怎么解決?

LCD有亮只能證明 背光的2個引腳沒有錯,有可能其他的數據和控制io全部都是錯誤的接法,仔細檢查一下電路
作者: LXJG    時間: 2022-5-16 18:54
LCD不顯示加個RP電阻調節就行了

作者: 糜子    時間: 2022-5-24 14:45
wutiaowu 發表于 2022-5-12 23:33
想問一下,LCD有亮但是按鍵盤卻沒有反應,而且蜂鳴器一直在響該怎么解決?

檢查一下IO口是否對應
作者: jude_li    時間: 2022-6-30 11:07
太棒了,設計就做這個了
作者: 我家哥哥愛下蛋    時間: 2023-2-27 16:27
LCD1602好難
作者: qumingzi    時間: 2023-7-5 18:48
不太明白,前來學習,感謝樓主。
作者: fzuzjh666    時間: 2023-9-27 13:47
有沒有具體的接線圖呀,還是說就按著原理圖接就行
作者: keilhua    時間: 2023-10-8 20:58
太棒了,剛好想學一下
作者: were-    時間: 2023-12-2 16:37

好資料,51黑有你更精彩!!!
作者: lzm0422    時間: 2024-5-20 11:37
有人仿真顯示成功了嗎
作者: czhhb    時間: 2024-6-22 13:33
值得初學者學習。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 福利视频大全 | 中文字幕高清 | 亚洲国产电影 | 中文字幕av色 | 久色网| 精品国产乱码久久久久久牛牛 | 欧美一区 | 亚洲成人日韩 | 国产免费人成xvideos视频 | 成人在线国产 | 成人av一区二区三区 | 免费看一区二区三区 | 不卡av电影在线播放 | 色眯眯视频在线观看 | 国产精品高清一区二区 | 在线观看亚| 老司机午夜性大片 | 99精品欧美一区二区三区 | 午夜丰满寂寞少妇精品 | 国产精品久久久久久久久久久久久久 | 奇米视频777 | 欧美成人性生活 | 亚洲视频不卡 | 激情a | 国产一级一级毛片 | 91麻豆精品国产91久久久久久 | 中文字幕亚洲一区二区三区 | 黑人性hd | 亚洲男人的天堂网站 | 99久久精品国产一区二区三区 | 欧美日韩一区二区在线观看 | 国产在线永久免费 | 久久久成人精品 | 中文在线播放 | 欧美精品一区在线发布 | 老司机67194精品线观看 | 天天操精品视频 | 久久久av| 秋霞电影院午夜伦 | 成人h免费观看视频 | 国产午夜久久久 |