0% found this document useful (0 votes)
42 views21 pages

Bascom 3

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views21 pages

Bascom 3

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 21

‫ﺑﻪ ﻧﺎم ﺧﺪا‬

‫)آﻣﻮزش ‪ AVR‬ﺟﻠﺴﻪ ﺳﻮم(‬

‫)‪(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‬‬

‫ﺳﭙﺲ وارد ﺳﺮﺑﺮگ ‪ Communication‬ﺷﺪه و ﻓﺮﻛﺎﻧﺲ ‪ 1000000‬را اﻧﺘﺨﺎب ﻧﻤﻮده و در ﺳﺮﺑﺮگ‬


‫‪ Chip‬ﻧﻴﺰ ‪ m32def.dat‬را اﻧﺘﺨﺎب ﻧﻤﺎﻳﻴﺪ‪ .‬ﺑﺎ اﻧﺠﺎم اﻳﻦ دو ﺗﻨﻈﻴﻢ اﺧﻴﺮ دﻳﮕﺮ ﻧﻴﺎزي ﺑﻪ ﺗﺎﻳﭗ دﺳﺘﻮرات‬
‫”‪ $regfile=”m32def.dat‬و ‪ Crystal=1000000‬در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﻧﻴﺴﺖ‪.‬‬

‫ﭘﻨﺠﺮه ‪ 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‬را روﺷﻦ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺑﺎ ﺗﻐﻴﻴﺮ اﻧﺪﻛﻲ ﻣﻲ ﺗﻮان از آن ﺑﺮاي ﺗﺤﺮﻳﻚ ﻳﻚ رﻟـﻪ و در ﻧﻬﺎﻳـﺖ‬
‫ﺑﺎز ﻛﺮدن درب ﻣﻨﺰل اﺳﺘﻔﺎده ﻛﺮد‪.‬‬

‫ﭘﺮوژه ﻗﻔﻞ اﻣﻨﻴﺘﻲ ‪ 8‬رﻗﻤﻲ‪:‬‬

‫در ﺷﻜﻞ زﻳﺮ ﻧﻘﺸﻪ ﻗﻔﻞ اﻣﻨﻴﺘﻲ دﻳﺪه ﻣﻲ ﺷﻮد و در اﻳﻦ ﭘﺮوژه از ﻳﻚ ‪ LED‬ﺑﻪ ﻋﻨـﻮان ﺧﺮوﺟـﻲ اﺳـﺘﻔﺎده‬
‫ﺷﺪه ﻛﻪ ﻣﻲ ﺗﻮان ﺑﻪ ﺟﺎي آن ﻳﻚ رﻟﻪ ﻗﺮار داد و در ﻣﻘﺎﻟﻪ ﺑﻌﺪي ﻣﺪار ﻻزم ﺑﺮاي دراﻳﻮ رﻟﻪ ﺷﺮح داده ﻣﻲ ﺷﻮد‪ .‬ﻳﻚ‬
‫ﺑﻠﻨﺪﮔﻮي ﻛﻮﭼﻚ ‪ 8‬اﻫﻢ ﻧﻴﺰ ﻛﻪ ﺑﺎ ﻳﻚ ﻣﻘﺎوﻣﺖ ‪ 100‬اﻫﻤﻲ ﺳﺮي ﺷﺪه اﺳﺖ ﺻﺪاﻫﺎي ﺻﻔﺤﻪ ﻛﻠﻴﺪ و ﺑـﻮق ﺧﻄـﺎ و‬
‫ﻣﻮﻓﻘﻴﺖ را ﺑﻪ ﮔﻮش ﻛﺎرﺑﺮ ﻣﻲ رﺳﺎﻧﺪ‪.‬‬

‫‪Avr64.com‬‬
‫‪18‬‬ ‫‪AVR Learning Book‬‬

‫ﻣﺪار ﻗﻔﻞ رﻣﺰ را ﻣﻄﺎﺑﻖ ﺷﻜﻞ زﻳﺮ ﺑﺮ روي ‪ Bread Board‬ﺑﺒﻨﺪﻳﺪ‪:‬‬

‫ﺑﺮﻧﺎﻣﻪ زﻳﺮ را در ﺑﺴﻜﺎم ﻛﭙﻲ ﻛﺮده و ﻛﺎﻣﭙﺎﻳﻞ ﻛﻨﻴﺪ ﺗﺎ ﺑﻪ ﺗﻮﺿﻴﺢ آن ﺑﭙﺮدازﻳﻢ‪) :‬ﺗﻤﺎم ﺑﺮﻧﺎﻣﻪ ﻫﺎي اﻳﻦ ﻣﻘﺎﻟﻪ‬
‫ﺑﺎ ﻓﺮض اﻳﻨﻜﻪ ﺗﻨﻈﻴﻤﺎت ‪ 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‬ﺗﻌﺪاد زﻳﺎدي آرﮔﻮﻣﺎن ﻣﻲ ﮔﻴﺮد(‪:‬‬

‫”‪LCD “Wait,”;Chr(5);Chr(0);Chr(6);x;” Min‬‬

‫در اﻳﻦ ﺳﺮي ﻣﻘﺎﻻت ﻓﻘﻂ اﺳﺘﺎرت اوﻟﻴﻪ ﻛﺎر زده ﺷﺪه و ﻋﻼﻗﻪ اوﻟﻴﻪ را در ﻛﺎرﺑﺮ اﻳﺠﺎد ﻣﻲ ﻛﻨﻴﻢ و ﺗﺼﻤﻴﻢ‬
‫ﻧﺪارﻳﻢ ﻛﻪ ﻛﻠﻴﻪ دﺳﺘﻮرات را از ﻫﻤﺎن اﺑﺘﺪا ﻣﻌﺮﻓﻲ ﻛﻨﻴﻢ‪ .‬ﻧﻈﺮ ﺑﻪ اﻳﻨﻜﻪ در زﺑﺎن ﻫﺎي ﺳـﻄﺢ ﺑـﺎﻻ ﻛـﺎرﺑﺮ از ﺟﺰﺋﻴـﺎت‬
‫ﺳﺨﺖ اﻓﺰار ﺗﻘﺮﻳﺒﺎً دور ﻧﮕﻪ داﺷﺘﻪ ﻣﻲ ﺷﻮد ﺑﻬﺘﺮﻳﻦ روش ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﻣﻄﺎﻟﻌﻪ ﻛﺘﺎﺑﻬﺎي ﻧﻮﺷﺘﻪ ﺷﺪه در زﻣﻴﻨـﻪ ﺑﺮﻧﺎﻣـﻪ‬
‫ﻧﻮﻳﺴﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ از ﻗﺒﻴﻞ ‪ C++‬و ‪ VB‬ﻣﻲ ﺑﺎﺷﺪ؛ ﭼﺮا ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﻣﻴﻜﺮو ﻫﺎ در اﻳﻦ زﺑـﺎن ﻫـﺎ ﻓﺮﻗـﻲ ﺑـﺎ ﻛـﺎﻣﭙﻴﻮﺗﺮ ﻧﺪاﺷـﺘﻪ و ﺑـﺎ‬
‫ﻣﻄﺎﻟﻌﻪ ﻛﺘﺎﺑﻬﺎ و ﻧﻤﻮﻧﻪ ﻣﺜﺎل ﻫﺎي ﻣﺨﺘﻠﻒ اﻳﺪه ﻫﺎي ﻣﺘﻔﺎوﺗﻲ در ذﻫﻦ ﻛﺎرﺑﺮ اﻳﺠﺎد ﻣﻲ ﺷﻮد‪ .‬در ﻧﻬﺎﻳﺖ ﻣﻄﺎﻟﻌﻪ زﺑﺎن ﻫـﺎﻳﻲ ﻣﺜـﻞ ‪ASP‬‬
‫ﻫﻢ ﺑﻪ دﻟﻴﻞ ﺷﺒﺎﻫﺖ ﺑﺴﻴﺎر زﻳﺎد ﺳﺎﺧﺘﺎر ‪ VBScript‬ﺑﻪ ‪ Bascom‬ﺗﻮﺻﻴﻪ ﻣﻲ ﺷﻮد‪ .‬ﺑﺮاي آﺷﻨﺎﻳﻲ ﺑﺎ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ در ﺣﺪ ﻣﻘﺪﻣﺎﺗﻲ‬
‫ﻣﻄﺎﻟﻌﻪ ﺣﺪاﻗﻞ ‪ 10‬ﻛﺘﺎب ‪ 1000‬ﺻﻔﺤﻪ اي در زﻣﻴﻨﻪ اﺳﻤﺒﻠﻲ‪ ،C ،‬ﭘﺎﺳﻜﺎل و ﺑﻴﺴﻴﻚ ﺗﻮﺻﻴﻪ ﻣﻲ ﺷﻮد‪.‬‬

‫در ﺟﻠﺴﻪ ﺑﻌﺪ ﺑﻪ ﻣﻌﺮﻓﻲ دﺳﺘﮕﺎه ﻫﺎي ورودي ﺧﺮوﺟﻲ ﭘﻴﺸﺮﻓﺘﻪ ﺗﺮ از ﻗﺒﻴﻞ ﻛﻲ ﺑﺮد ﻛﺎﻣﭙﻴﻮﺗﺮ و ‪ LCD‬ﮔﺮاﻓﻴﻜﻲ ﻣﻲ ﭘـﺮدازﻳﻢ‬
‫ﻫﻤﭽﻨﻴﻦ ﺑﺎ ﺳﻨﺴﻮر دﻣﺎي ‪ LM35‬و ﻧﺤﻮه راه اﻧﺪازي ﺑﺎر ‪ 220v‬ﺗﻮﺳﻂ رﻟﻪ و ﻣﻴﻜﺮو ﺑﺮاي ﺳﺎﺧﺖ ﻳﻚ دﻣﺎﺳـﻨﺞ دﻳﺠﻴﺘـﺎل ﻫﻮﺷـﻤﻨﺪ‬
‫آﺷﻨﺎ ﻣﻲ ﺷﻮﻳﻢ‪.‬‬

‫اداﻣﻪ دارد ‪...‬‬

‫)اﻧﺘﺸﺎر اﻳﻦ ﻣﻘﺎﻟﻪ آزاد ﺑﻮده و ﺑﺮاي ﺗﻮﻟﻴﺪ آن از ﻧﺴﺨﻪ ﺧﺮﻳﺪاري ﺷﺪه وﻳﻨﺪوز ‪ XP‬و ‪ MS Word 2007‬و ﻧﺴﺨﻪ راﻳﮕﺎن ‪ CutePDF‬اﺳﺘﻔﺎده ﺷﺪه اﺳﺖ‪،‬‬
‫‪ AVR64‬ﺑﻪ ﺷﺪت ﺗﺎﺑﻊ ﻗﻮاﻧﻴﻦ ﻛﭙﻲ راﻳﺖ ﺑﻴﻦ اﻟﻤﻠﻠﻲ ﺑﻮده و ﺗﺤﺖ ﻫﻴﭻ ﺷﺮاﻳﻄﻲ از ﻧﺮم اﻓﺰار ﻫﺎي ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ اﺳﺘﻔﺎده ﻧﻤﻲ ﻛﻨﺪ(‬

‫ﻣﻮﻟﻒ‪ :‬ﺑﻬﻨﺎم زﻛﻲ زاده‬


‫‪www.avr64.com‬‬
‫‪ 2‬ﻓﺮوردﻳﻦ ‪1389‬‬
‫آﺧﺮﻳﻦ وﻳﺮاﻳﺶ‪ 13 :‬ﻣﻬﺮ ‪ 1392‬‬

‫‪Avr64.com‬‬

You might also like