• 方案介紹
  • 附件下載
  • 推薦器件
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

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

2024/08/16
2191
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

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

共1個(gè)文件

題目:魔幻盒子

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

1.1 設(shè)計(jì)要求

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

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

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

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

2、發(fā)揮部分

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

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

1.2.1設(shè)計(jì)思路

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

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

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

1.2.2總體設(shè)計(jì)框圖

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

2.1 初始化定義

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

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

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

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

W=40????????????????????????????????????????? ??#定義初始四邊形的長(zhǎng)

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

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

VERT="|"

D=0

let W=$W+$W????????????????????????????????? ???#四邊形長(zhǎng)寬比為1:1.9

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

2.2draw_box畫(huà)圖函數(shù)

draw_box(){

BOX_HEIGHT=`expr $3 - 1`

BOX_WIDTH=`expr $4 - 1`

T_ROWS=`tput lines`????????? ????????????????????#獲取終端的寬? 行列寬長(zhǎng)

T_COLS=`tput cols`????????? ?????????????????????#獲取終端的長(zhǎng)

plot_char(){

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

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

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

count=1???????????????????????? ????????????????????#畫(huà)第一條豎線

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

plot_char $r $2 $VERT

let count=count+1

done

count=1???????????????????? ???????????#畫(huà)第二條豎線

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???????????????????????? ???????#畫(huà)第一條橫線

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

plot_char $1 $c $HORZ

let count=count+1

done

count=1?????????????????????? ?????????#畫(huà)第二條橫線

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????????????????????????? ?????#畫(huà)第一條豎線

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

plot_char $r $2 $VERT

let count=count+1

done

count=1???????????????????????????? ??#畫(huà)第二條豎線

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???????????????????????????? ??#畫(huà)第一條橫線

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

plot_char $1 $c $HORZ

let count=count+1

done

count=1???????????????????????????? ??#畫(huà)第二條橫線

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????????????????? #判斷是否實(shí)現(xiàn)立體化

count=1???????????????????????? ????????#畫(huà)第一條斜線

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?????????????????????????? ??????#畫(huà)第二條斜線

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????????????????????????? ???????#畫(huà)第三條斜線

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??????????????????????? ?????????#畫(huà)橫線

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??????????????????????? ????????#畫(huà)豎線

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四邊形四個(gè)角的ASCII字符和名字學(xué)號(hào)

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輸出語(yǔ)句部分

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

echo "please input the number:"

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

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

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

echo "d. D=1"???????????????????????????????? ????????#判斷是否實(shí)現(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)試過(guò)程

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

4? 功能測(cè)試

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

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

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

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

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

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

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

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

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

(7)立體可以改變顏色

5? 實(shí)訓(xùn)心得體會(huì)

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

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

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

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

附錄

附錄1:仿真波形圖

初始四邊形(40*30)

改變四邊形的大?。?0*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)盤(pán)下載地址及提取碼。

紛傳點(diǎn)擊用微信打開(kāi)即可,過(guò)程有點(diǎn)繁瑣請(qǐng)見(jiàn)諒。

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

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
PS2801-4-F3-A 1 NEC Electronics Group Transistor Output Optocoupler, 1-Element, 2500V Isolation,
$3.65 查看
MT28EW128ABA1HPC-0SIT 1 Micron Technology Inc Flash, 8MX16, 70ns, PBGA64, 11 X 13 MM, HALOGEN FREE AND ROHS COMPLIANT, LBGA-64

ECAD模型

下載ECAD模型
暫無(wú)數(shù)據(jù) 查看
SFH756V 1 Infineon Technologies AG LED Emitter, Through Hole Mount
$13.92 查看

相關(guān)推薦

方案定制

去合作
方案開(kāi)發(fā)定制化,2000+方案商即時(shí)響應(yīng)!