راه اندازی ال سی دی کاراکتری
در این بخش تیم الکترونیک و برنامه نویسی الکترونیک ۹۸, اقدام به طراحی و انتشار پروژه ای کاربردی و حرفه ای با عنوان, راه اندازی ال سی دی کاراکتری به کمک تنها 3 سیم, برای شما علاقه مندان به پروژه های میکروکنترلر AVR کرده است. در بسیاری از پروژه ها ما نیاز داریم تا برخی اطلاعات را توسط نمایشگرها به کاربران نمایش دهیم، به صورت کلی LCD های موجود به دو دسته LCD گرافیکی و LCD کاراکتری تقسیم می شوند. یکی از پر کاربردترین ال سی دی ها جهت نمایش اطلاعات متنی در پروژه های میکروکنترلرهای AVR ال سی دی های کاراکتری می باشد.
نقشه شماتیک پروژه
سخت افزار پروژه
LCD های کاراکتری ابعاد مختلفی دارند و معمولا 16 پایه می باشند. اصولا در نرم افزار BASCOM-AVR برای راه اندازی ال سی دی های کاراکتری باید 6 پایه از میکروکنترلر AVR را به 6 پایه از LCD کاراکتری متصل کنیم. در برخی پروژه ها مواردی پیش می آید که پایه های میکروکنترلر برای راه اندازی ماژول ها و یا دیگر موارد اشغال شده، به همین دلیل تعداد پایه کافی برای راه اندازی یک ال سی دی کاراکتری وجود ندارد. برای رفع این مشکل در این پروژه می خواهیم یک LCD کاراکتری رو با استفاده از 3 پایه میکروکنترلر ATmega8 توسط آی سی 74HC595 راه اندازی کنیم.
در این پروژه به کمک آی سی 74HC595 که یک تراشه شیفت رجیستر سریال 8 بیتی است، با سه رشته سیم یک LCD کاراکتری را به میکروکنترلر AVR متصل می کنیم. شما دوستان عزیز می توانید با استفاده از روش برنامه نویسی ارائه شده در بالا LCD کاراکتری را پیکربندی نموده و سپس با استفاده از دستورات ارائه شده، همانند برنامه فوق متن های مورد نظر خود را بر روی ال سی دی کاراکتری نمایش بدهید.
برنامه میکروکنترلر به زبان بیسیک BASIC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 64 $swstack = 64 $framesize = 64 '-------------------------------------------- Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output '-------------------------------------------- Dat Alias Portb.0 Clk Alias Portb.1 Rck Alias Portb.2 '-------------------------------------------- Dim Rse As Byte Dim I As Byte Dim Lcd_string As String * 20 Dim Character(21) As Byte At Lcd_string Overlay '-------------------------------------------- Declare Sub Write_lcd_cmd8(byval Cmd As Byte) Declare Sub Write_lcd_cmd(byval Cmd As Byte) Declare Sub Write_lcd_txt(byval Txt As Byte) Declare Sub Init_3w Declare Sub Cls_3w Declare Sub Lcd_3w(byval Lcdstring As String) Declare Sub Locate_3w(byval Y As Byte , Byval X As Byte) '-------------------------------------------- Call Init_3w Call Cls_3w '-------------------------------------------- Do Call Locate_3w(1 , 1) : Call Lcd_3w( "THIS IS FOR 20X4 LCD") Call Locate_3w(2 , 1) : Call Lcd_3w( "TEST CODE BASCOM-AVR") Call Locate_3w(3 , 1) : Call Lcd_3w( "74HC595 20X4 HD44780") Call Locate_3w(4 , 1) : Call Lcd_3w( " electronics98.com ") Wait 4 Call Cls_3w Call Locate_3w(1 , 1) : Call Lcd_3w( "LINE 1") Wait 1 Call Locate_3w(2 , 1) : Call Lcd_3w( "LINE 2") Wait 1 Call Locate_3w(3 , 1) : Call Lcd_3w( "LINE 3") Wait 1 Call Locate_3w(4 , 1) : Call Lcd_3w( "LINE 4") Wait 2 Call Cls_3w Call Locate_3w(1 , 20) : Call Lcd_3w( "1") Wait 1 Call Locate_3w(2 , 20) : Call Lcd_3w( "2") Wait 1 Call Locate_3w(3 , 20) : Call Lcd_3w( "3") Wait 1 Call Locate_3w(4 , 20) : Call Lcd_3w( "4") Wait 2 Call Cls_3w Wait 1 Loop '-------------------------------------------- Sub Write_lcd_cmd8(byval Cmd As Byte) Rse = &B01 For I = 0 To 1 Shiftout Dat , Clk , Rse , 2 , 2 Shiftout Dat , Clk , Cmd , 2 , 4 Rck = 0 Rck = 1 Rck = 0 Toggle Rse.0 Next End Sub '-------------------------------------------- Sub Write_lcd_cmd(byval Cmd As Byte) Swap Cmd Rse = &B01 For I = 0 To 3 If I = 2 Then Swap Cmd Shiftout Dat , Clk , Rse , 2 , 2 Shiftout Dat , Clk , Cmd , 2 , 4 Rck = 0 Rck = 1 Rck = 0 Toggle Rse.0 Next End Sub '-------------------------------------------- Sub Write_lcd_txt(byval Txt As Byte) Swap Txt Rse = &B11 For I = 0 To 3 If I = 2 Then Swap Txt Shiftout Dat , Clk , Rse , 2 , 2 Shiftout Dat , Clk , Txt , 2 , 4 Rck = 0 Rck = 1 Rck = 0 Toggle Rse.0 Next Asc End Sub '-------------------------------------------- Sub Init_3w Waitms 20 Call Write_lcd_cmd8(&B0000_0011) Waitms 5 Call Write_lcd_cmd8(&B0000_0011) Waitms 5 Call Write_lcd_cmd8(&B0000_0011) Waitms 5 Call Write_lcd_cmd8(&B0000_0010) Waitms 5 Call Write_lcd_cmd(&B0010_1000) Waitms 5 Call Write_lcd_cmd(&B0000_1100) Waitms 5 Call Write_lcd_cmd(&B0000_0100) Waitms 5 End Sub '-------------------------------------------- Sub Cls_3w Call Write_lcd_cmd(&B0000_0001) Waitms 5 End Sub '-------------------------------------------- Sub Locate_3w(byval Y As Byte , Byval X As Byte) Decr X Call Write_lcd_cmd(&B0000_0010) Waitms 5 If Y = 1 Then Call Write_lcd_cmd(&H80 + X) Elseif Y = 2 Then Call Write_lcd_cmd(&Hc0 + X) Elseif Y = 3 Then Call Write_lcd_cmd(&H94 + X) Elseif Y = 4 Then Call Write_lcd_cmd(&Hd4 + X) End If End Sub '-------------------------------------------- Sub Lcd_3w(byval Lcdstring As String) Local Strlen As Byte Local A As Byte Strlen = Len(lcdstring) Lcd_string = Lcdstring For A = 1 To Strlen Call Write_lcd_txt(character(a)) Next End Sub |
سلام من نیاز به سورس این برنامه بزبان سی دارم و و ال سی دی را در مد 8 بیت همراه با 74595 و atmega32 استفاده میکنم. آیا ممکن است این برنامه را برای من بفرستید؟
سلام دوست عزیز
متاسفانه برنامه این پروژه به زبان C موجود نیست.
سلام
برنامه رو تو Proteus شبیه ساز ی نمودم ولی خطوط زوج رو نشون نمیده