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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2058|回復: 7
收起左側

請教關于程序邏輯框圖

[復制鏈接]
ID:73992 發表于 2022-12-30 20:25 | 顯示全部樓層 |閱讀模式
我為了調試一個子程序,花了很長時間。任然沒有調試完成。雖然判斷的條件只有4個。但是邏輯混亂,總是調試不成功。我想是不是應該有什么準確邏輯分析工具或者方法,于是我試著畫了一會子程序邏輯框圖。但是有點心情煩躁;蛟S是對學習邏輯框圖將要面臨的不確定性感到排斥,也或者是無從下手。但是如果邏輯框圖可以解決問題,就想學習一下。就是說產品的目的到邏輯框圖的形成流程;蛘呦犬嬛鞒绦蜻是先畫主程序。是依據指令流程還是邏輯流程??
回復

使用道具 舉報

ID:883242 發表于 2023-1-2 02:40 | 顯示全部樓層
把問題具體的貼出來,讓大家幫你分析。
回復

使用道具 舉報

ID:73992 發表于 2023-1-2 08:35 來自觸屏版 | 顯示全部樓層
asc鍵盤,按鍵按下產生通碼 按的時間長就會連續發送通碼。按鍵松開鍵盤發送二字節斷碼。不如A鍵按下鍵盤發送0x1c通碼,松開0xf0 0x1c兩個字節斷碼。數字鍵2,當shift鍵按下再按2 鍵盤發送@,shift松開時按下2鍵盤發送2。現在問題是shift鍵是否按下 是否斷開我分析不出邏輯重點。因為shift按下鍵盤發送0x12,再按2鍵,鍵盤發送@,再發送0xf0 2的斷碼。shift沒有松開的情況繼續下按3鍵,鍵盤發送#。shift鍵松開時,鍵盤發送0xf0 0x12,我憑盲調程序不成功,在紙上畫也找不到邏輯
回復

使用道具 舉報

ID:73992 發表于 2023-1-2 19:13 | 顯示全部樓層
SYSTEMSET:
       
        PUSHR0        EQU        0060H
        PUSHR1        EQU        0061H
        PUSHR2        EQU        0062H
        PUSHR3        EQU        0063H
        PUSHR4        EQU        0064H
        PUSHR5        EQU        0065H
        PUSHR6        EQU        0066H
        PUSHR7        EQU        0067H

        LCDCMDRAM        EQU        70H                        //        LCD12864寫子令程序暫存器
        LCDDATRAM        EQU        71H                        //        LCD12864寫數據程序暫存器
        KEYTONG0        EQU        72H                                //        鍵盤通碼存放地址
        KEYDUAN        EQU        73H                                //        鍵盤斷碼存放地址
        KEYASCI        EQU        74H                                //        鍵盤ASCII碼存放地址         
        KEYPAN        EQU        75H                                //        鍵盤有無輸入ASCII判斷地址        有則0X02
        KEYCMDPAN        EQU        76H                        //        鍵盤有無命令判斷地址
        KEYRAMPAN        EQU        77H                        //        鍵盤值是否被轉換判斷地址,有則
        KEYSHIFT0        EQU        78H                        //        shift鍵值存放地址
        KEYTONG1        EQU        79H
這里開始,鍵值已經在ACC中
keydat:       
MOV        PUSHR7,R7
MOV        R7,KEYDUAN       


KEYREA00:
        CJNE        A,#0XF0,KEYREA01
        MOV        KEYDUAN,#0XF0
        LJMP        KEYREAD1
KEYREA01:
        CJNE        R7,#0XF0,KEYREAD0
        MOV        KEYTONG1,A
        MOV        KEYDUAN,#0X00
        LJMP        KEYREAD1
KEYREAD0:       
        MOV        KEYTONG0,A
        MOV        KEYPAN,#0X02       
KEYREAD1:
        MOV        R7,PUSHR7
        POP ACC       
        RETI
KEYASCMD:
                MOV        PUSHR5,R5
                MOV        PUSHR6,R6
                MOV        PUSHR7,R7
                MOV        R5,KEYTONG1
                MOV        R6,KEYCMDPAN
                MOV        R7,KEYTONG0
                MOV        KEYPAN,#0X00
                CJNE        R6,#0X02,SHIFT
                CJNE        R5,#0X12,KEYMING
                MOV          KEYTONG1,#0X00
                MOV          KEYCMDPAN,#0X00
                MOV          KEYDUAN,#0X00
                LJMP        OUT
SHIFT:        CJNE        R7,#0X12,KEYX
                MOV        KEYCMDPAN,#0X02
                LJMP        OUT
KEYX:        CJNE        R7,#0X22,KEYY
                MOV        KEYASCI,#0X58
                AJMP        OUT1
KEYY:        CJNE        R7,#0X35,KEYZ
                MOV        KEYASCI,#0X59
                AJMP        OUT1
KEYZ:        CJNE        R7,#0X1A,KEY0
                MOV        KEYASCI,#0X5A
                AJMP        OUT1       
KEY0:        CJNE        R7,#0X45,KEY1
                MOV        KEYASCI,#0X30
                AJMP        OUT1
KEY1:        CJNE        R7,#0X16,KEY2
                MOV        KEYASCI,#0X31
                AJMP        OUT1       
KEY2:        CJNE        R7,#0X1E,KEY3
                MOV        KEYASCI,#0X32
                AJMP        OUT1
KEY3:        CJNE        R7,#0X26,KEY4
                MOV        KEYASCI,#0X33
                AJMP        OUT1       
KEY4:        CJNE        R7,#0X25,KEY5
                MOV        KEYASCI,#0X34
                AJMP        OUT1
KEY5:        CJNE        R7,#0X2E,KEY6
                MOV        KEYASCI,#0X35
                AJMP        OUT1       
KEY6:        CJNE        R7,#0X36,KEY7
                MOV        KEYASCI,#0X36
                AJMP        OUT1
KEY7:        CJNE        R7,#0X3D,KEY8
                MOV        KEYASCI,#0X37
                AJMP        OUT1       
KEY8:        CJNE        R7,#0X3E,KEY9
                MOV        KEYASCI,#0X38
                AJMP        OUT1
KEY9:        CJNE        R7,#0X46,OUT1
                MOV        KEYASCI,#0X39
                AJMP        OUT1
KEYMING:                         ;鍵盤命令處理程序        SHIFT組合鍵處理程序
SHIFT1:        CJNE        R7,#0X16,SHIFT2                          ;!
                MOV        KEYASCI,#0X21
                AJMP        OUT0
SHIFT2:        CJNE        R7,#0X1E,SHIFT3                          ;@
                MOV        KEYASCI,#0X40
                AJMP        OUT0
SHIFT3:        CJNE        R7,#0X26,SHIFT4                         ;#
                MOV        KEYASCI,#0X23
                AJMP        OUT0
SHIFT4:        CJNE        R7,#0X25,SHIFT5                          ;$
                MOV        KEYASCI,#0X24
                AJMP        OUT0
SHIFT5:        CJNE        R7,#0X2E,SHIFT6                          ;%                        
                MOV        KEYASCI,#0X25
                AJMP        OUT0
SHIFT6:        CJNE        R7,#0X36,SHIFT7                          ;^
                MOV        KEYASCI,#0X5E
                AJMP        OUT0
SHIFT7:        CJNE        R7,#0X3D,SHIFT8                          ;&
                MOV        KEYASCI,#0X26
                AJMP        OUT0
SHIFT8:        CJNE        R7,#0X3E,SHIFT9                        ;*
                MOV        KEYASCI,#0X2A
                AJMP        OUT0
SHIFT9:        CJNE        R7,#0X46,OUT1                          ;(
                MOV        KEYASCI,#0X28
                AJMP        OUT0
OUT0:        CJNE        R5,#0X12,OUT
                MOV        KEYCMDPAN,#0X00
                MOV        KEYTONG1,#0X00
                MOV        KEYPAN,#0X00
                LJMP        OUT
OUT1:       
OUT:        MOV        KEYPAN,#0X00
                MOV        R5,PUSHR5
                MOV        R6,PUSHR6
                MOV        R7,PUSHR7
                RET
MAIN:                                         //主程序                     
        LCALL        INIT
        LCALL        SYSTEMSET                              
D1:  
        MOV        PUSHR4,R4
        MOV        R4,KEYPAN
        CJNE        R4,#0X02,D3
        MOV        R4,PUSHR4
        LJMP        D2
D2:
        LCALL        KEYASCMD   
D3:
        MOV        DPTR,#1700H
        MOV        A,KEYASCI
        MOVX        @DPTR,A
        INC        DPTR
        MOV        A,KEYTONG0
        MOVX        @DPTR,A
        INC        DPTR
        MOV        A,KEYTONG1
        MOVX        @DPTR,A
        LCALL        LCD12864REDRAMADDR

        LJMP        D1
        RET
程序調試到,按下shift,再按其他的都正常。但松開shift,需要多按一次其他鍵,才能按其他鍵
回復

使用道具 舉報

ID:487569 發表于 2023-1-6 10:25 | 顯示全部樓層
你的代碼沒看,看看我的思路能不能給你帶來點啟發,若有不對的地方,請不要在意,嘿嘿。

shift_value         //shift通碼      
shift_value_duan         //shift斷碼        用于在無按鍵時判斷曾經是否按下過此按鍵

key_value         //普通按鍵通碼
key_value_duan         //普通按鍵斷碼  用于在無按鍵時判斷曾經是否按下過此按鍵

key_send                //最終要發送的鍵值

        shift按下 shift_value=shift通碼;shift_value_duan=shift斷碼   
        shift斷開 shift_value=0;
        |
        |
        普通按鍵按下 key_value =key通碼1?2?3?,key_value_duan = key斷碼1?2?3?;
        普通按鍵斷開 key_value =0;
        |
        |
       
情況一:       
if(shift_value==shift通碼)//有shift鍵
{
       
if(key_value ==0)
key_send=shift_value;//無其他按鍵按下,直接發送shift
                                                                                                                               
else if(key_value ==1)                               
key_send=!;       
                                       
else if(key_value ==2)                                                        
key_send=@;       
                         
else if(key_value ==3)
key_send=#;

}       

情況二:
if(shift_value==shift斷碼)//無shift鍵
{

if( shift_value_duan )//shift曾經按下過
{
        key_send=shift_value_duan;//發送shift斷碼;
        shift_value_duan=0;
}
else if(key_value==0)//無普通按鍵
{
        if(key_value_duan)//普通按鍵曾按下過
        {
                key_send=key_value_duan;//發送上次按下的普通鍵斷碼
                key_have_value=0;
        }
        else
        {
                key_send=0;//清除發送內容
        }
}
else if(key_value)
{
        key_send=key_value;//直接發送普通按鍵通碼
}


}


回復

使用道具 舉報

ID:73992 發表于 2023-1-7 23:02 | 顯示全部樓層
ZXWPL 發表于 2023-1-6 10:25
你的代碼沒看,看看我的思路能不能給你帶來點啟發,若有不對的地方,請不要在意,嘿嘿。

shift_va ...

感謝您的幫助,C語言我現在還沒學會,我畫程序框圖解決的問題。程序框圖真的有用,以后寫程序之前先畫框圖。感謝
回復

使用道具 舉報

ID:584814 發表于 2023-1-9 09:29 | 顯示全部樓層
理論上都要先畫框圖再寫,但由于多數寫的程序小且結構簡單,多在紙面略過了。
感覺 C 語言自帶框圖的樣子,易讀易懂效率低
回復

使用道具 舉報

ID:1061063 發表于 2023-1-13 16:15 來自觸屏版 | 顯示全部樓層
有啥好用的畫程序框圖的軟件嘛?每次動手畫紙上好麻煩啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国内精品久久久久久 | 色婷婷综合久久久中字幕精品久久 | 久久久精品网站 | 久久久国产精品入口麻豆 | 久久久av中文字幕 | 免费精品| 日韩精品人成在线播放 | 国产精品成人国产乱一区 | 久久国产精品-久久精品 | 精品久久中文字幕 | 国产精品毛片av | 天天干,夜夜操 | 久久99精品久久 | 99re6在线视频精品免费 | 91精品久久久久久久久中文字幕 | 亚洲国产精品一区二区www | 亚洲一区二区三区在线免费观看 | 国产精品久久久久久久久免费 | 日韩在线| 91网站在线观看视频 | 中文字幕二区三区 | 日本精品一区二区三区在线观看视频 | 精品视频成人 | 女朋友的闺蜜3韩国三级 | 男女性毛片 | 91大神新作在线观看 | 国产乱码精品1区2区3区 | 在线观看成人小视频 | 成年女人免费v片 | av黄色在线观看 | 超碰在线人人干 | 小川阿佐美pgd-606在线 | 国产精品无码永久免费888 | 密乳av| 伊人网在线看 | 黄色大片毛片 | 国产精品毛片无码 | 九九热国产视频 | 日韩有码一区二区三区 | 成人不卡 | 免费在线观看av网站 |