$Regfile = "attiny2313.dat" $Crystal = 500000 $hwstack = 40 $swstack = 16 $framesize = 32 '$sim Config lcdpin = PIN , DB4 = PORTb.4 , DB5 = PORTb.5 , DB6 = PORTb.6 , DB7 = PORTb.7 , E = PORTb.1 , RS = PORTb.0 Config lcd = 16 * 2 Initlcd Cursor Off Deflcdchar 0 , 15 , 31 , 31 , 31 , 31 , 31 , 31 , 15 Deflcdchar 1 , 30 , 31 , 31 , 31 , 31 , 31 , 31 , 30 Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32 Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31 Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 24 , 28 Deflcdchar 5 , 32 , 32 , 32 , 32 , 32 , 32 , 24 , 28 Deflcdchar 6 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31 Deflcdchar 7 , 28 , 28 , 32 , 32 , 32 , 32 , 24 , 28 Dim Posx As Byte Dim Posy As Byte Dim I As Byte Declare Sub Style Declare Sub Digit '* * * заводим переменные для своих нужд Dim Seco As Byte Dim Mine As Byte Dim Hour As Byte Config Portb.2 = Output 'выход ШИМ Config Timer0 = Pwm , Compare A Pwm = Clear Up , Prescale = 8 Config Timer1 = Timer , Prescale = 8 ' 1|8|64|256|1024 4000000/64= 62500-65536= -3036 On Timer1 Pulse ' 1|8|64|256|1024 4000000/64= 62500-65536= -3036 const Timer1pre = 3036 Timer1 = Timer1pre config PORTD.0 = INPUT : PORTD.0 = 1 config PORTD.1 = INPUT : PORTD.1 = 1 'config PORTD.2 = OUTPUT config PORTD.3 = INPUT : PORTD.3 = 1 config PORTD.4 = INPUT : PORTD.4 = 1 config PORTD.5 = INPUT : PORTD.5 = 1 config PORTD.6 = INPUT : PORTD.6 = 1 Start Timer1 Start Timer0 Enable Interrupts Enable Timer1 seco = 00 mine = 30 hour = 12 Pwm0a = 128 cls do if seco > 59 then seco = 0 incr mine end if IF PIND.1 = 0 THEN INCR MINE IF PIND.3 = 0 THEN DECR MINE if mine > 200 then MINE = 59 if mine > 59 then mine = 0 incr hour end if IF PIND.4 = 0 THEN INCR hour IF PIND.5 = 0 THEN DECR hour if hour > 200 then hour = 23 if hour > 23 then hour = 0 WHILE PIND.6 = 0 AND Pwm0a <> 255 INCR Pwm0a WAITMS 5 WEND WHILE PIND.0 = 0 AND Pwm0a <> 0 DECR Pwm0a WAITMS 25 WEND Call Style WAITMS 333 loop Pulse: 'Stop Timer1 Timer1 = Timer1pre 'Start Timer1 incr seco Return Sub Style Posx = 1 i = hour / 10 Call Digit i = hour mod 10 Posx = 4 Call Digit i = mine / 10 Posx = 10 Call Digit i = mine mod 10 Posx = 14 Call Digit Locate 1 , 9 Lcd "." 'i = Seco mod 10 locate 2 , 9 Lcd "." End Sub Sub Digit: if posx = 4 then incr posx 'Select Case Stroka if i = 0 then Locate 1 , Posx Lcd Chr(0) ; Chr(2) ; Chr(1) Locate 2 , Posx Lcd Chr(0) ; Chr(3) ; Chr(1) end if '-------------------------------------- if i = 1 then Locate 1 , Posx Lcd Chr(2) ; Chr(1) ; " " Locate 2 , Posx Lcd Chr(3) ; Chr(0) ; Chr(3) end if '-------------------------------------- if i = 2 then Locate 1 , Posx Lcd Chr(2) ; Chr(6) ; Chr(1) Locate 2 , Posx Lcd Chr(0) ; Chr(3) ; Chr(3) end if '-------------------------------------- if i = 3 then: Locate 1 , Posx Lcd Chr(6) ; Chr(6) ; Chr(1) Locate 2 , Posx Lcd Chr(3) ; Chr(3) ; Chr(1) end if '-------------------------------------- if i = 4 then Locate 1 , Posx Lcd Chr(1) ; " " ; Chr(3) Locate 2 , Posx Lcd Chr(2) ; Chr(2) ; Chr(0) end if '-------------------------------------- if i = 5 then Locate 1 , Posx Lcd Chr(0) ; Chr(6) ; Chr(4) Locate 2 , Posx Lcd Chr(3) ; Chr(3) ; Chr(1) end if '-------------------------------------- if i = 6 then Locate 1 , Posx Lcd Chr(0) ; Chr(6) ; Chr(7) Locate 2 , Posx Lcd Chr(0) ; Chr(3) ; Chr(1) end if '-------------------------------------- if i = 7 then Locate 1 , Posx Lcd Chr(2) ; Chr(2) ; Chr(1) Locate 2 , Posx Lcd " " ; " " ; Chr(1) end if '-------------------------------------- if i = 8 then Locate 1 , Posx Lcd Chr(0) ; Chr(6) ; Chr(1) Locate 2 , Posx Lcd Chr(0) ; Chr(3) ; Chr(1) end if '-------------------------------------- if i = 9 then Locate 1 , Posx Lcd Chr(0) ; Chr(6) ; Chr(1) Locate 2 , Posx Lcd Chr(3) ; Chr(3) ; Chr(1) '" " ; Chr(3) ; Chr(1) end if '-------------------------------------- '(if i = 10 then i = Seco / 10 Locate 2 , 8 Lcd i i = Seco mod 10 Locate 2 , 9 Lcd i end if ') End Sub