Bascom 3
Bascom 3
)(Bascom
ﻣﻘﺪﻣﻪ:
در ﺟﻠﺴﻪ ﻗﺒﻞ ﻛﺪ ﻧﻮﻳﺴﻲ در ﻣﺤﻴﻂ Bascomرا آﻏﺎز ﻛﺮده و دو ﭘﺮوژه ﺳﺎده )ﭼﺸﻤﻜﺰن و ﻛﻠﻴﺪ( را
ﻃﺮاﺣﻲ و ﭘﻴﺎده ﺳﺎزي ﻛﺮدﻳﻢ .در اﻳﻦ ﺟﻠﺴﻪ ﻗﺼﺪ دارﻳﻢ ﺑﺎ ورودي /ﺧﺮوﺟﻲ ﻫﺎي ﭘﻴﺸﺮﻓﺘﻪ ﺗﺮ ﻣﺜﻞ ﻛﻲ ﭘﺪ و LCD
ﻛﺎراﻛﺘﺮي آﺷﻨﺎ ﺷﻮﻳﻢ .اﺻﻮﻻً ﻳﻚ ﺳﻴﺴﺘﻢ ﻛﺎﻣﭙﻴﻮﺗﺮي ﻛﻮﭼﻚ ﻛﻪ ﺑﻪ آن ﻛﻨﺴﻮل ﻧﻴﺰ ﮔﻔﺘﻪ ﻣﻲ ﺷﻮد در ﺳﺎده ﺗﺮﻳﻦ
ﺣﺎﻟﺖ از ﻳﻚ ورودي )ﻣﺜﻞ ﻛﻲ ﭘﺪ( و ﻳﻚ ﺧﺮوﺟﻲ )ﻣﺜﻞ (LCDﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ؛ ﻫﻤﺎﻧﻨﺪ ﻳﻚ ﻣﺎﺷﻴﻦ ﺣﺴﺎب
ﺟﻴﺒﻲ ﻛﻮﭼﻚ .ﺑﺎ اﻳﻦ ﺗﻔﺎوت ﻛﻪ ﻣﻴﻜﺮوﻛﻨﺘﺮﻟﺮ ﺑﺮﻧﺎﻣﻪ ﭘﺬﻳﺮ ﺑﻮده و ﻗﺎﺑﻠﻴﺖ ﺗﺒﺪﻳﻞ ﺑﻪ ﻫﺮ دﺳﺘﮕﺎﻫﻲ ﻣﺜﻞ ﻣﺎﺷﻴﻦ
ﺣﺴﺎب ،ﻗﻔﻞ رﻣﺰ دﻳﺠﻴﺘﺎﻟﻲ ،ﻛﻨﺘﺮل از راه دور و ...را دارا ﻣﻲ ﺑﺎﺷﺪ.
2 AVR Learning Book
LCD
ﺳﺎده ﺗﺮﻳﻦ اﺑﺰار ﻧﻤﺎﻳﺶ اﻃﻼﻋﺎت ﺧﺮوﺟﻲ LDC ،ﻫﺎ و Seven Segmentﻫﺎ ﻣﻲ ﺑﺎﺷﻨﺪ .ﻋﻤﻮﻣﺎً از LCD
ﻫﺎ ﺑﻪ دﻟﻴﻞ ﻗﺎﺑﻠﻴﺖ ﻧﻤﺎﻳﺶ ﺗﻤﺎم ﺣﺮوف و اﻋﺪاد اﻧﮕﻠﻴﺴﻲ و ﺳﺎدﮔﻲ ارﺗﺒﺎط دﻫﻲ ﺑﻴﺸﺘﺮ از ﻧﻤﺎﻳﺸﮕﺮ ﻫﺎي ﻫﻔﺖ
ﻗﺴﻤﺘﻲ اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد .در ﻣﺤﻴﻂ ﺑﺴﻜﺎم ﺗﻮاﺑﻊ زﻳﺎدي ﺑﺮاي ﻛﺎر ﺑﺎ LCDدر ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه اﺳﺖ وﻟﻲ ﻣﺘﺎﺳﻔﺎﻧﻪ
ﻛﺪ زﻳﺎدي ﺗﻮﻟﻴﺪ ﻛﺮده و ﺑﻪ ﺳﺮﻋﺖ ﺣﺎﻓﻈﻪ ﻣﻴﻜﺮو را ﭘﺮ ﻣﻲ ﻛﻨﺪ ،از ﻃﺮﻓﻲ ﺑﺴﻜﺎم ﻳﻚ ﻧﺮم اﻓﺰار Third partyﺑﻮده
و ﻧﺴﺨﻪ Demoي آن اﺟﺎزه ﻛﺎﻣﭙﺎﻳﻞ ﺑﻴﺶ از 4Kﻛﺪ را ﻧﻤﻲ دﻫﺪ و ﻧﻴﺰ ﺑﺎ ﻧﺴﺨﻪ دﻣﻮي آن ﺳﺎﺧﺖ دﺳﺘﮕﺎه ﻫﺎي
ﺗﺠﺎري ﻣﻤﻨﻮع اﺳﺖ .ﻣﺘﺎﺳﻔﺎﻧﻪ اﻣﺮوزه در اﻳﺮان اﻓﺮاد و ﺳﺎﻳﺖ ﻫﺎي ﺑﻴﺸﻤﺎري اﻗﺪام ﺑﻪ ﺗﻮﺿﻴﺢ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ ﻧﺴﺨﻪ ﻓﻮل
اﻳﻦ ﻧﺮم اﻓﺰار و ﻧﺮم اﻓﺰار ﻫﺎي ﻣﺸﺎﺑﻪ ﻣﻲ ﻛﻨﻨﺪ ﻛﻪ ﺑﺎﻋﺚ ﺷﺮﻣﺴﺎري اﺳﺖ.
LCDﻫﺎي ﻛﺎراﻛﺘﺮي اﻧﻮاع ﻣﺨﺘﻠﻔﻲ دارﻧﺪ وﻟﻲ ﺳﺎده ﺗﺮﻳﻦ و ﭘﺮ ﻛﺎرﺑﺮد ﺗﺮﻳﻦ آﻧﻬﺎ دو ﺳﻄﺮ و 16ﺳﺘﻮن
دارد ﻛﻪ در ﺷﻜﻞ زﻳﺮ ﺗﺼﻮﻳﺮ ﻳﻜﻲ از آﻧﻬﺎ را ﻣﺸﺎﻫﺪه ﻣﻲ ﻓﺮﻣﺎﻳﻴﺪ:
اﻳﻦ ﻧﻤﺎﻳﺸﮕﺮ ﻫﺎي ﻛﺮﻳﺴﺘﺎل ﻣﺎﻳﻊ 16ﺳﻴﻢ ارﺗﺒﺎﻃﻲ دارﻧﺪ ﻛﻪ ﺳﻴﻢ ﻫﺎي 1و 1ﺑﻪ ﺗﺮﺗﻴﺐ ﺗﻐﺬﻳﻪ – و +و
ﺳﻴﻢ ﺷﻤﺎره 3ﻛﻨﺘﺮل ﻛﻨﺘﺮاﺳﺖ ﻧﻤﺎﻳﺸﮕﺮ و دو ﺳﻴﻢ 15و 16ﻧﻴﺰ ﺗﻐﺬﻳﻪ Back Lightﻳﺎ ﭼﺮاغ ﭘﺸﺖ ﻧﻤﺎﻳﺸﮕﺮ
ﻣﻲ ﺑﺎﺷﻨﺪ .ﺳﻴﻢ ﻫﺎي 4ﺗﺎ 14دﻳﺘﺎ ﺑﻮده و ﺑﺎﻳﺴﺘﻲ ﺑﻪ ﻣﻴﻜﺮو ﻣﺘﺼﻞ ﺷﻮﻧﺪ .اﻟﺒﺘﻪ ﺑﺎ ﺗﺪاﺑﻴﺮي ﻛﻪ در ﺑﺴﻜﺎم ﺻﻮرت
ﮔﺮﻓﺘﻪ ﺷﺪه از ﻣﻴﺎن اﻳﻦ 11ﺳﻴﻢ دﻳﺘﺎ ﺗﻌﺪاد 6ﺳﻴﻢ اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد و ﺑﻘﻴﻪ ﺑﻼ اﺳﺘﻔﺎده اﻧﺪ.
Avr64.com
3 AVR Learning Book
در ﺷﻜﻞ زﻳﺮ ﭘﺎﻳﻪ ﻫﺎي اﻳﻦ ﻧﻮع LCDدر ﻣﺤﻴﻂ Kicadﻣﺸﺎﻫﺪه ﻣﻲ ﺷﻮد KiCad .ﻳﻚ ﻧﺮم اﻓﺰار راﻳﮕﺎن
ﺑﺮاي ﺗﺮﺳﻴﻢ ﺷﻤﺎﺗﻴﻚ ﻣﺪارات اﻟﻜﺘﺮوﻧﻴﻜﻲ ﻣﻲ ﺑﺎﺷﺪ ﻛﻪ ﺑﺰودي آﻣﻮزش آن ﺗﻬﻴﻪ ﺧﻮاﻫﺪ ﺷﺪ.
در ﺷﻜﻞ ﺑﺎﻻ ﭘﺎﻳﻪ ﻫﺎي 15و 16ﻣﺮﺑﻮط ﺑﻪ ﺑﻚ ﻻﻳﺖ ﻧﻤﺎﻳﺶ داده ﻧﺸﺪه اﻧﺪ .ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺑﺮاي
روﺷﻦ ﺷﺪن ﭼﺮاغ ﭘﺸﺖ ﺻﻔﺤﻪ ﭘﺎﻳﻪ 16را ﺑﻪ زﻣﻴﻦ و ﭘﺎﻳﻪ 15را ﺑﻪ +5وﻟﺖ ﻣﺘﺼﻞ ﻛﻨﻴﺪ .ﺑﺮاي روﺷﻦ ﺷﺪن ﻣﺎژول
اﺻﻠﻲ LCDﻧﻴﺰ ﭘﺎﻳﻪ 1را ﺑﻪ زﻣﻴﻦ و ﭘﺎﻳﻪ 2را ﺑﻪ +5وﻟﺖ ﻣﺘﺼﻞ ﻛﻨﻴﺪ .ﭘﺎﻳﻪ ﺷﻤﺎره 3ﻧﻴﺰ ﻣﺮﺑﻮط ﺑﻪ درﺧﺸﻨﺪﮔﻲ
ﻛﺎراﻛﺘﺮﻫﺎ ﺑﻮده و ﻋﻤﻮﻣﺎً ﺗﻮﺳﻂ ﻳﻚ ﭘﺘﺎﻧﺴﻴﻮﻣﺘﺮ 10Kﺑﻪ زﻣﻴﻦ وﺻﻞ ﻣﻲ ﺷﻮد .ﭘﺎﻳﻪ ﺷﻤﺎره 5ﺑﻪ ﻧﺎم RWدر
ﺻﻮرﺗﻲ ﻛﻪ ﺑﻪ زﻣﻴﻦ وﺻﻞ ﺷﻮد ﻣﺎژول LCDدر ﺣﺎﻟﺖ ﻧﻮﺷﺘﻦ ﻗﺮار ﻣﻲ ﮔﻴﺮد و در ﺣﺎﻟﺘﻲ ﻛﻪ ﺑﻪ ) VCCﻳﺎ ﻫﻤﺎن
(+5ﻣﺘﺼﻞ ﮔﺮدد LCDدر ﺣﺎﻟﺖ ﺧﻮاﻧﺪن ﻗﺮار ﻣﻲ ﮔﻴﺮد ﻛﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻋﺪم اﺳﺘﻔﺎده ﺣﺎﻟﺖ دوم اﻳﻦ ﭘﺎﻳﻪ ﻫﻤﻴﺸﻪ
ﺑﻪ زﻣﻴﻦ وﺻﻞ ﻣﻲ ﺷﻮد ﺗﺎ LCDﻫﻤﻴﺸﻪ در ﺣﺎﻟﺖ ﻧﻮﺷﺘﻦ ﺑﺎﺷﺪ .در ﺑﺴﻜﺎم ﭘﺎﻳﻪ ﻫﺎي 4و 6و 11ﺗﺎ 14ﻛﻪ 6ﭘﺎﻳﻪ
ﻣﻲ ﺷﻮﻧﺪ ﺑﻪ ﻣﻴﻜﺮو ﻣﺘﺼﻞ ﺷﺪه و ﺑﻪ دﻟﻴﻞ اﻳﻨﻜﻪ ﺑﺴﻜﺎم ﻳﻚ زﺑﺎن ﺳﻄﺢ ﺑﺎﻻ ﻣﻲ ﺑﺎﺷﺪ و ﻛﺎرﺑﺮ را از ﺟﺰﺋﻴﺎت ﺳﺨﺖ
اﻓﺰار دور ﻣﻲ ﻛﻨﺪ ﻋﻤﻠﻜﺮد اﻳﻦ ﭘﺎﻳﻪ ﻫﺎ را ﺗﻮﺿﻴﺢ ﻧﻤﻲ دﻫﻴﻢ و آن را ﺑﻪ ﺳﺮي ﻣﻘﺎﻻت آﻣﻮزش Assembly
اﺧﺘﺼﺎص ﻣﻲ دﻫﻴﻢ.
در ﺑﺴﻜﺎم ﭘﺎﻳﻪ ﻫﺎي 4و 6و 11ﺗﺎ 14را ﻣﻲ ﺗﻮان ﺑﻪ ﻫﺮ ﭘﻮرﺗﻲ از ﻣﻴﻜﺮو ﻣﺘﺼﻞ ﻛﺮد .ﻣﺎ در اﻳﻨﺠﺎ ﭘﺎﻳﻪ
ﻫﺎي LCDرا ﺑﻪ ﭘﻮرت Dﻣﻴﻜﺮو ﻣﺘﺼﻞ ﻣﻲ ﻛﻨﻴﻢ.
Avr64.com
4 AVR Learning Book
در ﺷﻜﻞ زﻳﺮ ﻃﺮﻳﻘﻪ ﻟﺤﻴﻢ ﭘﻴﻦ ﻫﺪر ﺑﻪ LDCو ﭼﻴﺪﻣﺎن ﻗﻄﻌﺎت ﭘﺮوژه ارﺗﺒﺎط ﺑﺎ LCDﺑﺮ روي Bread
Boardﻣﺸﺎﻫﺪه ﻣﻲ ﺷﻮد:
ﭘﺲ
از ﺑﺴﺘﻦ ﻓﻴﺰﻳﻜﻲ ﻣﺪار ﻧﻮﺑﺖ ﺑﻪ ﭘﻴﺎده ﺳﺎزي ﺑﺮﻧﺎﻣﻪ آن در ﻣﺤﻴﻂ ﺑﺴﻜﺎم ﻣﻲ رﺳﺪ .اﻣﺮوز ﺑﺎ ﻗﺴﻤﺘﻲ از ﺑﺴﻜﺎم آﺷﻨﺎ
ﻣﻲ ﺷﻮﻳﻢ ﻛﻪ ﺗﻮﺳﻂ آن ﻣﻲ ﺗﻮان ﺑﺮﺧﻲ از ﺗﻨﻈﻴﻤﺎت را ﺑﻪ ﺻﻮرت ﮔﺮاﻓﻴﻜﻲ اﻧﺠﺎم داد و از ﻧﻮﺷﺘﻦ ﻛﺪ ﻫﺎي اﺿﺎﻓﻲ
در ﺑﺮﻧﺎﻣﻪ ﺟﻠﻮﮔﻴﺮي ﺑﻪ ﻋﻤﻞ آورد .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر اﺑﺘﺪا Fileو ﺳﭙﺲ Newرا ﺑﺰﻧﻴﺪ ﺗﺎ ﻳﻚ ﻓﺎﻳﻞ ﺟﺪﻳﺪ ﺑﺎز ﺷﻮد.
ﺳﭙﺲ از ﻣﻨﻮي Optionsروي ﮔﺰﻳﻨﻪ Compilerو ﺳﭙﺲ روي Chipﻳﺎ LCDﻛﻠﻴﻚ ﻛﻨﻴﺪ؛ ﭘﻨﺠﺮه اي ﻣﻄﺎﺑﻖ
ﺷﻜﻞ زﻳﺮ ﺑﺎز ﻣﻲ ﺷﻮد .در اﻳﻦ ﭘﻨﺠﺮه در ﺳﺮﺑﺮگ LCDﺗﻨﻈﻴﻤﺎت ذﻳﻞ را اﻋﻤﺎل ﻛﻨﻴﺪ.
Avr64.com
5 AVR Learning Book
ﭘﻨﺠﺮه Optionsرا OKﻛﺮده و ﺑﻪ ﺻﻔﺤﻪ ﻛﺪ ﻧﻮﻳﺴﻲ ﺑﺴﻜﺎم ﺑﺎز ﻣﻴﮕﺮدﻳﻢ .ﻣﻄﺎﺑﻖ ﺷﻜﻞ زﻳﺮ در ﺧﻂ اول
دﺳﺘﻮر Clsﺑﻪ ﻣﻌﻨﺎي ﭘﺎك ﻛﺮدن ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ و در ﺧﻂ ﺑﻌﺪي دﺳﺘﻮر Lcdو در ﺟﻠﻮي آن در داﺧﻞ “ رﺷﺘﻪ
ﻣﻮرد ﻧﻈﺮ را وارد ﻣﻲ ﻛﻨﻴﻢ .ﺑﺎ زدن ﻛﻠﻴﺪ F7ﺑﺮﻧﺎﻣﻪ ﻛﺎﻣﭙﺎﻳﻞ ﺷﺪه و ﺑﺎ زدن ﻛﻠﻴﺪ F4ﻣﺤﻴﻂ ﭘﺮوﮔﺮﻣﺮ ﺑﺎز ﻣﻲ ﺷﻮد
ﻛﻪ ﻣﻲ ﺗﻮاﻧﻴﺪ ﺑﺮﻧﺎﻣﻪ را داﺧﻞ آي ﺳﻲ آﭘﻠﻮد ﻧﻤﺎﻳﻴﺪ.
Avr64.com
6 AVR Learning Book
ﭘﺲ از ﻗﺮار دادن آي ﺳﻲ روي ﺗﺨﺘﻪ آزﻣﺎﻳﺶ و اﺗﺼﺎل ﺗﻐﺬﻳﻪ ﺑﺎﻳﺪ ﺧﺮوﺟﻲ زﻳﺮ را داﺷﺘﻪ ﺑﺎﺷﻴﺪ ،در
ﺻﻮرﺗﻲ ﻛﻪ ﺧﻂ ﺑﺎﻻي ﻧﻤﺎﻳﺸﮕﺮ ﺑﻪ ﺻﻮرت ﺗﻌﺪاد زﻳﺎدي ﻣﺴﺘﻄﻴﻞ روﺷﻦ ﺷﺪه ﺑﻮد و ﻳﺎ ﻫﻴﭻ ﭼﻴﺰي ﻧﻤﺎﻳﺶ داده
ﻧﻤﻲ ﺷﺪ ﭘﺘﺎﻧﻴﺴﻮﻣﺘﺮ را ﻛﻤﻲ ﺑﭽﺮﺧﺎﻧﻴﺪ.
در ﻣﺤﻴﻂ ﺑﺴﻜﺎم دﺳﺘﻮرات زﻳﺎدي ﺑﺮاي ﻛﺎر ﺑﺎ LCDدر ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه اﻧﺪ .ﻳﻜﻲ از اﻳﻦ دﺳﺘﻮرات
Cursor offﻣﻲ ﺑﺎﺷﺪ ﻛﻪ ﻣﻜﺎن ﻧﻤﺎي LCDرا ﻛﻪ ﻋﻤﻮﻣﺎً ﺑﻪ ﺻﻮرت _ اﺳﺖ ﺧﺎﻣﻮش ﻣﻲ ﻛﻨﺪ .دﺳﺘﻮر ﺑﻌﺪي
cursor onاﺳﺖ ﻛﻪ ﻣﻜﺎن ﻧﻤﺎ را روﺷﻦ ﻣﻲ ﻛﻨﺪ .دﺳﺘﻮرات cursor blinkو cursor noblinkﻧﻴﺰ
ﺳﺒﺐ ﭼﺸﻤﻜﺰدن و ﻋﺪم ﭼﺸﻤﻜﺰدن ﻣﻜﺎن ﻧﻤﺎ ﻣﻲ ﺷﻮﻧﺪ.
Avr64.com
7 AVR Learning Book
ﻳﻜﻲ از دﺳﺘﻮرات ﺗﺮﻛﻴﺒﻲ ﻛﻪ ﺑﺮاي اﻓﻜﺖ ﻫﺎي ﻣﺘﻦ در Bascomﺗﺪارك دﻳﺪه ﺷﺪه اﺳﺖ ﺟﻔﺖ دﺳﺘﻮر
shiftlcd rightو shiftlcd leftﻣﻲ ﺑﺎﺷﻨﺪ ﻛﻪ ﺑﺎﻋﺖ ﺷﻴﻔﺖ ﻣﺘﻦ ﺑﻪ ﭼﭗ و راﺳﺖ ﺷﺪه و ﺣﺎﻟﺘﻲ ﻣﺎﻧﻨﺪ ﺗﺎﺑﻠﻮ
روان را در ﻧﻤﺎﻳﺸﻜﺮ ﭘﺪﻳﺪي ﻣﻲ آورﻧﺪ .اﻟﺒﺘﻪ ﻫﺮ ﻛﺪام از اﻳﻦ دﺳﺘﻮرات ﺑﺎ ﻫﺮ ﺑﺎر اﺟﺮا ﻣﺘﻦ ﻣﻮﺟﻮد در LCDرا ﻓﻘﻂ
ﻳﻚ ﻛﺎراﻛﺘﺮ ﺟﺎﺑﺠﺎ ﻣﻲ ﻛﻨﻨﺪ و ﺑﺮاي اﻳﺠﺎد ﺣﺎﻟﺖ روﻧﺪه ﺑﺎﻳﺪ در ﻳﻚ ﺣﻠﻘﻪ ﻣﺤﺪود و ﺑﺎ ﺗﺎﺧﻴﺮ ﻣﺸﺨﺼﻲ ﺑﻪ ﻛﺎر روﻧﺪ.
در ﻣﺜﺎل ﺑﻌﺪي ﻣﺘﻦ Testرا ﺑﻪ ﺳﻤﺖ راﺳﺖ ﻧﻤﺎﻳﺸﮕﺮ و ﺑﻪ اﻧﺪازه 10ﻛﺎراﻛﺘﺮ ﺷﻴﻔﺖ ﻣﻲ دﻫﻴﻢ و ﭘﺲ از 2ﺛﺎﻧﻴﻪ
دوﺑﺎره ﺑﻪ ﺟﺎي اول ﺑﺎز ﻣﻴﮕﺮداﻧﻴﻢ.
در ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ ﻳﻚ ﻣﺘﻐﻴﺮ از ﻧﻮع ﺑﺎﻳﺖ ﺗﻌﺮﻳﻒ ﻛﺮده اﻳﻢ ﻛﻪ ﺑﺮاي ﺷﻤﺎرﻧﺪه ﺑﻪ ﻛﺎر ﻣﻲ رود .در اﻳﻦ ﺑﺮﻧﺎﻣﻪ
Forاول ﻣﺠﻤﻮﻋﻪ دﺳﺘﻮرات Shiftlcd Rightو Waitms 250را اﺟﺮا ﻛﺮده و ﺑﺎ اﻳﻦ ﻛﺎر ﺑﺎ ﺗﺎﺧﻴﺮ 250
ﻣﻴﻠﻲ ﺛﺎﻧﻴﻪ اي ﻣﺤﺘﻮاي ﻧﻤﺎﻳﺸﮕﺮ را 10ﻛﺎراﻛﺘﺮ ﺑﻪ ﺳﻤﺖ راﺳﺖ ﺷﻴﻔﺖ ﻣﻲ دﻫﺪ .ﺳﭙﺲ دﺳﺘﻮر Wait 2ﺑﻪ ﻣﺪت
2ﺛﺎﻧﻴﻪ ﺗﺎﺧﻴﺮ اﻳﺠﺎد ﻛﺮده و ﻣﺠﺪداً دﺳﺘﻮر Forﺑﻌﺪي ﻋﺒﺎرات داﺧﻞ LCDرا 10ﻛﺎراﻛﺘﺮ ﺑﻪ ﭼﭗ ﺷﻴﻔﺖ ﻣﻲ
Avr64.com
8 AVR Learning Book
دﻫﺪ و 2ﺛﺎﻧﻴﻪ ﺻﺒﺮ ﻣﻲ ﻛﻨﺪ .ﻧﻈﺮ ﺑﻪ اﻳﻨﻜﻪ ﻛﻞ اﻳﻦ ﻣﺠﻤﻮﻋﻪ دﺳﺘﻮرات داﺧﻞ Do..Loopﻣﺤﺼﻮر ﺷﺪه اﻧﺪ اﻳﻦ
ﻣﺎﺟﺮا ﺗﺎ اﺑﺪ ﺗﻜﺮار ﻣﻲ ﺷﻮد.
در ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ اوﻟﻴﻦ ﺑﺎري ﺑﻮد ﻛﻪ ﻣﺘﻐﻴﺮ ﺗﻌﺮﻳﻒ ﻛﺮدﻳﻢ .ﻣﺘﻐﻴﺮﻫﺎ ﺑﺨﺸﻲ از ﻓﻀﺎي RAMﻣﻴﻜﺮو را رزرو
ﻛﺮده و ﺑﺮاي ﻣﻮارد ﺧﺎﺻﻲ ﻛﻪ ﻧﻴﺎز ﺑﻪ ﻳﻚ ﺣﺎﻓﻈﻪ ﻛﻮﺗﺎه ﻣﺪت دارﻳﻢ اﺳﺘﻔﺎده ﻣﻲ ﺷﻮﻧﺪ .در ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮﻫﺎ ﺑﺎﻳﺪ
ﻧﻜﺎت زﻳﺎدي را ﻣﺪ ﻧﻈﺮ داﺷﺘﻪ ﺑﺎﺷﻴﺪ .ﻣﻮرد اول داﻣﻨﻪ ﺗﻐﻴﻴﺮات ﻳﻚ ﻣﺘﻐﻴﺮ اﺳﺖ .در ﻣﺜﺎل ﺑﺎﻻ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻨﻜﻪ از 1
ﺗﺎ 10ﺷﻤﺎرش ﻣﻴﻜﻨﻴﻢ ﻧﻮع Byteﭘﺎﺳﺦ ﮔﻮي ﻧﻴﺎز ﻣﺎ ﻣﻲ ﺑﺎﺷﺪ .ﻳﻚ ﻣﺘﻐﻴﺮ Byteﻣﻲ ﺗﻮاﻧﺪ اﻋﺪاد ﻃﺒﻴﻌﻲ از 0ﺗﺎ
255را در ﺧﻮد ﺟﺎي دﻫﺪ .ﻧﻜﺘﻪ دوم ﻓﻀﺎي ﻣﺤﺪود RAMﻣﻴﻜﺮوﻫﺎ ﻣﻲ ﺑﺎﺷﺪ) .ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﻣﻴﻜﺮوﻫﺎ
دو ﺣﺎﻓﻈﻪ RAMو ROMدارﻧﺪ ﻛﻪ ﻋﻤﻮﻣﺎً ﻣﻘﺪار ROMﺑﻴﺸﺘﺮ از RAMﻣﻲ ﺑﺎﺷﺪ .ﻛﺪي را ﻛﻪ ﻣﻴﻨﻮﻳﺴﻴﺪ در
ﻓﻀﺎي ROMﺗﻮﺳﻂ ﭘﺮوﮔﺮﻣﺮ ذﺧﻴﺮه ﻣﻲ ﻛﻨﻴﺪ و اﻳﻦ ﻓﻀﺎ در ﭘﺮوژه ﻫﺎي ﻣﻌﻤﻮﻟﻲ ﻓﻘﻂ ﺧﻮاﻧﺪﻧﻲ ﻣﻴﺒﺎﺷﺪ و ﺑﺎ
ﺷﺮوع ﻛﺎر ﻣﻴﻜﺮو ﺧﻂ ﺑﻪ ﺧﻂ از آدرس اول ﺗﺎ ﺟﺎﻳﻲ ﻛﻪ ﺑﺮﻧﺎﻣﻪ داﺷﺘﻪ ﺑﺎﺷﺪ ﺗﻮﺳﻂ CPUداﺧﻞ ﻣﻴﻜﺮو ﺧﻮاﻧﺪه و
اﺟﺮا ﻣﻲ ﺷﻮد .اﻳﻦ ﻓﻀﺎ در ﻣﻴﻜﺮوي Mega32ﺑﻪ ﻣﻴﺰان 32ﻛﻴﻠﻮﺑﺎﻳﺖ اﺳﺖ ROM .ﻛﻪ ﻏﺎﻟﺒﺎً آن را Flashﻧﻴﺰ
ﻣﻲ ﻧﺎﻣﻨﺪ را ﻣﻲ ﺗﻮاﻧﻴﺪ ﻫﻤﺎﻧﻨﺪ ﻫﺎرد ﻛﺎﻣﭙﻴﻮﺗﺮ ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﻫﺎ از آن اﺟﺮا ﻣﻲ ﺷﻮﻧﺪ RAM .ﻧﻴﺰ دﻗﻴﻘﺎً
ﻋﻤﻠﻜﺮدي ﺷﺒﻴﻪ RAMﻛﺎﻣﭙﻴﻮﺗﺮ دارد ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻣﻮﻗﻊ اﺟﺮا روي آن ﺑﺎر ﻣﻴﺸﻮﻧﺪ .اﻟﺒﺘﻪ اﻳﻦ ﻣﻮرد اﺧﻴﺮ در راﺑﻄﻪ
ﺑﺎ ﻣﻴﻜﺮوﻫﺎ ﻛﺎﻣﻼً ﺻﺎدق ﻧﻤﻴﺒﺎﺷﺪ و ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻃﻮر ﻣﺴﺘﻘﻴﻢ از روي ﻫﻤﺎن ROMاﺟﺮا ﻣﻲ ﺷﻮد ،وﻟﻲ ﺑﺨﺶ ﻫﺎﻳﻲ
از ﺑﺮﻧﺎﻣﻪ ﻛﻪ ﻧﻴﺎز ﺑﻪ ذﺧﻴﺮه ﻣﻮﻗﺖ اﻃﻼﻋﺎت دارﻧﺪ از ﻓﻀﺎي ﻗﺎﺑﻞ ﺧﻮاﻧﺪن و ﻧﻮﺷﺘﻦ RAMﺑﻬﺮه ﻣﻲ ﮔﻴﺮﻧﺪ .ﻣﺜﻼً در
ﻣﺜﺎل ﺑﺎﻻ ﻣﺘﻐﻴﺮ iﻛﻪ ﻣﻘﺪار ﺷﻤﺎرﻧﺪه را در ﺣﺎﻓﻈﻪ ﺧﻮد ﻧﮕﻪ ﻣﻲ دارد ﻳﻚ ﺑﺎﻳﺖ از ﻓﻀﺎي رم را ﺑﻪ ﺧﻮد اﺧﺘﺼﺎص
ﻣﻲ دﻫﺪ و ﺑﺎ دﺳﺘﻮر Dimاﻳﻦ ﻓﻀﺎ ﺑﺮاي iرزرو ﻣﻲ ﺷﻮد .ﻓﻀﺎي رم در Mega32ﺑﺮاﺑﺮ ﺑﺎ 2ﻛﻴﻠﻮﺑﺎﻳﺖ اﺳﺖ و
ﺑﺎﻳﺪ در ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻫﺎ دﻗﺖ ﻛﻨﻴﺪ ﺗﺎ اﻳﻦ ﻓﻀﺎ ﺳﺮ رﻳﺰ ﻧﻜﻨﺪ.
ﻓﻀﺎي دﻳﮕﺮي در ﻣﻴﻜﺮوﻫﺎ وﺟﻮد دارد ﻛﻪ از RAMﻛﻤﺘﺮ ﺑﻮده وﻟﻲ اﻃﻼﻋﺎت آن ﺑﺎ ﻗﻄﻊ ﺑﺮق ﻧﺎﺑﻮد
ﻧﻤﻴﺸﻮد ﻛﻪ ﺑﻪ آن EEPROMﻣﻲ ﮔﻮﻳﻨﺪ.
< ROMﺑﺮﻧﺎﻣﻪ ﻣﻴﻜﺮو – ﺑﺎ ﻗﻄﻊ ﺑﺮق از ﺑﻴﻦ ﻧﻤﻲ رود -ﺳﺮﻋﺖ دﺳﺘﺮﺳﻲ ﺑﺎﻻ – ﺧﻮاﻧﺪﻧﻲ ﻧﻮﺷﺘﻲ – ﻣﺤﺪودﻳﺖ 10000ﺑﺎر ﻧﻮﺷﺘﻦ.
< RAMﻣﺘﻐﻴﺮﻫﺎي ﻣﻮﻗﺘﻲ – ﺑﺎ ﻗﻄﻊ ﺑﺮق ﭘﺎك ﻣﻲ ﺷﻮد -ﺳﺮﻋﺖ دﺳﺘﺮﺳﻲ ﺑﺎﻻ – ﺧﻮاﻧﺪﻧﻲ ﻧﻮﺷﺘﻨﻲ – ﺑﺪون ﻣﺤﺪودﻳﺖ ﺧﻮاﻧﺪن /ﻧﻮﺷﺘﻦ.
< EEPROMﻣﺘﻐﻴﺮﻫﺎي داﺋﻤﻲ – ﺑﺎ ﻗﻄﻊ ﺑﺮق از ﺑﻴﻦ ﻧﻤﻲ رود -ﺳﺮﻋﺖ دﺳﺘﺮﺳﻲ ﭘﺎﻳﻴﻦ – ﺧﻮاﻧﺪﻧﻲ ﻧﻮﺷﺘﻨﻲ – ﻣﺤﺪودﻳﺖ 100000ﺑﺎر
ﻧﻮﺷﺘﻦ و ﭘﺎك ﻛﺮدن.
Avr64.com
9 AVR Learning Book
در ﻣﻮرد آدرس ﻫﺎي ﺣﺎﻓﻈﻪ و ﻓﻀﺎي Stackو ...ﻣﻄﺎﻟﺐ زﻳﺎدي وﺟﻮد دارﻧﺪ ﻛﻪ از ﺑﻴﺎن آﻧﻬﺎ در اﻳﻨﺠﺎ
ﺧﻮدداري ﻛﺮده و ﺗﻮﺿﻴﺤﺎت ﺑﻴﺸﺘﺮ را ﺑﻪ ﺳﺮي ﻣﻘﺎﻻت آﻣﻮزش اﺳﻤﺒﻠﻲ واﮔﺬار ﻣﻲ ﻧﻤﺎﻳﻴﻢ .اﺻﻮﻻً در ﭘﺮوژه ﻫﺎي
ﺳﺎده ﻛﻪ ﺑﺎ ﺑﺴﻜﺎم ﻃﺮاﺣﻲ ﻣﻲ ﺷﻮﻧﺪ ﻧﻴﺎزي ﺑﻪ داﻧﺴﺘﻦ ﺳﻄﺢ ﺻﻔﺮ ﺳﻴﺴﺘﻢ ﻧﻴﺴﺖ و ﻣﻴﺘﻮان ﺑﺎ آﻣﻮزش اﻧﺪﻛﻲ
ﺑﻴﺴﻴﻚ ﭘﺮوژه ﻣﻮرد ﻧﻈﺮ را ﻃﺮاﺣﻲ و ﺑﻬﺮه ﺑﺮداري ﻧﻤﻮد .اﻟﺒﺘﻪ ﻫﻴﭻ ﺗﻀﻤﻴﻨﻲ وﺟﻮد ﻧﺪارد ﻛﻪ ﭼﻨﻴﻦ ﭘﺮوژه اي در
ﻣﻜﺎن ﻫﺎي ﺻﻨﻌﺘﻲ و ﺷﺮاﻳﻂ ﻣﺨﺘﻠﻒ ﺑﻪ ﻃﻮر دﻗﻴﻖ ﻛﺎر ﻛﻨﺪ؛ در واﻗﻊ ﻫﻨﮓ ﻛﺮدن ﻣﻴﻜﺮو در اﺛﺮ ﺗﻐﻴﻴﺮ ﻧﺎﺧﻮاﺳﺘﻪ
ﻣﺤﺘﻮاي Ramﺑﺮ اﺛﺮ ﻧﻮﻳﺰ ﻧﺎﮔﺰﻳﺮ اﺳﺖ ،ﻫﺮ ﭼﻨﺪ ﻛﻪ ﺗﺪاﺑﻴﺮي ﻣﺜﻞ Watchdogﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر اﻧﺪﻳﺸﻴﺪه ﺷﺪه
اﺳﺖ ﻛﻪ ﻻزﻣﻪ آن Resetﺧﻮدﻛﺎر ﻣﻴﻜﺮو و از ﺑﻴﻦ رﻓﺘﻦ ﻛﻠﻴﻪ ﻣﻘﺎدﻳﺮ ﺟﺎري اﺳﺖ .در ﻫﺮ ﺻﻮرت ﻫﺪف از
آﻣﻮزش ﺑﺴﻜﺎم ﻓﻘﻂ و ﻓﻘﻂ آﺷﻨﺎﻳﻲ ﺑﺎ ﻣﻴﻜﺮوﻫﺎ و ﻗﺎﺑﻠﻴﺖ ﻫﺎي آﻧﻬﺎ ﻣﻲ ﺑﺎﺷﺪ و اﺳﺘﻔﺎده از آن ﺑﻪ ﻫﻴﭻ ﻋﻨﻮان در
ﭘﺮوژه ﻫﺎي ﺣﺮﻓﻪ اي ﺗﻮﺻﻴﻪ ﻧﻤﻲ ﺷﻮد .ﻫﻤﺎﻧﻄﻮرﻳﻜﻪ ﻣﻲ داﻧﻴﺪ ﻫﺮ ﺳﺎل ورژن ﻫﺎي ﺟﺪﻳﺪﺗﺮ اﻳﻦ ﻗﺒﻴﻞ ﻧﺮم اﻓﺰارﻫﺎ ﺑﻪ
ﺑﺎزار ﻋﺮﺿﻪ ﻣﻲ ﺷﻮد و در Historyآﻧﻬﺎ ﺗﻤﺎم اﻳﺮادﻫﺎ و Bugﻫﺎي ﻧﺴﺨﻪ ﻫﺎي ﻗﺒﻠﻲ آورده ﺷﺪه و ﻧﻴﺰ ﻳﻚ
دوﺟﻴﻦ دﺳﺘﻮر ﺟﺪﻳﺪ ﺑﻪ ﺑﺮﻧﺎﻣﻪ اﺿﺎﻓﻪ ﻣﻲ ﺷﻮد! ﺣﺎل آﻧﻜﻪ اﺳﻤﺒﻠﻲ ،زﺑﺎن ﻣﺎﺷﻴﻦ و اﺳﺘﺎﻧﺪارد ﻣﻴﻜﺮو ﺑﻮده ﺑﺎ داﺷﺘﻦ
ﺣﺪود 131دﺳﺘﻮر ﺑﻪ راﺣﺘﻲ ﻗﺎﺑﻞ ﻳﺎدﮔﻴﺮي اﺳﺖ و ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻨﻜﻪ ﻫﺮ دﺳﺘﻮر ﻣﺴﺘﻘﻴﻤﺎً ﻳﻚ ﻋﻤﻞ ﺧﺎص را اﻧﺠﺎم
ﻣﻲ دﻫﺪ ﻫﻴﭻ ﺑﺎﮔﻲ ﻧﺪاﺷﺘﻪ و ﺑﻬﺘﺮ اﺳﺖ ﺑﺪاﻧﻴﺪ ﻛﻪ اﻛﺜﺮ ﺑﺮﻧﺎﻣﻪ ﻫﺎي ﺳﻴﺴﺘﻤﻲ و ﺑﺮﻧﺎﻣﻪ ﻫﺎي راه اﻧﺪاز ﻣﻮﺑﺎﻳﻞ ﻫﺎ و
ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي ﺟﻴﺒﻲ و PCﻫﺎ ﻛﻪ ﻧﻴﺎز ﺑﻪ ﻛﺪ ﻛﻢ ،دﻗﺖ ﺑﺎﻻ ،و ﺳﺮﻋﺖ اﺟﺮاي ﻓﻮق اﻟﻌﺎده دارﻧﺪ ﺑﺎ Assembly
ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﻧﺪ و ﺗﻤﺎم ﻛﺘﺎﺑﺨﺎﻧﻪ ﻫﺎي ﺑﺴﻜﺎم ،ﻛﺪوﻳﮋن E-LAB ،Win AVR ،و ...ﻧﻴﺰ ﺑﺎ اﺳﻤﺒﻠﻲ ﻧﻮﺷﺘﻪ ﺷﺪه
اﻧﺪ و در واﻗﻊ اﺳﻤﺒﻠﻲ زﺑﺎن ﻣﺎدري ﻣﻴﻜﺮو
ﺑﻮده و ﺗﻤﺎم زﺑﺎن ﻫﺎ در ﻧﻬﺎﻳﺖ ﺑﺎﻳﺴﺘﻲ ﺑﺮاي
اﺟﺮا ﺑﻪ ﺑﻪ زﺑﺎن ﺗﺒﺪﻳﻞ ﺷﻮﻧﺪ .ﭘﺲ ﭼﻪ ﺑﻬﺘﺮ
ﻛﻪ از ﻫﻤﺎن اﺑﺘﺪا ﺗﻤﺎم ﻛﺪ ﻫﺎ را ﺑﺎ ﻫﻤﻴﻦ
زﺑﺎن رﺳﻤﻲ ﻣﻴﻜﺮو ﺑﻨﻮﻳﺴﻴﻢ و ﻣﻄﻤﺌﻦ
ﺑﺎﺷﻴﻢ ﻛﻪ در ﺻﺤﺒﺖ ﻛﺮدن ﺑﺎ ﻣﻴﻜﺮو دﭼﺎر
ﻫﻴﭻ ﺧﻄﺎﻳﻲ ﻧﺸﺪه اﻳﻢ.
Avr64.com
10 AVR Learning Book
در اﻳﻦ ﺑﺨﺶ ﻛﻤﻲ ﺑﻴﺸﺘﺮ ﺑﺎ ﻣﺘﻐﻴﺮﻫﺎ آﺷﻨﺎ ﺷﺪه و ﻧﺤﻮه ﺗﻌﺮﻳﻒ و ﻧﻤﺎﻳﺶ ﻣﺤﺘﻮاي آﻧﻬﺎ را روي LCDﺷﺮح
ﻣﻲ دﻫﻴﻢ .در ﭘﺮوژه اول ﻳﻚ ﺷﻤﺎرﻧﺪه ﻃﺮاﺣﻲ ﻣﻲ ﻛﻨﻴﻢ ﻛﻪ ﺑﺎ ﻫﺮ ﺑﺎر ﻓﺸﺎر دادن ﻛﻠﻴﺪ ﻳﻚ واﺣﺪ ﺑﻪ ﺷﻤﺎرﺷﮕﺮ
اﺿﺎﻓﻪ ﻛﻨﺪ.
در ﺧﻂ اول ﻣﺜﺎل ﺑﺎﻻ ﻣﺘﻐﻴﺮ iرا از ﻧﻮع Byteﺗﻌﺮﻳﻒ ﻛﺮده و در ﺧﻂ دوم ﻣﺤﺘﻮاي اوﻟﻴﻪ آن را ﺑﺮاﺑﺮ ﺑـﺎ 0
ﻗﺮار داده اﻳﻢ .ﺧﻄﻮط 3و 4را از ﺟﻠﺴﻪ ﻗﺒﻞ ﺑﻪ ﻳﺎد دارﻳﺪ ﻛﻪ ﻣﺮﺑﻮط ﺑﻪ ﺗﻌﺮﻳﻒ ﭘﻴﻦ ﻣﺘﺼﻞ ﺷـﺪه ﺑـﻪ ﻛﻠﻴـﺪ ﺑـﺮاي
ورودي و ﻓﻌﺎل ﺳﺎزي ﻣﻘﺎوﻣﺖ ﭘﻮل آپ داﺧﻠﻲ ﻣﻲ ﺑﺎﺷـﻨﺪ .در ﺧـﻂ 6ﻧﻤﺎﻳﺸـﮕﺮ را ﭘـﺎك ﻛـﺮده و ﺑـﺎ ﻗـﺮار دادن :
ﺑﻼﻓﺎﺻﻠﻪ در ﺟﻠﻮي آن دﺳﺘﻮر ﺧﺎﻣﻮش ﻛﺮدن ﻣﻜﺎن ﻧﻤﺎ را ﺻﺎدر ﻛﺮده اﻳـﻢ .ﺗﻮﺟـﻪ داﺷـﺘﻪ ﺑﺎﺷـﻴﺪ ﻛـﻪ در ﺑﻴﺴـﻴﻚ
اﺳﺘﺎﻧﺪارد ﻣﻲ ﺗﻮاﻧﻴﻢ دﺳﺘﻮرات را ﺑﻪ ﺟﺎي اﻳﻨﻜﻪ در ﺧﻄﻮط ﺟﺪاﮔﺎﻧﻪ ﺑﻨﻮﻳﺴﻴﻢ در ﺟﻠـﻮي ﻳﻜـﺪﻳﮕﺮ و در ﻳـﻚ ﺧـﻂ
ﺗﺎﻳﭗ ﻛﻨﻴﻢ ﻛﻪ ﺑﺮاي ﺟﺪا ﺳﺎزي دﺳﺘﻮرات از ﻫﻢ از :اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد .ﻣﻌﻤﻮﻻً ﺑﺮاي ﺧﻮاﻧﺎﻳﻲ ﺑﺮﻧﺎﻣﻪ اﻳﻦ ﻛﺎر را اﻧﺠﺎم
Avr64.com
11 AVR Learning Book
ﻧﻤﻲ دﻫﺪ .ﻣﺎ در اﻳﻨﺠﺎ ﺑﺮاي ﺟﻠﻮﮔﻴﺮي از زﻳﺎد ﺷﺪن ﺧﻄﻮط ﺑﺮﻧﺎﻣﻪ ﺑﺮاي ﻧﻤﺎﻳﺶ آﻧﻬﺎ در ﻳﻚ ﺻﻔﺤﻪ اﻳﻦ ﻛﺎر را اﻧﺠﺎم
داده اﻳﻢ) .ﺗﻌﺪاد زﻳﺎدي دﺳﺘﻮر را ﻣﻲ ﺗﻮان ﺑﺎ :در ﻳﻚ ﺧﻂ ﻧﻮﺷﺖ ﻛﻪ ﺑﺴﺘﮕﻲ ﺑﻪ ﻧﻮع ﻛﺎﻣﭙﺎﻳﻠﺮ دارد(.
ﺧﻂ 9ﺑﺎ Doآﻏﺎز ﺷﺪه و ﺑﻴﺎﻧﮕﺮ اﻳﺠﺎد ﻳﻚ ﺣﻠﻘﻪ ﻧﺎﻣﺤﺪود Foreverﻣـﻲ ﺑﺎﺷـﺪ .ﺧـﻂ 10زﻳـﺎد ﻣﻬـﻢ
ﻧﻴﺴﺖ و ﭼﻮن ﺑﺎ ‘ ﺷﺮوع ﺷﺪه در ﻛﺎﻣﭙﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ ﻧﺎدﻳﺪه در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮد و ﺑـﺮاي زﻳﺒـﺎﻳﻲ ﻛـﺪ آورده ﺷـﺪه.
ﺧﻄﻮط 11ﺗﺎ 16ﺑﺨﺶ اﺻﻠﻲ اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﻫﺴﺘﻨﺪ ﻛﻪ در اﻳﻨﺠﺎ ﺑﻪ ﺗﻮﺿﺢ آن ﻣﻲ ﭘﺮدازﻳﻢ .ﺧﻂ 11وﺿﻌﻴﺖ ﻛﻠﻴـﺪ را
اﺳﻜﻦ ﻣﻲ ﻛﻨﺪ؛ در ﺻﻮرﺗﻲ ﻛﻪ ﻓﺸﺮده ﻧﺸﺪه ﺑﺎﺷﺪ ) 1ﺑﺎﺷﺪ( اداﻣﻪ ﺑﺮﻧﺎﻣﻪ را از Endifﻣﺮ ﺑﻮط ﺑﻪ ﺧﻮد ﻛﻪ در ﺧـﻂ
16ﻗﺮار دارد ﭘﻲ ﮔﻴﺮي ﻣﻲ ﻛﻨﺪ) .ﺗﻮرﻓﺘﮕﻲ ﻛﺪ ﻫﺎ ﺑﻪ ﺧﻮاﻧﺎﻳﻲ ﺑﺮﻧﺎﻣﻪ ﻛﻤﻚ ﻣﻲ ﻛﻨﺪ و ﺳﺒﺐ ﻣﻲ ﺷﻮد ﺗﺎ ﺑﺎ ﺗﻌﻴـﻴﻦ
ﻋﻤﻖ ﻛﺪ اﺑﺘﺪا و اﻧﺘﻬﺎي ﻣﺮﺑﻮط ﺑﻪ ﻫﻢ دﺳﺘﻮرات دوﺑﺨﺸﻲ را راﺣﺖ ﺗﺮ ﭘﻴﺪا ﻛﻨﻴﻢ؛ ﻣﺜﻼً در ﻣﺜﺎل ﺑـﺎﻻ ﺑـﺎ ﺗﻮﺟـﻪ ﺑـﻪ
اﻳﻨﻜﻪ دو دﺳﺘﻮر Ifﻧﻮﺷﺘﻪ ﺷﺪه اﻧﺪ ﺑﺎ اﻳﻦ روش اﻧﺘﻬﺎي دﺳﺘﻮر اول را ﺧﻴﻠﻲ ﺳﺎده ﺗﺮ از ﺣﺎﻟﺘﻲ ﭘﻴﺪا ﻣﻲ ﻛﻨـﻴﻢ ﻛـﻪ
ﺗﻤﺎم دﺳﺘﻮرات در ﻳﻚ ﺳﻄﺢ ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺎﺷﻨﺪ.
در ﺧﻂ 18دﺳﺘﻮر Locate x,yﻣﻮﻗﻌﻴﺖ ﻣﻜﺎن ﻧﻤﺎي LCDرا در ﺳﻄﺮ دوم و ﺳـﺘﻮن اول ﻗـﺮاز ﻣـﻲ
دﻫﺪ و دﺳﺘﻮر ﺑﻌﺪي ﻣﻘﺪار iرا روي ﻧﻤﺎﻳﺸﮕﺮ ﭼﺎپ ﻣﻲ ﻛﻨﺪ .ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﻣﺎ ﺗﺼﻤﻴﻢ دارﻳﻢ ﻣﻘﺪار داﺧﻞ i
را روي ﻧﻤﺎﻳﺸﮕﺮ ﭼﺎپ ﻛﻨﻴﻢ ،ﺑﻨﺎﺑﺮاﻳﻦ از ﻗﺮار دادن iدر داﺧﻞ ﻛﻮﺗﻴﺸﻦ " " ﺧﻮدداري ﻣﻴﻜﻨـﻴﻢ .ﭼـﻪ در ﻏﻴـﺮ اﻳـﻦ
ﺻﻮرت ﻛﺎراﻛﺘﺮ iﺑﺮ روي ﺻﻔﺤﻪ ﭼﺎپ ﻣﻲ ﺷﻮد ﻧﻪ ﻣﺤﺘﻮاي آن! در ﻧﺘﻴﺠﻪ ﻣﻘـﺪار 0را روي ﺧـﻂ ﭘـﺎﻳﻴﻦ ﻧﻤﺎﻳﺸـﮕﺮ
دارﻳﻢ و اﻳﻦ ﻋﻤﻞ )اﺳﻜﻦ ﻛﺮدن ﻛﻠﻴﺪ و ﻧﻤﺎﻳﺶ ﻣﻘﺪار (iﺑﺎ رﺳﻴﺪن ﺑﻪ LOOPﺑﻪ DOﭘﺮش ﻣﻴﻜﻨﺪ و ﺗﻜﺮار ﻣـﻲ
ﺷﻮد.
ﻓﺮض ﻛﻨﻴﻢ ﻛﻪ اﻳﻦ ﺑﺎر ﻛﺎرﺑﺮ ﻛﻠﻴﺪ را ﻓﺸﺎر ﻣﻲ دﻫﺪ ﺗﺎ ﻳﻚ واﺣﺪ ﺑﻪ ﺷﻤﺎرﺷﮕﺮ اﺿﺎﻓﻪ ﻛﻨﺪ .در اﻳـﻦ ﺣﺎﻟـﺖ
دﺳﺘﻮر IFدر ﺧﻂ True ،11ﺷﺪه و دﺳﺘﻮر زﻳﺮﻳﻦ را اﺟﺮا ﻣﻲ ﻛﻨﺪ .در ﺧﻂ 12دﺳﺘﻮر Incr Iﻗﺮار داده ﺷﺪه
اﺳﺖ .اﻳﻦ دﺳﺘﻮر ﻣﺨﻔﻒ Increaseﺑﻮده و ﺑﻪ ﻫﺮ ﺑﺎر اﺟﺮا ﻳﻚ واﺣﺪ ﺑﻪ ﻣﺘﻐﻴﺮ iاﺿـﺎﻓﻪ ﻣـﻲ ﻛﻨـﺪ .اﻳـﻦ دﺳـﺘﻮر
ﻣﻌﺎدل دﺳﺘﻮر i=i+1ﻣﻲ ﺑﺎﺷﺪ .ﺳﭙﺲ ﺑﺮﻧﺎﻣﻪ در ﺧﻄﻮط 13ﺗﺎ 15در ﻳﻚ ﺣﻠﻘـﻪ Do..Loopﻛﻮﭼـﻚ ﮔﺮﻓﺘـﺎر
ﻣﻲ ﺷﻮد و ﺷﺮط ﺧﺎرج ﺷﺪن از اﻳﻦ ﺣﻠﻘﻪ اﻳﻨﺴﺖ ﻛﻪ ﻛﺎرﺑﺮ دﺳﺖ ﺧﻮد را از روي ﻛﻠﻴﺪ ﺑﺮداﺷﺘﻪ و آﻧـﺮا ﺑـﻪ ﺣـﺎل 1
ﺑﺮﮔﺮداﻧﺪ .در اﻳﻦ ﺻﻮرت ﺷﺮط داﺧﻞ ﺣﻠﻘﻪ Trueﺷﺪه و دﺳﺘﻮر Exit Doاﺟﺮا ﻣﻲ ﺷﻮد و ﻣﻘﺪار ﺟﺪﻳﺪ iﻳﻌﻨﻲ
ﻋﺪد 1ﺑﺮ روي ﻧﻤﺎﻳﺸﮕﺮ ﻣﺸﺎﻫﺪه ﻣﻲ ﮔﺮدد .ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻨﻜﻪ در ﺟﻠـﻮي Ifدوم ﻓﻘـﻂ ﻳـﻚ
دﺳﺘﻮر Exit doﻗﺮار دارد دﻳﮕﺮ ﻧﻴﺎزي ﺑﻪ End Ifﺑﺮاي آن ﻧﻤﻲ ﺑﺎﺷﺪ .دﺳﺘﻮر IFﺑﻴﺴﻴﻚ ﻣﺎﻧﻨـﺪ Cدر ﺻـﻮرﺗﻲ
ﻛﻪ ﺑﻴﺶ از ﻳﻚ زﻳﺮ ﻣﺠﻤﻮﻋﻪ داﺷﺘﻪ ﺑﺎﺷﺪ ﻧﻴﺎز ﺑﻪ ﺗﻌﻴﻴﻦ اﺳﻜﻮپ دارد .در Cاز } و {ﺑﺮاي ﺗﻌﻴﻴﻦ داﻣﻨﻪ ﻛﺎري و در
Avr64.com
12 AVR Learning Book
ﺑﻴﺴﻚ از End ifﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد .ﻫﻤﺎﻧﻨﺪ دﺳﺘﻮر Forﻛﻪ در ﺑﻴﺴﻴﻚ ﺑﺎ Nextﺧﺎﺗﻤـﻪ ﻣـﻲ
ﻳﺎﺑﺪ در Cو Pascalﺑﺎ { ﺗﻤﺎم ﻣﻲ ﺷﻮد.
ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ را ﺗﺎﻳﭗ ﻛﺮده و ﭘﺲ از ﻛﺎﻣﭙﻴﺎل وارد ﻣﻴﻜﺮو ﻧﻤﺎﻳﻴﺪ .ﺣﺎل ﻛﻠﻴﺪ را 255ﺑﺎر ﻓﺸﺎر دﻫﻴـﺪ ،ﻣﺴـﻠﻤﺎً
ﻋﺪد 255را روي ﻧﻤﺎﻳﺸﮕﺮ ﻣﺸﺎﻫﺪه ﻣﻲ ﻛﻨﻴﺪ .ﺑﺎ ﻓﺸﺎر ﻣﺠﺪد ﻛﻠﻴﺪ ﻧﺎﮔﻬﺎن ﻣﺘﻮﺟﻪ ﻣﻲ ﺷﻮﻳﺪ ﻛﻪ ﺑﻪ ﺟﺎي ﻋﺪد 256
ﻋﺪد 0ﺑﺮ روي LCDﻇﺎﻫﺮ ﻣﻲ ﺷﻮد! دﻟﻴﻞ اﻳﻦ اﻣﺮ آﻧﺴﺖ ﻛﻪ ﻣﺎ ﻣﺘﻐﻴـﺮ iرا از ﻧـﻮع Byteﺗﻌﺮﻳـﻒ ﻛـﺮده اﻳـﻢ و
داﻣﻨﻪ اﻳﻦ ﻣﺘﻐﻴﺮ از 0ﺗﺎ 255ﻣﻲ ﺑﺎﺷﺪ و ﺑﺎ اﻓﺰاﻳﺶ از اﻳﻦ ﻣﻘﺪار ﺳﺮرﻳﺰ ﻛﺮده ﺑﻪ ﻋﺒﺎرﺗﻲ Overflowﻣـﻲ ﺷـﻮد.
ﭘﺪﻳﺪه Overflowدر ﺗﻤﺎم ﻣﺘﻐﻴﺮ ﻫﺎ وﺟﻮد دارد وﻟﻲ وﻇﻴﻔﻪ ﻣﺎ ﺑـﻪ ﻋﻨـﻮان ﺑﺮﻧﺎﻣـﻪ ﻧـﻮﻳﺲ اﻳﻨﺴـﺖ ﻛـﻪ ﻫﻤﻴﺸـﻪ
ﻣﺘﻐﻴﺮي را اﻧﺘﺨﺎب ﻛﻨﻴﻢ ﻛﻪ ﺳﺮرﻳﺰ آن از ﻣﺤﺪوده ﻛﺎري ﻣﺎ ﺧﻴﻠﻲ ﺑﺎﻻﺗﺮ ﺑﺎﺷﺪ .در ﺟﺪول زﻳﺮ اﻧﻮاع ﻣﺘﻐﻴﺮﻫﺎي ﻗﺎﺑـﻞ
ﺗﻌﺮﻳﻒ در ﺑﺴﻜﺎم و ﻣﺤﺪوده ﺳﺮرﻳﺰ آﻧﻬﺎ آورده ﺷﺪه اﺳﺖ) :آﭘﺪﻳﺖ :ﻣﺘﻐﻴﺮ DWORDﻧﻴﺰ اﺧﻴﺮاً اﺿﺎﻓﻪ ﺷﺪه ﻛـﻪ
ﻳﻚ ﻣﺘﻐﻴﺮ 4ﺑﺎﻳﺘﻲ از 0ﺗﺎ 4294967295ﻣﻲ ﺑﺎﺷﺪ.
ﻣﺘﻐﻴﺮ ﻧﻮع Bitﺳﺎده ﺗﺮﻳﻦ ﻧﻮع ﻣﺘﻐﻴﺮ ﺑﻮده و ﻓﻘﻂ ﻣﻲ ﺗﻮاﻧـﺪ ﻣﻘـﺎدﻳﺮ 0و 1را در ﺧـﻮد ﻧﮕـﻪ داري ﻛﻨـﺪ.
ﻣﺘﻐﻴﺮ Stringﻧﻴﺰ ﺑﺮاي ﻧﮕﻬﺪاري رﺷﺘﻪ ﻫﺎ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه اﺳﺖ .ﻧﻮع دﻳﮕﺮي ﻣﺘﻐﻴﺮ ﺑﻪ ﻧـﺎم آراﻳـﻪ ﻧﻴـﺰ وﺟـﻮد
دارد ﻛﻪ در اﺻﻞ ﻳﻚ ﻧﻮع ﺳﺎﺧﺘﻤﺎن داده ﻣﻲ ﺑﺎﺷﺪ و در ﻣﻮاردي از ﻗﺒﻴﻞ ﺳﺎﺧﺖ ﭘـﺮوژه ﻗﻔـﻞ رﻣـﺰ و دﻓﺘـﺮ ﺗﻠﻔـﻦ
ﻛﺎرﺑﺮد زﻳﺎدي داﺷﺘﻪ و ﻣﺎﻧﻨﺪ ﻳﻚ Databaseﻛﻮﭼﻚ ﻋﻤﻞ ﻣﻲ ﻛﻨﺪ) .در ﻣﺘﻐﻴﺮ Stringاز } { اﺳﺘﻔﺎده ﻧﻜﻨﻴﺪ،
ﻛﺎراﻛﺘﺮﻫﺎي ﺑﺎﻻ ﻣﻔﻬﻮم ﺧﺎﺻﻲ ﺑﺮاي رﺷﺘﻪ داﺷﺘﻪ و ﻋﺪد اﺳﻜﻲ ﺑﻴﻦ آﻧﻬﺎ ﺑﻪ ﻛﺎراﻛﺘﺮ ﺗﺒﺪﻳﻞ ﺷﺪه و ﺑﻪ رﺷـﺘﻪ اﺿـﺎﻓﻪ
ﻣﻲ ﺷﻮد ،اﺳﺘﻔﺎده از اﻳﻦ ﻛﺎراﻛﺘﺮﻫﺎ ﻣﻤﻜﻦ اﺳﺖ ﺑﺎﻋﺚ اﻳﺠﺎد ﺧﻄﺎ در ﻣﺤﺘﻮﻳﺎت رﺷﺘﻪ ﮔﺮدد(.
در ﻣﺜﺎل ﺑﺎﻻ ﻣﻘﺪار iرا از ﻧﻮع Longﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ و ﺷﻤﺎرﻧﺪه اي ﺑﺎ ﻗﺎﺑﻠﻴﺖ ﺷـﻤﺎرش 2ﻣﻴﻠﻴـﺎرد روﻳـﺪاد
ﺑﺴﺎزﻳﺪ!
Avr64.com
13 AVR Learning Book
ﺗﺎ اﻳﻨﺠﺎ ﻛﺎر ﺑﺎ LCDو ﻧﺤﻮه ﻧﻤﺎﻳﺶ اﻃﻼﻋﺎت در ﺧﺮوﺟﻲ را ﺑـﻪ ﺧـﻮﺑﻲ آﻣـﻮﺧﺘﻴﻢ .اﻟﺒﺘـﻪ ﻓﺎﻧﻜﺸـﻦ ﻫـﺎي
زﻳﺎدي ﺑﺮاي ﻛﺎر ﺑﺎ LCDوﺟﻮد دارد وﻟﻲ ﺑﻬﺘﺮﻳﻦ روش آﻣﻮزش اﻳﻨﺴﺖ ﻛﻪ در اﺑﺘﺪا ﺑﺎ ﺷﻲ ﺟﺪﻳـﺪ آﺷـﻨﺎ ﺷـﻮﻳﻢ و
ﺳﺎﻳﺮ اﻣﻜﺎﻧﺎت اﺿﺎﻓﻪ را در ﻃﻲ ﭘﺮوژه ﻫﺎي ﻣﺨﺘﻠﻒ و ﻫﻨﮕﺎم ﻧﻴﺎز ﺑﻪ آﻧﻬﺎ ﻓﺮا ﺑﮕﻴﺮﻳﻢ ﺗﺎ در ﺑﻪ ﺧﻮﺑﻲ در ذﻫﻨﻤﺎن ﺑـﺎﻗﻲ
ﺑﻤﺎﻧﺪ.
ﻫﻤﺎﻧﻄﻮرﻳﻜﻪ در اﺑﺘﺪاي اﻳﻦ ﺟﻠﺴﻪ ذﻛﺮ ﺷﺪ ﻟﺰوم داﺷﺘﻦ ﻳﻚ Consoleﻛﺎﻣﭙﻴﻮﺗﺮي ﻛﻮﭼﻚ وﺟﻮد ﻳـﻚ
ورودي /ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد ﺑﺮ روي ﺳﻴﺴﺘﻢ ﻣﻲ ﺑﺎﺷﺪ .ﻣﺎ در ﭘﺮوژه ﻫﺎي ﻗﺒـﻞ از ﻛﻠﻴـﺪ ﻓﺸـﺎري ﺑـﻪ ﻋﻨـﻮان ورودي
اﺳﺘﻔﺎده ﻛﺮدﻳﻢ .اﻟﺒﺘﻪ ﻣﻲ ﺗﻮان ﺗﻌﺪاد ﻛﻠﻴﺪ ﻫﺎي ﻓﺸﺎري را زﻳﺎدﺗﺮ ﻛﺮد ،ﻣﺜﻼً 16ﻛﻠﻴﺪ و ﻫﺮ ﻛﺪام را ﺑﻪ ﻳﻚ ﭘـﻴﻦ از
ﻣﻴﻜﺮو ﻣﺘﺼﻞ ﻧﻤﻮد .وﻟﻲ اﻳﻦ ﻛﺎر ﺑﺎﻋﺚ اﺷﻐﺎل ﭘﺎﻳﻪ ﻫﺎي ﻣﻴﻜﺮو ﻣﻲ ﺷﻮد .ﻣﺎ در ﺳﺎﻳﺮ ﻣﻴﻜﺮوﻫﺎي ﻛﻮﭼﻚ ﭘﺎﻳـﻪ ﻫـﺎي
اﺿﺎﻓﻲ ﺑﺮاي اﻳﻦ ﻛﺎر ﻧﺪارﻳﻢ و ﻫﻤﻴﺸﻪ ﺳﻌﻲ ﻣﻴﻜﻨﻴﻢ ﺗﺎ ﺑﺎ ﺗﺪاﺑﻴﺮي در ﺻﺪد ﻛﺎﻫﺶ ﻣﺼﺮف ﭘﺎﻳﻪ ﻫﺎ وﺻﺮﻓﻪ ﺟﻮﻳﻲ در
آﻧﻬﺎ ﺑﺮآﻳﻴﻢ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﻛﻲ ﭘﺪ ﻫﺎي 4x4ﭘﺎ ﺑﻪ ﻋﺮﺻﻪ وﺟﻮد ﮔﺬاﺷﺘﻪ اﻧﺪ .اﻳﻦ ﻛﻲ ﭘﺪﻫﺎ ﺑﺎ داﺷﺘﻦ 16ﻛﻠﻴﺪ در
ﻃﺮح ﻫﺎي ﻣﺨﺘﻠﻒ و ﺑﺎ ﻗﻴﻤﺖ ﻫﺎي ﻣﻨﺎﺳﺐ ﻋﺮﺿﻪ ﻣﻲ ﺷﻮﻧﺪ و ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻣﺎﺗﺮﻳﺴﻲ ﺑﻮدن ﺳﻴﻢ ﺑﻨﺪي داﺧﻠﻲ ﻓﻘﻂ 8
ﺳﻴﻢ ارﺗﺒﺎﻃﻲ دارﻧﺪ.
Keypad
در ﺷﻜﻞ زﻳﺮ ﻳﻚ ﻛﻲ ﭘﺪ 4در 4ﻣﺎﺗﺮﻳﺴﻲ ،ﺳﺎﺧﺘﻤﺎن داﺧﻠﻲ و ﻧﺤﻮه اﺗﺼﺎل آن ﺑـﻪ ﻳﻜـﻲ از ﭘـﻮرت ﻫـﺎي
ﻣﻴﻜﺮو )در ﺑﺴﻜﺎم( را ﻣﺸﺎﻫﺪه ﻣﻲ ﻓﺮﻣﺎﻳﻴﺪ:
Avr64.com
14 AVR Learning Book
اﻛﺜﺮ اﻳﻦ ﻛﻲ ﭘﺪﻫﺎ ﺳﺎﺧﺖ داﺧﻞ ﺑﻮده و از ﻛﻴﻔﻴﺖ ﺧﻮﺑﻲ ﺑﺮﺧﻮردارﻧﺪ .در داﺧﻞ اﻳﻦ ﻛﻲ ﭘﺪﻫﺎ ﻣﺪار ﺧﺎﺻﻲ
وﺟﻮد ﻧﺪارد و در ﻣﺪل 4در 4آن 16ﻛﻠﻴﺪ ﻓﺸﺎري ﻛﻮﭼﻚ ﻗﺮار دارد ﻛﻪ ﻣﻄـﺎﺑﻖ ﺷـﻜﻞ ﺳـﻤﺖ ﭼـﭗ ﺑـﻪ ﺻـﻮرت
ﻣﺎﺗﺮﻳﺴﻲ ﺑﻪ 4ﺳﻴﻢ ﺳﻄﺮ و 4ﺳﻴﻢ ﺳﺘﻮن ﻣﺘﺼﻞ ﺷﺪه اﻧﺪ .ﺑﺮاي ﺧﻮاﻧـﺪن ﻛـﻲ ﭘـﺪ در اﺳـﻤﺒﻠﻲ ﻣﻴﺘـﻮاﻧﻴﻢ 4ﭘـﻴﻦ
ﻣﺘﺼﻞ ﺷﺪه ﺑﻪ ﺳﻄﺮ ﻫﺎ را ﺧﺮوﺟﻲ ﺗﻌﺮﻳﻒ ﻛﺮده و 4ﭘﻴﻦ ﺳﺘﻮن را ورودي ﺑﺎ ﭘﻮل آپ ﺗﻌﺮﻳﻒ ﻛﻨﻴﻢ .ﺳﭙﺲ ﺑﻪ ﻃـﻮر
ﻣﺮﺗﺐ ﺳﻄﺮﻫﺎ را روﺷﻦ ﻛﻨﻴﻢ و ﺳﺘﻮن ﻫﺎ را ﺑﺨﻮاﻧﻴﻢ ﺗﺎ ﻣﻮﻗﻌﻴﺖ ﻛﻠﻴﺪ ﻓﺸﺮده ﺷﺪه را ﺑﻴﺎﺑﻴﻢ .در ﺑﺴـﻜﺎم ﺗﻤـﺎم اﻳـﻦ
ﻋﻤﻠﻴﺎت ﺗﻮﺳﻂ دﺳﺘﻮر )( x=getkbdاﻧﺠﺎم ﻣﻲ ﺷﻮد و ﻋﺪد ﻣﺮﺑﻮط ﺑﻪ ﻛﻠﻴﺪ ﻓﺸﺮده ﺷﺪه ) 0ﺗﺎ (15در ﻣﺘﻐﻴـﺮ x
ﺑﺮﮔﺮداﻧﺪه ﻣﻲ ﺷﻮد .در ﺻﻮرﺗﻲ ﻛﻪ ﻫﻴﭻ ﻛﻠﻴﺪي ﻓﺸﺮده ﻧﺸﺪه ﺑﺎﺷﺪ ﻋﺪد 16ﺑﺮﮔﺮداﻧﺪه ﻣﻲ ﺷﻮد .اﻳﻦ اﻋﺪاد اﻳﻨﺪﻛﺲ
ﻫﺴﺘﻨﺪ و ﺑﻪ ﺻﻮرت زﻳﺮ ﻣﻮﻗﻌﻴﺖ ﻛﻠﻴﺪﻫﺎ را ﺑﺮ ﻣﻴﮕﺮداﻧﻨﺪ و ﻫﻴﭻ ارﺗﺒﺎﻃﻲ ﺑﺎ ﻟﻴﺒﻞ ﭼﺴﺒﺎﻧﺪه ﺷﺪه روي ﻛﻲ ﭘﺪ ﻧﺪارﻧﺪ.
ﻛﻲ ﭘﺪ را ﺑﻪ ﻫﺮ ﭘﻮرﺗﻲ از ﻣﻴﻜﺮو ﻣﻲ ﺗﻮاﻧﻴﺪ وﺻﻞ ﻛﻨﻴﺪ وﻟﻲ در ﺑﺴﻜﺎم ﺑﺎﻳﺪ ﺗﺮﺗﻴﺐ آن ﺑﻪ ﺻﻮرت ﺷﻜﻞ ﺑﺎﻻ
ﺑﺎﺷﺪ؛ ﻳﻌﻨﻲ ﺳﺘﻮن اول ﺑﻪ ﭘﻴﻦ 0و ﺳﻄﺮ آﺧﺮ ﺑﻪ ﭘﻴﻦ 7ﭘﻮرت ﻣﻮرد ﻧﻈﺮ وﺻﻞ ﺷﻮد.
ﺑﺮاي راه اﻧﺪازي Keypadﻣﺪاري ﻣﻄﺎﺑﻖ ﺷﻜﻞ زﻳﺮ ﺑﺒﻨﺪﻳﺪ .در ﺷﻜﻞ زﻳﺮ ﻋـﺪد 4روي ﻛـﻲ ﭘـﺪ ﻣﻌـﺮف
ﺳﺘﻮن اول و ﻛﺎراﻛﺘﺮ Dﻣﻌﺮف ﺳﻄﺮ اول ﻣﻲ ﺑﺎﺷﺪ .در ﻛﻲ ﭘﺪ ﻫﺎي اﺳﺘﺎﻧﺪارد ﻣﻌﻤﻮﻻً ﺳﺘﻮن اول را ﺑﺎ C1و ﺳـﻄﺮ
اول را ﺑﺎ R1ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﻨﺪ ﻛﻪ ﺑﺎﻳﺪ ﺑﻪ اﻳﻦ ﻧﻜﺘﻪ ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ .ﻣﺪاري ﻣﻄﺎﺑﻖ زﻳﺮ روي ﺑﺮد ﺑﻮرد ﺑﺒﻨﺪﻳﺪ
ﺗﺎ اداﻣﻪ آﻣﻮزش را ﭘﻴﮕﻴﺮي ﻛﻨﻴﻢ.
Avr64.com
15 AVR Learning Book
ﻛﺪ ﻫﺎي زﻳﺮ را ﺑﺮاي راه اﻧﺪازي ﻛﻲ ﭘﺪ ﻧﻮﺷﺘﻪ و وارد ﻣﻴﻜﺮو ﻧﻤﺎﻳﻴﺪ:
Avr64.com
16 AVR Learning Book
در ﺧﻂ اول دو ﻣﺘﻐﻴﺮ ﻳﻜﻲ ﺑﺮاي درﻳﺎﻓﺖ اﻳﻨﺪﻛﺲ ﺑﻪ ﻋﻨﻮان Byteو دﻳﮕﺮي ﺑﺮاي ﺑﺮﮔﺮداﻧﺪن ﻋﺒﺎرت ﻫﺎي
ﭼﺎپ ﺷﺪه روي ﻛﻲ ﭘﺪ ﺑﻪ ﻋﻨﻮان رﺷﺘﻪ 6ﺗﺎﻳﻲ ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﻴﻢ .در ﺧﻂ دوم ﺗﻌﻴﻴﻦ ﻣﻲ ﻛﻨﻴﻢ ﻛﻪ ﻛﻲ ﭘﺪ ﺑﻪ ﻛﺪام
ﭘﻮرت وﺻﻞ ﺷﺪه اﺳﺖ .ﺧﻄﻮط ﺑﻌﺪي ﻣﺎﻧﻨﺪ ﭘﺮوژه ﻗﺒﻞ ﻫﺴﺘﻨﺪ .در ﺣﻠﻘﻪ ﻣﺤﺼﻮر ﺑﻪ Do..Loopدر اﺑﺘﺪا ﻛﻲ ﭘﺪ
را ﺧﻮاﻧﺪه و اﻳﻨﺪﻛﺲ درﻳﺎﻓﺘﻲ را در iﻗﺮار ﻣﻲ دﻫﻴﻢ .دﺳﺘﻮر ﺑﻌﺪي ﻣﻘﺪار اﻳﻨﺪﻛﺲ iرا در ﺟﺪول keydataﻛﻪ
ﭘﺲ از دﺳﺘﻮر Endﻗﺮار ﮔﺮﻓﺘﻪ ﺑﺮرﺳﻲ ﻣﻴﻜﻨﺪ و ﻛﺎراﻛﺘﺮ ﻣﺘﻨﺎﻇﺮ ﺑﺎ آن را در ﻣﺘﻐﻴﺮ Numﺑﺮ ﻣﻴﮕﺮداﻧﺪ .ﺗﻮﺟﻪ
ﻛﻨﻴﺪ ﻛﻪ آﺧﺮﻳﻦ اﻳﻨﺪﻛﺲ ﺟﺪول Keydataﻳﻚ رﺷﺘﻪ ﺗﻬﻲ اﺳﺖ و ﺷﻤﺎره اﻳﻨﺪﻛﺲ آن ﻫﻢ ﺑﺮاﺑﺮ ﺑﺎ 16ﻣﻲ ﺑﺎﺷﺪ
)اﻳﻨﺪﻛﺲ ﻫﺎ از 0ﺷﺮوع ﻣﻲ ﺷﻮﻧﺪ( ،ﺳﭙﺲ دﺳﺘﻮر ﺑﻌﺪي ﻣﺤﺘﻮاي Numرا ﺑﺮرﺳﻲ ﻣﻴﻜﻨﺪ؛ در ﺻﻮرﺗﻲ ﻛﻪ ﻛﻠﻴﺪي
ﻓﺸﺮده ﻧﺸﺪه ﺑﺎﺷﺪ ﻣﻘﺪار اﻳﻨﺪﻛﺲ ﺑﺮاﺑﺮ ﺑﺎ 16و ﻣﻘﺪار Numﻳﻚ رﺷﺘﻪ ﺧﺎﻟﻲ ﺧﻮاﻫﺪ ﺑﻮد ﻛﻪ در ﻧﺘﻴﺠﻪ ﭼﻴﺰي
روي LCDﻣﺸﺎﻫﺪه ﻧﻤﻲ ﺷﻮد .وﻟﻲ در ﺻﻮرﺗﻲ ﻛﻪ ﻋﺪد ﻓﺸﺮده ﺷﺪه ﺑﻴﻦ 0ﺗﺎ 15ﺑﺎﺷﺪ ﻛﺎراﻛﺘﺮ ﻣﺮﺑﻮط ﺑﻪ آن از
ﺟﺪول دﻳﺘﺎ ﻓﺮاﺧﻮاﻧﻲ ﺷﺪه و ﻣﺨﺎﻟﻒ ﺑﺎ ﺗﻬﻲ ﺧﻮاﻫﺪ ﺑﻮد و دﺳﺘﻮرات داﺧﻞ ﺑﻠﻮك Ifاﺟﺮا ﻣﻴﺸﻮد .در ﺧﻂ 10ﺑﺎ
دﺳﺘﻮر Home Lﻣﻜﺎن ﻧﻤﺎ ﺑﻪ ﺧﻂ دوم ﭘﺮش ﻣﻴﻜﻨﺪ )اﻳﻦ دﺳﺘﻮر ﻣﻌﺎدل Locate 2,1ﻣﻲ ﺑﺎﺷﺪ( ﺳﭙﺲ
دﺳﺘﻮر ﺟﻠﻮي آن )) (LCD Spc(16ﺗﻌﺪاد 16ﻛﺎراﻛﺘﺮ Spaceﻳﺎ ﻫﻤﺎن ﻓﻀﺎي ﺧﺎﻟﻲ در ﺳﻄﺮ دوم ﭼﺎپ ﻣﻲ
ﻛﻨﺪ .اﻳﻦ ﺗﻨﻬﺎ روش ﺑﺮاي ﭘﺎك ﻛﺮدن ﻣﺤﺘﻮﻳﺎت ﺳﻄﺮ دوم ﺑﺪون آﺳﻴﺐ رﺳﺎﻧﺪن ﺑﻪ ﻣﺤﺘﻮﻳﺎت ﺳﻄﺮ اول ﻣﻲ ﺑﺎﺷﺪ.
دﺳﺘﻮرات ﺧﻂ ﺑﻌﺪي ﻧﻴﺰ ﻣﻘﺪار Numرا در ﺳﻄﺮ دوم ﻧﻤﺎﻳﺸﮕﺮ ﭼﺎپ ﻣﻲ ﻛﻨﻨﺪ.
Avr64.com
17 AVR Learning Book
ﺑﺎ اﺳﺘﻔﺎده از دﺳﺘﻮرات IFﻣﻲ ﺗﻮان ﻛﺎراﻛﺘﺮ ﻫﺎي درﻳـﺎﻓﺘﻲ را ﺑﺮرﺳـﻲ ﻛـﺮد و ﻣﺘﻨﺎﺳـﺐ ﺑـﺎ آﻧﻬـﺎ ﻋﺒـﺎرات
ﻣﺨﺘﻠﻔﻲ را روي LCDﻧﻤﺎﻳﺶ داد و ﻳﺎ رﻟﻪ اي را ﺑﺮاي ﻛﻨﺘﺮل ﺑﺎر روﺷﻦ و ﺧﺎﻣﻮش ﻛﺮد .ﺑﻴﺴﻴﻚ دﺳﺘﻮرات و ﺗﻮاﺑﻊ
ﻣﺘﻨﻮﻋﻲ از ﻗﺒﻴﻞ )( Sinو ...دارد ﻛﻪ ﺑﻬﺘﺮﻳﻦ ﻣﺮﺟﻊ آن Helpﻧﺮم اﻓﺰار ﻣﻲ ﺑﺎﺷﺪ .ﻫﻤﭽﻨﻴﻦ ﺑﺎ ﻣﺸﺎﻫﺪه ﻣﺜﺎل ﻫﺎي
ﮔﻮﻧﺎﮔﻮن ﻣﻲ ﺗﻮان اﻳﺪه ﻫﺎي ﻣﺨﺘﻠﻔﻲ ﺑﻪ دﺳﺖ آورد و در ﭘﺮوژه ﻫﺎي ﺑﺎﻻ ﺑﻪ ﻛﺎر ﺑﺮد .ﺑﺮاي اﻧﺘﻬﺎي اﻳﻦ ﻣﻘﺎﻟﻪ ﺗﺼﻤﻴﻢ
دارﻳﻢ ﻳﻚ ﭘﺮوژه ﻗﻔﻞ رﻣﺰ دﻳﺠﻴﺘﺎل ﺳﺎده را ﻃﺮاﺣﻲ و ﭘﻴﺎده ﺳﺎزي ﻧﻤﺎﻳﻴﻢ ﻛﻪ ﺑﺎ درﻳﺎﻓﺖ رﻣﺰ ﻋﺒﻮر 8رﻗﻤﻲ ﺻﺤﻴﺢ
از ﻛﺎرﺑﺮ ﻳﻚ دﻳﻮد LEDرا روﺷﻦ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺑﺎ ﺗﻐﻴﻴﺮ اﻧﺪﻛﻲ ﻣﻲ ﺗﻮان از آن ﺑﺮاي ﺗﺤﺮﻳﻚ ﻳﻚ رﻟـﻪ و در ﻧﻬﺎﻳـﺖ
ﺑﺎز ﻛﺮدن درب ﻣﻨﺰل اﺳﺘﻔﺎده ﻛﺮد.
در ﺷﻜﻞ زﻳﺮ ﻧﻘﺸﻪ ﻗﻔﻞ اﻣﻨﻴﺘﻲ دﻳﺪه ﻣﻲ ﺷﻮد و در اﻳﻦ ﭘﺮوژه از ﻳﻚ LEDﺑﻪ ﻋﻨـﻮان ﺧﺮوﺟـﻲ اﺳـﺘﻔﺎده
ﺷﺪه ﻛﻪ ﻣﻲ ﺗﻮان ﺑﻪ ﺟﺎي آن ﻳﻚ رﻟﻪ ﻗﺮار داد و در ﻣﻘﺎﻟﻪ ﺑﻌﺪي ﻣﺪار ﻻزم ﺑﺮاي دراﻳﻮ رﻟﻪ ﺷﺮح داده ﻣﻲ ﺷﻮد .ﻳﻚ
ﺑﻠﻨﺪﮔﻮي ﻛﻮﭼﻚ 8اﻫﻢ ﻧﻴﺰ ﻛﻪ ﺑﺎ ﻳﻚ ﻣﻘﺎوﻣﺖ 100اﻫﻤﻲ ﺳﺮي ﺷﺪه اﺳﺖ ﺻﺪاﻫﺎي ﺻﻔﺤﻪ ﻛﻠﻴﺪ و ﺑـﻮق ﺧﻄـﺎ و
ﻣﻮﻓﻘﻴﺖ را ﺑﻪ ﮔﻮش ﻛﺎرﺑﺮ ﻣﻲ رﺳﺎﻧﺪ.
Avr64.com
18 AVR Learning Book
ﺑﺮﻧﺎﻣﻪ زﻳﺮ را در ﺑﺴﻜﺎم ﻛﭙﻲ ﻛﺮده و ﻛﺎﻣﭙﺎﻳﻞ ﻛﻨﻴﺪ ﺗﺎ ﺑﻪ ﺗﻮﺿﻴﺢ آن ﺑﭙﺮدازﻳﻢ) :ﺗﻤﺎم ﺑﺮﻧﺎﻣﻪ ﻫﺎي اﻳﻦ ﻣﻘﺎﻟﻪ
ﺑﺎ ﻓﺮض اﻳﻨﻜﻪ ﺗﻨﻈﻴﻤﺎت Optionsرا ﻣﻄﺎﺑﻖ ﺑﺎ ﻣﻘﺎدﻳﺮ ذﻛﺮ ﺷﺪه در ﺑﺎﻻ ﻗﺮار داده ﺑﺎﺷﻴﺪ ﻋﻤﻞ ﻣﻲ ﻛﻨﻨﺪ .ﻳﻜـﻲ
از ﻣﺸﻜﻼت ﻛﺎر ﺑﺎ ﺑﺨﺶ Optionsاﻳﻨﺴﺖ ﻛﻪ ﺑﺮﻧﺎﻣﻪ را از ﺣﺎﻟﺖ Plain Textﺧـﺎرج ﻛـﺮده و ﻗﺎﺑﻠﻴـﺖ
ﺣﻤﻞ آن را ﻛﻢ ﻣﻲ ﻛﻨﺪ .در ﺻﻮرﺗﻲ ﻫﻢ ﻛﻪ از Optionsاﺳﺘﻔﺎده ﻧﻜﻨﻴﺪ ﻣﺠﺒﻮر ﺑﻪ ﻧﻮﺷﺘﻦ ﻛﺪ زﻳﺎدي ﻫﺴﺘﻴﺪ(
Dim I As Byte , Num As String * 1
Dim Pass As String * 8
Config Kbd = Porta
Config Pinb.1 = Output )'LED (Relay
Config Pinb.2 = Output 'Speaker
Cursor Off
Main:
"" = Pass
Cls : Cursor Blink
"?Lcd "Password
Sound Pinb.2 , 120 , 20
Home L
Do
Avr64.com
19 AVR Learning Book
)(I = Getkbd
)Num = Lookupstr(i , Keydata
If Num <> "" Then
"*" Lcd
Pass = Pass + Num
Sound Pinb.2 , 120 , 20
'----------- Check Pass ------------
If Len(pass) = 8 Then وﻗﺘﻲ 8رﻗﻢ وارد ﺷﺪ'
Cursor Noblink
If Pass = "12345678" Then رﻣﺰ درﺳﺖ'
"!Cls : Lcd "Welcome
Sound Pinb.2 , 120 , 100
Sound Pinb.2 , 120 , 80
Sound Pinb.2 , 120 , 60
Set Portb.1 : Wait 1 : Reset Portb.1
Goto Main
Else رﻣﺰ ﻏﻠﻂ'
"!Cls : Lcd "Error
Sound Pinb.2 , 120 , 400
Waitms 500 : Goto Main
End If
End If
'-----------------------------------
Waitms 250
End If
Loop
End
Keydata:
"Data "1" , "2" , "3 "" ,
"Data "4" , "5" , "6 "" ,
"Data "7" , "8" , "9 "" ,
Data "" , "0" , "" , ""
"" Data
در ﺧﻂ اول ﻣﺎﻧﻨﺪ ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ دو ﻣﺘﻐﻴﺮ ﻳﻜﻲ ﺑﺮاي ذﺧﻴﺮه اﻳﻨﺪﻛﺲ درﻳـﺎﻓﺘﻲ از ﻛـﻲ ﭘـﺪ و دﻳﮕـﺮي ﺑـﺮاي
درﻳﺎﻓﺖ رﺷﺘﻪ ﻣﺮﺑﻮط ﺑﻪ ﻛﻠﻴﺪ از ﺟﺪول دﻳﺘﺎ ﺗﻌﺮﻳﻒ ﻛﺮده اﻳﻢ .در اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﻣﺘﻐﻴﺮ دوم را ﻳﻚ رﺷﺘﻪ ﻳﻚ ﻛﺎراﻛﺘﺮي
ﺗﻌﺮﻳﻒ ﻛﺮده و در ﺟﺪول دﻳﺘﺎ ﺗﻤﺎم ﻛﻠﻴﺪﻫﺎ را ﺑﺎ ﺣﺪاﻛﺜﺮ ﻳﻚ ﻛﺎراﻛﺘﺮ ﻣﺸﺨﺺ ﻛﺮده اﻳﻢ و ﻛﻠﻴﺪﻫﺎﻳﻲ ﻛـﻪ اﺳـﺘﻔﺎده
ﻧﻤﻴﺸﻮﻧﺪ و ﻫﻤﭽﻨﻴﻦ اﻳﻨﺪﻛﺲ ﺷﺎﻧﺰدﻫﻢ را ﺑﺎ رﺷﺘﻪ ﺗﻬﻲ ﺟﺎﻳﮕﺰﻳﻦ ﻛﺮده اﻳﻢ) .رﺷﺘﻪ ﺗﻬﻲ ﺑﺎ ﺗﺎﻳﭗ ﭘﺸﺖ ﺳـﺮ ﻫـﻢ دو
ﻛﻮﺗﻴﺸﻦ "" ﺑﺪون ﻫﻴﭻ ﻓﻀﺎي ﺧﺎﻟﻲ در ﺑﻴﻦ آﻧﻬﺎ ﺑﻪ وﺟﻮد ﻣﻲ آﻳﺪ( .در ﺧﻂ دوم ﻳﻚ ﻣﺘﻐﻴﺮ رﺷـﺘﻪ اي ﺑـﺎ ﻃـﻮل 8
ﻛﺎراﻛﺘﺮ ﺗﻌﺮﻳﻒ ﻛﺮده اﻳﻢ ﻛﻪ رﻣﺰ ﻋﺒﻮر درﻳﺎﻓﺘﻲ در آن ﻗﺮار ﻣﻲ ﮔﻴﺮد.
در ﺧﻄﻮط ﺑﻌﺪي ﻫﻢ ﺑﺎ دﺳﺘﻮرات Configدو ﭘﻮرت ﻣﺘﺼﻞ ﺷـﺪه ﺑـﻪ LEDو ﺑﻠﻨـﺪﮔﻮ را ﺑـﻪ ﻋﻨـﻮان
ﺧﺮوﺟﻲ ﺗﻌﺮﻳﻒ ﻛﺮده اﻳﻢ ﺳﭙﺲ ﻣﻜﺎن ﻧﻤﺎ را ﺧﺎﻣﻮش ﻛﺮده و ﺑﺮﻧﺎﻣﻪ اﺻﻠﻲ را ﺑﺎ ﺑﺮﭼﺴﺐ Mainآﻏﺎز ﻛﺮده اﻳﻢ .در
اﻳﻦ ﺑﺮﭼﺴﺐ ﻛﻪ ﭘﺲ از ﻫﺮ ﺑﺎر ورورد ﺻﺤﻴﺢ و ﻳﺎ ﻏﻠﻂ رﻣﺰ ﺑﻪ آن ﻣﺮاﺟﻌﻪ ﻣﻲ ﺷﻮد اﺑﺘﺪا ﻣﺤﺘﻮﻳﺎت درﻳﺎﻓﺖ ﺷـﺪه از
ﻛﺎرﺑﺮ را ﺑﺮاﺑﺮ ﺗﻬﻲ ﻗﺮار ﻣﻲ دﻫﻴﻢ )رﺷﺘﻪ ﺣﺎوي رﻣﺰ درﻳﺎﻓﺘﻲ ﺻﺤﻴﺢ ﻳﺎ ﻏﻠﻂ را ﺧﺎﻟﻲ ﻣﻴﻜﻨﻴﻢ( ﺳﭙﺲ ﺻﻔﺤﻪ را ﭘﺎك
ﻛﺮده و ﻣﻜﺎن ﻧﻤﺎ را ﺑﻪ ﺣﺎﻟﺖ ﭼﺸﻤﻜﺰن درﻣﻲ آورﻳﻢ و در ﺧﻂ ﺑﺎﻻ ﻋﺒﺎرت ? Passwordرا ﻣﻲ ﻧﻮﻳﺴـﻴﻢ و ﺑـﺎ
دﺳﺘﻮر Soundﻳﻚ ﺑﻮق ﻛﻮﭼﻚ ﺑـﻪ ﺑﻠﻨـﺪﮔﻮ ﻣـﻲ ﻓﺮﺳـﺘﻴﻢ ﺗـﺎ ﻫﻤﺎﻧﻨـﺪ ﻛـﺎﻣﭙﻴﻮﺗﺮ ﻣﻮﻓﻘﻴـﺖ آﻣﻴـﺰ ﺑـﻮدن ﻋﻤـﻞ
Start-upرا اﻋﻼم ﻛﻨﻴﻢ .ﺳﭙﺲ ﻣﻜﺎن ﻧﻤﺎ را ﺑﻪ ﺧﻂ دوم ﻣﻨﺘﻘﻞ ﻣﻲ ﻛﻨﻴﻢ.
Avr64.com
20 AVR Learning Book
ﺑﻪ ﺣﻠﻘﻪ Do..Loopوارد ﺷﺪه و در آﻧﻬﺎ ﻫﻤﺎﻧﻨﺪ ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ ﻛﺎراﻛﺘﺮﻫﺎ را از ﻛﻲ ﭘﺪ ﻣﻲ ﮔﻴـﺮﻳﻢ وﻟـﻲ ﺑـﺎ
اﻳﻦ ﺗﻔﺎوت ﻛﻪ در ﺻﻮرت ﻣﻌﺘﺒﺮ ﺑﻮدن ﻛﺎراﻛﺘﺮ )ﻛﻪ در اﻳﻨﺠﺎ ﻓﻘﻂ اﻋـﺪاد 0ﺗـﺎ 9ﻣﻌﺘﺒﺮﻧـﺪ و ﺑﻘﻴـﻪ ﺑـﺎ رﺷـﺘﻪ ﺗﻬـﻲ
ﺟﺎﻳﮕﺰﻳﻦ ﺷﺪه و از ﺷﺮط اﻋﺘﺒﺎر ﻋﺒﻮر ﻧﻤﻴﻜﻨﻨﺪ( ﺑﻪ ﺟﺎي ﻧﻤﺎﻳﺶ ﻛﺎراﻛﺘﺮ ،ﻋﻼﻣﺖ ﺳﺘﺎره * را روي ﻧﻤﺎﻳﺸـﮕﺮ ﻧﺸـﺎن
ﻣﻲ دﻫﻴﻢ) .ﺑﺎ ﻫﺮ ﺑﺎر اﺟﺮاي دﺳﺘﻮر LCDﻣﻜﺎن ﻧﻤﺎ ﺑﻪ ﻃﻮر ﺧﻮدﻛﺎر ﻳﻚ ﺳﺘﻮن ﺑﻪ ﺳﻤﺖ ﺟﻠﻮ ﺣﺮﻛـﺖ ﻣـﻲ ﻛﻨـﺪ(
ﺳﭙﺲ ﻛﺎراﻛﺘﺮ ﻣﻌﺘﺒﺮ را ﺑﺎ دﺳﺘﻮر +ﻣﻌﻤﻮﻟﻲ ﺑﻪ رﺷﺘﻪ Passاﺿﺎﻓﻪ ﻣﻲ ﻛﻨﻴﻢ و ﺑﺎ دﺳﺘﻮر Lenﻃﻮل رﺷﺘﻪ را ﻣﻲ
ﺷﻤﺎرﻳﻢ؛ در ﺻﻮرﺗﻲ ﻛﻪ 8ﻛﺎراﻛﺘﺮ وارد ﺷﺪ ﺑﺎ دﺳﺘﻮر IFﻣﺤﺘﻮاي آن را ﭼﻚ ﻣﻲ ﻛﻨﻴﻢ و در ﺻﻮرﺗﻲ ﻛﻪ ﻣﺴﺎوي ﺑﺎ
12345678ﺑﻮد روي LCDﻋﺒﺎرت Welcomeرا ﭼﺎپ ﻛﺮده و ﺑﻪ ﻣﺪت 1ﺛﺎﻧﻴﻪ LEDرا روﺷﻦ ﻣﻲ ﻛﻨﻴﻢ و
ﻣﻠﻮدي ﻛﻮﺗﺎﻫﻲ ﻣﻲ ﻧﻮازﻳﻢ و ﺑﺎ دﺳﺘﻮر Gotoﺑﻪ Mainﺑﺎز ﻣﻴﮕﺮدﻳﻢ .در ﺻﻮرت اﺷﺘﺒﺎه ﺑﻮدن رﻣﺰ ﻧﻴﺰ ﻳـﻚ ﺑـﻮق
ﺧﻄﺎ زده ﻣﻲ ﺷﻮد و روي ﻧﻤﺎﻳﺸﮕﺮ ﻋﺒﺎرت ! Errorﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮد و ﺑﻪ Mainﭘﺮش ﻣﻴﺸـﻮد .دﺳـﺘﻮر sound
ﺳﻪ آرﮔﻮﻣﺎن ﻣﻲ ﮔﻴﺮد ﻛﻪ اوﻟﻲ ﭘﻮرت ﻣﺘﺼﻞ ﺷﺪه ﺑﻪ ﺑﻠﻨﺪﮔﻮ و دوﻣﻲ و ﺳﻮﻣﻲ ﻣﺮﺑﻮط ﺑﻪ ﻓﺮﻛﺎﻧﺲ ﺻﺪا ﻣﻲ ﺑﺎﺷـﻨﺪ.
)در واﻗﻊ دوﻣﻲ ﺗﻌﺪاد ﭘﺎﻟﺴﻬﺎ و ﺳﻮﻣﻲ ﭘﺮﻳﻮد ﻫﺮ ﭘﺎﻟﺲ ﻣﻲ ﺑﺎﺷﺪ(.
***
آﺧﺮﻳﻦ ﻣﻄﻠﺐ در ﻣﻮرد LCDﺣﺎﻓﻈﻪ ﻣﻮﻗﺘﻲ 8ﻛﺎراﻛﺘﺮي آن اﺳﺖ ﻛﻪ ﺑـﺮاي ﻃﺮاﺣـﻲ ﻛﺎراﻛﺘﺮﻫـﺎي ﻏﻴـﺮ
اﺳﺘﺎﻧﺪارد ﺑﻪ ﻛﺎر ﻣﻲ رود .ﺑﻪ ﻋﻜﺲ اﺑﺘﺪاي ﻣﻘﺎﻟﻪ ﻧﮕﺎه ﻛﻨﻴﺪ؛ ﻋﺒﺎرت ﻫﺎي ﻓﺎرﺳﻲ ﻧﻮﺷﺘﻪ ﺷـﺪه ﺑـﺮ روي ﻧﻤﺎﻳﺸـﮕﺮ و
ﻫﻤﭽﻨﻴﻦ ﻋﻼﻣﺖ ﺳﻮال ﻓﺎرﺳﻲ از ﺟﻤﻠﻪ ﻛﺎراﻛﺘﺮﻫﺎي ﻃﺮاﺣﻲ ﺷﺪه ﻫﺴﺘﻨﺪ .ﺑـﺮاي ﻃﺮاﺣـﻲ ﻳـﻚ ﻛـﺎراﻛﺘﺮ ﺧـﺎص از
ﻣﻨﻮي Toolsروي LCD Designerﻛﻠﻴﻚ ﻛﺮده و ﻛﺎراﻛﺘﺮ ﺧﻮد را ﻃﺮاﺣﻲ ﻛﻨﻴﺪ و روي OKﻛﻠﻴﻚ ﻧﻤﺎﻳﻴﺪ.
در ﺟﺎﻳﻲ ﻛﻪ ﻣﻜﺎن ﻧﻤﺎ ﻗﺮار دارد ﻇﺎﻫﺮ ﻣـﻲ ﺷـﻮد .ﺑﻬﺘـﺮ
اﺳﺖ در ﺧﻄﻮط اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ اﻳﻦ ﻛـﺎر را اﻧﺠـﺎم دﻫﻴـﺪ.
ﺳﭙﺲ ﺑﺎﻳﺴﺘﻲ ﻋﻼﻣﺖ ﺳﻮال را ﺑﺎ ﻳﻚ ﻋﺪد ﺑـﻴﻦ 0ﺗـﺎ 7
ﺟﺎﻳﮕﺰﻳﻦ ﻛﻨﻴﺪ ﺗﺎ ﭼﻨﻴﻦ ﭼﻴﺰي ﺑﺪﺳﺖ آﻳﺪ:
Avr64.com
21 AVR Learning Book
)LCD Chr(0
ﺑﺎ اﻳﻦ ﻛﺎر ﻛﺎراﻛﺘﺮ ﺷﻤﺎره 0ﺑﺮ روي ﻧﻤﺎﻳﺸﮕﺮ ﻣﺸﺎﻫﺪه ﻣﻲ ﺷﻮد .در ﺻﻮرﺗﻲ ﻛﻪ ﻣـﺜﻼً 3ﻛـﺎراﻛﺘﺮ ﻣﺨﺘﻠـﻒ ﻃﺮاﺣـﻲ
ﻛﺮده اﻳﺪ و ﺗﺼﻤﻴﻢ دارﻳﺪ ﻛﻪ ﻫﺮ ﺳﻪ را ﭘﺸﺖ ﺳﺮ ﻫﻢ در ﻳﻚ ﺟﻤﻠﻪ ﻫﻤﺮاه ﺑﺎ ﻣﺘﻐﻴﺮ xﺣـﺎوي زﻣـﺎن اﻧﺘﻈـﺎر ﻧﺸـﺎن
دﻫﻴﺪ ﻋﺒﺎرات را ﺑﺎ ﺳﻤﻲ ﻛﺎﻟﻦ از ﻫﻢ ﺟﺪا ﻛﻨﻴﺪ )دﺳﺘﻮر LCDﺗﻌﺪاد زﻳﺎدي آرﮔﻮﻣﺎن ﻣﻲ ﮔﻴﺮد(:
در اﻳﻦ ﺳﺮي ﻣﻘﺎﻻت ﻓﻘﻂ اﺳﺘﺎرت اوﻟﻴﻪ ﻛﺎر زده ﺷﺪه و ﻋﻼﻗﻪ اوﻟﻴﻪ را در ﻛﺎرﺑﺮ اﻳﺠﺎد ﻣﻲ ﻛﻨﻴﻢ و ﺗﺼﻤﻴﻢ
ﻧﺪارﻳﻢ ﻛﻪ ﻛﻠﻴﻪ دﺳﺘﻮرات را از ﻫﻤﺎن اﺑﺘﺪا ﻣﻌﺮﻓﻲ ﻛﻨﻴﻢ .ﻧﻈﺮ ﺑﻪ اﻳﻨﻜﻪ در زﺑﺎن ﻫﺎي ﺳـﻄﺢ ﺑـﺎﻻ ﻛـﺎرﺑﺮ از ﺟﺰﺋﻴـﺎت
ﺳﺨﺖ اﻓﺰار ﺗﻘﺮﻳﺒﺎً دور ﻧﮕﻪ داﺷﺘﻪ ﻣﻲ ﺷﻮد ﺑﻬﺘﺮﻳﻦ روش ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﻣﻄﺎﻟﻌﻪ ﻛﺘﺎﺑﻬﺎي ﻧﻮﺷﺘﻪ ﺷﺪه در زﻣﻴﻨـﻪ ﺑﺮﻧﺎﻣـﻪ
ﻧﻮﻳﺴﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ از ﻗﺒﻴﻞ C++و VBﻣﻲ ﺑﺎﺷﺪ؛ ﭼﺮا ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﻣﻴﻜﺮو ﻫﺎ در اﻳﻦ زﺑـﺎن ﻫـﺎ ﻓﺮﻗـﻲ ﺑـﺎ ﻛـﺎﻣﭙﻴﻮﺗﺮ ﻧﺪاﺷـﺘﻪ و ﺑـﺎ
ﻣﻄﺎﻟﻌﻪ ﻛﺘﺎﺑﻬﺎ و ﻧﻤﻮﻧﻪ ﻣﺜﺎل ﻫﺎي ﻣﺨﺘﻠﻒ اﻳﺪه ﻫﺎي ﻣﺘﻔﺎوﺗﻲ در ذﻫﻦ ﻛﺎرﺑﺮ اﻳﺠﺎد ﻣﻲ ﺷﻮد .در ﻧﻬﺎﻳﺖ ﻣﻄﺎﻟﻌﻪ زﺑﺎن ﻫـﺎﻳﻲ ﻣﺜـﻞ ASP
ﻫﻢ ﺑﻪ دﻟﻴﻞ ﺷﺒﺎﻫﺖ ﺑﺴﻴﺎر زﻳﺎد ﺳﺎﺧﺘﺎر VBScriptﺑﻪ Bascomﺗﻮﺻﻴﻪ ﻣﻲ ﺷﻮد .ﺑﺮاي آﺷﻨﺎﻳﻲ ﺑﺎ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ در ﺣﺪ ﻣﻘﺪﻣﺎﺗﻲ
ﻣﻄﺎﻟﻌﻪ ﺣﺪاﻗﻞ 10ﻛﺘﺎب 1000ﺻﻔﺤﻪ اي در زﻣﻴﻨﻪ اﺳﻤﺒﻠﻲ ،C ،ﭘﺎﺳﻜﺎل و ﺑﻴﺴﻴﻚ ﺗﻮﺻﻴﻪ ﻣﻲ ﺷﻮد.
در ﺟﻠﺴﻪ ﺑﻌﺪ ﺑﻪ ﻣﻌﺮﻓﻲ دﺳﺘﮕﺎه ﻫﺎي ورودي ﺧﺮوﺟﻲ ﭘﻴﺸﺮﻓﺘﻪ ﺗﺮ از ﻗﺒﻴﻞ ﻛﻲ ﺑﺮد ﻛﺎﻣﭙﻴﻮﺗﺮ و LCDﮔﺮاﻓﻴﻜﻲ ﻣﻲ ﭘـﺮدازﻳﻢ
ﻫﻤﭽﻨﻴﻦ ﺑﺎ ﺳﻨﺴﻮر دﻣﺎي LM35و ﻧﺤﻮه راه اﻧﺪازي ﺑﺎر 220vﺗﻮﺳﻂ رﻟﻪ و ﻣﻴﻜﺮو ﺑﺮاي ﺳﺎﺧﺖ ﻳﻚ دﻣﺎﺳـﻨﺞ دﻳﺠﻴﺘـﺎل ﻫﻮﺷـﻤﻨﺪ
آﺷﻨﺎ ﻣﻲ ﺷﻮﻳﻢ.
)اﻧﺘﺸﺎر اﻳﻦ ﻣﻘﺎﻟﻪ آزاد ﺑﻮده و ﺑﺮاي ﺗﻮﻟﻴﺪ آن از ﻧﺴﺨﻪ ﺧﺮﻳﺪاري ﺷﺪه وﻳﻨﺪوز XPو MS Word 2007و ﻧﺴﺨﻪ راﻳﮕﺎن CutePDFاﺳﺘﻔﺎده ﺷﺪه اﺳﺖ،
AVR64ﺑﻪ ﺷﺪت ﺗﺎﺑﻊ ﻗﻮاﻧﻴﻦ ﻛﭙﻲ راﻳﺖ ﺑﻴﻦ اﻟﻤﻠﻠﻲ ﺑﻮده و ﺗﺤﺖ ﻫﻴﭻ ﺷﺮاﻳﻄﻲ از ﻧﺮم اﻓﺰار ﻫﺎي ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ اﺳﺘﻔﺎده ﻧﻤﻲ ﻛﻨﺪ(
Avr64.com