加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

嵌入式操作系統(tǒng)-魔幻盒子:使用shell腳本編寫程序,用ASCII碼字符設(shè)計一個長寬可變的四邊形

08/16 09:20
1452
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
實物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

題目:魔幻盒子

1? 系統(tǒng)設(shè)計

1.1 設(shè)計要求

1.1.1 設(shè)計任務(wù)

以VM ware虛擬機軟件和Red hat 9.0操作系統(tǒng)為平臺,使用shell腳本編寫程序,用ASCII碼字符設(shè)計一個長、寬可變的四邊形。要求使用linux shell編寫程序腳本(Bash風(fēng)格),并提供友好的的交互界面。

1.1.2 性能指標(biāo)要求

  1. 基本要求
  1. 四邊形的繪圖(40點*30點)
  2. 邊的ASCII字符可以在按下某按鍵的情況下可以修改(如從“-”-> “*”)
  3. 四邊形的四個角要求用不同的ASCII字符
  4. 四邊形的大小可變
  5. 四邊形中間輸出自己的姓名與學(xué)號
  6. 在按下某按鍵的情況下四邊形的顏色可變

2、發(fā)揮部分

在按下某按鍵實現(xiàn)四邊形的立體化。

1.2 設(shè)計思路及設(shè)計框圖

1.2.1設(shè)計思路

一開始選這個題目時,可以說是完全不懂。但是,通過這學(xué)期所學(xué)的嵌入式Ubuntu應(yīng)用編程實戰(zhàn)這本書以及按照老師給的要求去查資料,開始慢慢的了解實訓(xùn)所需要做的大概是怎么一回事,在linux系統(tǒng)中,利用畫圖函數(shù)draw_char控制ASCII碼字符畫出一個長寬可變,邊框符號可變,顏色可變和輸出自己學(xué)號姓名的四邊形,同時這個四邊形實現(xiàn)立體化。

在畫圖開始時,先把之前所畫的四邊形清除,所以必須先進行清屏。接著按照要求要使所畫的四邊形的初始大小為40點*30點,所以給四邊形的長和寬定義倆個初始量,分別為40和30,并且四邊形的大小可變,就需要給四邊形的長和寬倆個變量賦值,每畫一個四邊形就需要重新給長和寬賦值。然后改變四邊形的邊的ASCII字符,只需要給四條邊定義四個不同的變量。而改變四邊形的顏色,只需要調(diào)用哪個顏色的函數(shù),然后通過輸入選擇數(shù)字來改變四邊形的顏色。為控制不同的變化,則需要設(shè)定不同的case語句或if語句來進行相應(yīng)的變化。要想實現(xiàn)四邊形的立體化,需要在之前畫好的四邊形的基礎(chǔ)上在畫三條斜線,一條橫線和一條豎線共五條線來實現(xiàn)四邊形的立體化。

同時設(shè)置變量來實現(xiàn)四邊形立體化后改變大小。

1.2.2總體設(shè)計框圖

2? 各個模塊程序的設(shè)計

2.1 初始化定義

clear?????????????????????????????????????????? #清屏

R=5????????????????????????????????????????? ???#定義起始橫坐標(biāo)

C=10????????????????????????????????????????? ??#定義起始縱坐標(biāo)

H=30????????????????????????????????????????? ??#定義初始四邊形的寬

W=40????????????????????????????????????????? ??#定義初始四邊形的長

col=0?????????????????????????????????????????? #定義初始四邊形的顏色

HORZ="-"???????????????????????????????????? ???#定義初始四邊形邊ASCII字符

VERT="|"

D=0

let W=$W+$W????????????????????????????????? ???#四邊形長寬比為1:1.9

draw_box $R $C $H $W $col $HORZ $VERT

2.2draw_box畫圖函數(shù)

draw_box(){

BOX_HEIGHT=`expr $3 - 1`

BOX_WIDTH=`expr $4 - 1`

T_ROWS=`tput lines`????????? ????????????????????#獲取終端的寬? 行列寬長

T_COLS=`tput cols`????????? ?????????????????????#獲取終端的長

plot_char(){

echo -e "E[${1};${2}H"$3???? ???????????????????#啟用轉(zhuǎn)義序列,將光標(biāo)移動到$1和$2所定位處,輸出$3

}???????????????????????????????????? #設(shè)置顏色的格式: e[背景色;前景色;高亮m

echo -ne "E[3${5}m"?????????? #盒子的顏色不換行輸出可帶參數(shù)-e???? 打開反斜杠ESC轉(zhuǎn)義-E???? 取消反斜杠ESC轉(zhuǎn)義

count=1???????????????????????? ????????????????????#畫第一條豎線

for (( r=$1; count<=$BOX_HEIGHT; r++)); do

plot_char $r $2 $VERT

let count=count+1

done

count=1???????????????????? ???????????#畫第二條豎線

c=`expr $2 + $BOX_WIDTH`

for (( r=$1; count<=$BOX_HEIGHT; r++)); do

plot_char $r $c $VERT

let count=count+1

done

count=1???????????????????????? ???????#畫第一條橫線

for (( c=$2; count<=$BOX_WIDTH; c++)); do

plot_char $1 $c $HORZ

let count=count+1

done

count=1?????????????????????? ?????????#畫第二條橫線

r=`expr $1 + $BOX_HEIGHT`

for (( c=$2; count<=$BOX_WIDTH; c++)); do

plot_char $r $c $HORZ

let count=count+1

Done

2.3立體化程序

draw_box(){

BOX_HEIGHT=`expr $3 - 1`

BOX_WIDTH=`expr $4 - 1`

T_ROWS=`tput lines`

T_COLS=`tput cols`

plot_char(){

echo -e "E[${1};${2}H"$3

}

echo -ne "E[3${5}m"

count=1????????????????????????? ?????#畫第一條豎線

for (( r=$1; count<=$BOX_HEIGHT; r++)); do

plot_char $r $2 $VERT

let count=count+1

done

count=1???????????????????????????? ??#畫第二條豎線

c=`expr $2 + $BOX_WIDTH`

for (( r=$1; count<=$BOX_HEIGHT; r++)); do

plot_char $r $c $VERT

let count=count+1

done

count=1???????????????????????????? ??#畫第一條橫線

for (( c=$2; count<=$BOX_WIDTH; c++)); do

plot_char $1 $c $HORZ

let count=count+1

done

count=1???????????????????????????? ??#畫第二條橫線

r=`expr $1 + $BOX_HEIGHT`

for (( c=$2; count<=$BOX_WIDTH; c++)); do

plot_char $r $c $HORZ

let count=count+1

done

while [[ "$D" -gt 0 ]]; do????????????????? #判斷是否實現(xiàn)立體化

count=1???????????????????????? ????????#畫第一條斜線

temp=$2

for (( r=$1; count<=4; r--)); do

plot_char $r $temp $VERT

let count=count+1

let temp=temp+1

done

count=1?????????????????????????? ??????#畫第二條斜線

temp=`expr $2 + $BOX_WIDTH`

for (( r=$1; count<=4; r--)); do

plot_char $r $temp $VERT

let count=count+1

let temp=temp+1

done

count=1????????????????????????? ???????#畫第三條斜線

r=`expr $1 + $BOX_HEIGHT`

temp=`expr $2 + $BOX_WIDTH`

for (( r; count<=4; r--)); do

plot_char $r $temp $VERT

let count=count+1

let temp=temp+1

done

count=1??????????????????????? ?????????#畫橫線

r=`expr $1 - 4`

temp=`expr $2 + 4`

for (( temp; count<=$BOX_WIDTH; temp++)); do

plot_char $r $temp $HORZ

let count=count+1

done

count=1??????????????????????? ????????#畫豎線

r=`expr $1 - 4`

temp=`expr $2 + 4 + $BOX_WIDTH`

for (( r; count<=$BOX_HEIGHT; r++)); do

plot_char $r $temp $VERT

let count=count+1

done

plot_char `expr $1 - 4` `expr $2 + 4` E

plot_char `expr $1 - 4` `expr $2 + $BOX_WIDTH + 4` F

plot_char `expr $1 - 4 + $BOX_HEIGHT` `expr $2 + $BOX_WIDTH + 4` G

let D=D-1

done

echo -ne "E[0m"

P_ROWS=`expr $T_ROWS - 1`

echo -e "E[${P_ROWS};1H"

}

2.4四邊形四個角的ASCII字符和名字學(xué)號

plot_char $1 $2 A

plot_char $1 `expr $2 + $BOX_WIDTH` B

plot_char `expr $1 + $BOX_HEIGHT` $2 C

plot_char `expr $1 + $BOX_HEIGHT` `expr $2 + $BOX_WIDTH` D

plot_char `expr $1 + $3 / 2 - 1` `expr $2 + $4 / 2 - 5` 1852200224

plot_char `expr $1 + $3 / 2 + 1` `expr $2 + $4 / 2 - 5` lanweihai

2.5輸出語句部分

while [[ $n -eq 1 ]]; do

echo "please input the number:"

echo "1. please input the HEIGHT and WIDTH:"???? ?????#改變四邊形的長和寬

echo "2. please input the HORZ and VERT:"????????? ???#改變四邊形邊的ASCII字符

echo "3. please input the color:"???????????????????? #改變四邊形的顏色

echo "d. D=1"???????????????????????????????? ????????#判斷是否實現(xiàn)立體

echo e. Exit???????????????????????????????? ?????????#退出

echo "please input the number: "

read NUM

case $NUM in

$n1)

echo "please input the HEIGHT and WIDTH:"

read HEIGHT WIDTH

H=$HEIGHT W=$WIDTH

clear

draw_box $R $C $H $W $col $HORZ $VERT ;;

$n2)

echo "please input the HORZ and VERT:"

read HORZ VERT

HORZ=$HORZ VERT=$VERT

clear

draw_box $R $C $H $W $col $HORZ $VERT ;;

$n3)

echo "please input the color:"

echo "1.red 2.green 3.yellow 4.blue 5.yred 6.bluness 7.white "

echo -ne "E[3${5}m"

read COLOR_NUM

col=$COLOR_NUM

clear

draw_box $R $C $H $W $col $HORZ $VERT ;;

$d)

echo "1.red 2.green 3.yellow 4.blue 5.yred 6.bluness 7.white "

read COLOR_NUM

col=$COLOR_NUM

D=1 ;;

$e) exit;;

esac

clear

draw_box $R $C $H $W $col $HORZ $VERT

3? 調(diào)試過程

我在實訓(xùn)的過程中碰到許多問題,因為是剛學(xué)的嵌入式編程,對很多函數(shù)都不是很了解,出現(xiàn)了比較多的問題。比如經(jīng)常會顯示/bash錯誤。經(jīng)過多次修改,知道了這個一般是我們在計算函數(shù)中,加了多余的空格或者其他的字符,或者是‘’符號中不小心添加了其他的字符,讓計算函數(shù)出錯。借鑒了以前學(xué)長的程序,在此基礎(chǔ)的完成了基本功能和擴展功能。

4? 功能測試

4.1 測試儀器與設(shè)備

PC機一臺, VMwareWorkstion軟件以及READHAT9.0操作系統(tǒng)。

4.2 性能指標(biāo)測試

(1)實現(xiàn)了四邊形40*30的繪圖。

(2)邊的ASCII字符可以隨意改變。

(3)四邊形的四個角分別用了不同的ASCII字符來表示

(4)四邊形的長和寬可以任意改變大小

(5)四邊形的中間輸出了自己的學(xué)號和姓名。

(6)實現(xiàn)了四邊形的立體化

(7)立體可以改變顏色

5? 實訓(xùn)心得體會

本次做的嵌入式程序設(shè)計實訓(xùn)---魔幻盒子,是利用shell腳本基礎(chǔ)功能實現(xiàn)的。經(jīng)過了兩周的嵌入式實訓(xùn),讓我對嵌入式Ubuntu應(yīng)用編程實戰(zhàn)這門課有了更深的認(rèn)識,同時也是我學(xué)會了許多關(guān)于嵌入式shell語句的知識。這是第一次學(xué)習(xí)有關(guān)于嵌入式的課程,有很多不懂的地方,但通過各種渠道還是有了解到許多關(guān)于這方面的知識,做出來后也有一定的成就感。,

在做實訓(xùn)的過程中,我意識到了知識儲備的重要性,只有對嵌入式知識有一定程度的了解,才能夠探索更深層次的東西,并能夠解決問題。經(jīng)過嵌入式實訓(xùn)后,發(fā)現(xiàn)還有很多欠缺的知識,希望通過努力,讓自己的知識儲備能更厚實。

這次的嵌入式實訓(xùn)對我來說是一個全新的挑戰(zhàn),它是通過這學(xué)期所學(xué)的Liunx系統(tǒng)來設(shè)計和操作的,在寫函數(shù)的時候,我遇到了很多問題,同時也了解了shell語句的嚴(yán)謹(jǐn),稍微有點錯誤就會報錯。以前一直覺得linux系統(tǒng)沒什么作用,程序又難以理解,最重要的是不夠人性化,不能使用鼠標(biāo)進行操作。復(fù)制,移動等基本操作都要使用指令來完成,對我來說感到極其不適應(yīng)。經(jīng)過這次的實訓(xùn),我對linux操作系統(tǒng)有了重新的認(rèn)識,程序能直接在終端運行,無需通過第三方軟件來實現(xiàn),想要對系統(tǒng)進行修改也更方便容易。

這次的實訓(xùn)讓自己再一次的感受到了自己在程序設(shè)計上的知識儲備不足,在今后的學(xué)習(xí)中,我要更加注重理論知識的學(xué)習(xí),希望能懂得更多的知識,并且要理解透徹,能夠把知識為我所用。我會努力加油的!感謝老師和同學(xué)給予我的幫助!

附錄

附錄1:仿真波形圖

初始四邊形(40*30)

改變四邊形的大小(20*30)

改變四邊形的邊的ASCII字符

改變四邊形的顏色

四邊形立體化并改變顏色

附錄2:程序清單

#!/bin/bash

draw_box(){

BOX_HEIGHT=`expr $3 - 1`

BOX_WIDTH=`expr $4 - 1`

T_ROWS=`tput lines`

T_COLS=`tput cols`

plot_char(){

echo -e "E[${1};${2}H"$3

}

echo -ne "E[3${5}m"

count=1

for (( r=$1; count<=$BOX_HEIGHT; r++)); do

plot_char $r $2 $VERT

let count=count+1

Done

count=1

c=`expr $2 + $BOX_WIDTH`

for (( r=$1; count<=$BOX_HEIGHT; r++)); do

plot_char $r $c $VERT

let count=count+1

Done

count=1

for (( c=$2; count<=$BOX_WIDTH; c++)); do

plot_char $1 $c $HORZ

let count=count+1

Done

count=1

r=`expr $1 + $BOX_HEIGHT`

for (( c=$2; count<=$BOX_WIDTH; c++)); do

plot_char $r $c $HORZ

let count=count+1

done

while [[ "$D" -gt 0 ]]; do

count=1

temp=$2

for (( r=$1; count<=4; r--)); do

plot_char $r $temp $VERT

let count=count+1

let temp=temp+1

done

count=1

temp=`expr $2 + $BOX_WIDTH`

for (( r=$1; count<=4; r--)); do

plot_char $r $temp $VERT

let count=count+1

let temp=temp+1

done

count=1

r=`expr $1 + $BOX_HEIGHT`

temp=`expr $2 + $BOX_WIDTH`

for (( r; count<=4; r--)); do

plot_char $r $temp $VERT

let count=count+1

let temp=temp+1

done

count=1

r=`expr $1 - 4`

temp=`expr $2 + 4`

for (( temp; count<=$BOX_WIDTH; temp++)); do

plot_char $r $temp $HORZ

let count=count+1

done

count=1

r=`expr $1 - 4`

temp=`expr $2 + 4 + $BOX_WIDTH`

for (( r; count<=$BOX_HEIGHT; r++)); do

plot_char $r $temp $VERT

let count=count+1

done

plot_char `expr $1 - 4` `expr $2 + 4` E

plot_char `expr $1 - 4` `expr $2 + $BOX_WIDTH + 4` F

plot_char `expr $1 - 4 + $BOX_HEIGHT` `expr $2 + $BOX_WIDTH + 4` G

let D=D-1

done

plot_char $1 $2 A

plot_char $1 `expr $2 + $BOX_WIDTH` B

plot_char `expr $1 + $BOX_HEIGHT` $2 C

plot_char `expr $1 + $BOX_HEIGHT` `expr $2 + $BOX_WIDTH` D

plot_char `expr $1 + $3 / 2 - 1` `expr $2 + $4 / 2 - 5` 1852200224

plot_char `expr $1 + $3 / 2 + 1` `expr $2 + $4 / 2 - 5` lanweihai

echo -ne "E[0m"

P_ROWS=`expr $T_ROWS - 1`

echo -e "E[${P_ROWS};1H"

}

clear

R=5

C=10

H=30

W=40

col=0

HORZ="-"

VERT="|"

D=0

let W=$W+$W

draw_box $R $C $H $W $col $HORZ $VERT

n1=1

n2=2

n3=3?????????????????????????????? ???????????????????????????????????????????????????????????????????????????????d='d'

e='e'

n=1;

while [[ $n -eq 1 ]]; do

echo "please input the number:"

echo "1. please input the HEIGHT and WIDTH:"

echo "2. please input the HORZ and VERT:"

echo "3. please input the color:"

echo "d. D=1"

echo e. exit

echo "please input the number: "

read NUM

case $NUM in

$n1)

echo "please input the HEIGHT and WIDTH:"

read HEIGHT WIDTH

H=$HEIGHT W=$WIDTH

clear

draw_box $R $C $H $W $col $HORZ $VERT ;;

$n2)

echo "please input the HORZ and VERT:"

read HORZ VERT

HORZ=$HORZ VERT=$VERT

clear

draw_box $R $C $H $W $col $HORZ $VERT ;;

$n3)

echo "please input the color:"

echo "1.red 2.green 3.yellow 4.blue 5.yred 6.bluness 7.white "

echo -ne "E[3${5}m"

read COLOR_NUM

col=$COLOR_NUM

clear

draw_box $R $C $H $W $col $HORZ $VERT ;;

$d)

echo "1.red 2.green 3.yellow 4.blue 5.yred 6.bluness 7.white "

read COLOR_NUM

col=$COLOR_NUM

D=1 ;;

$e) exit;;

esac

clear

draw_box $R $C $H $W $col $HORZ $VERT

done;

exit 0

需要完整的資料可在資源里下載。

需要完整的資料可在我的資源里下載,也可以加入我的紛傳圈子,里面有資源壓縮包的百度網(wǎng)盤下載地址及提取碼。

紛傳點擊用微信打開即可,過程有點繁瑣請見諒。

  • 有需要資料的可了解一下.docx

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
ABS07-32.768KHZ-6-4-T 1 Abracon Corporation CRYSTAL 32.7680KHZ 6PF SMD

ECAD模型

下載ECAD模型
$3.72 查看
G3VM-61VY2(TR) 1 OMRON Corporation Transistor Output SSR,

ECAD模型

下載ECAD模型
$13.94 查看
FTLF8528P3BNV 1 Finisar Corporation Transceiver, 840nm Min, 860nm Max, 8500Mbps(Tx), 8500Mbps(Rx), LC Connector, Panel Mount, ROHS COMPLIANT, PACKAGE-20
$236.73 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜