'**************************************************************** '* дисплей для БП * '* NOKIA-1616 разрешение 128х160 * '**************************************************************** '-------------------------- Опции компилятора -------------------------------- Declare SHOW_SYSTEM_VARIABLES = OFF ' При симуляции в Proteus не показывать внутренние переменные Declare FSR_CONTEXT_SAVE = OFF ' Не заботиться о сохранении содержимого регистра FSR Declare Reminders = OFF ' Выключить напоминания компилятора Declare Warnings = OFF ' Выключить предупреждения компилятора Declare Optimiser_Level 0 ' Выключить оптимизацию программы '-------------------------- Общие настройки------------------------------------ Device = 16F690 ' Используемый микроконтроллер Xtal = 20 ' Частота осциллятора 20МГц Declare All_Digital = OFF ' Установить все порты цифровыми входами/выходами '-------------------------- Конфигурация программирования -------------------- Config MCLRE_OFF, HS_OSC , WDT_OFF , PWRTE_ON , CP_OFF , BOR_OFF 'INTRC_OSC_NOCLKOUT TRISA=%00000011 'выводы AN0 и AN1 настроены на вход TRISB=%00000000 ' -//- SCK=0 TRISC=%01000000 'все выводы цифровые SDO=0, SS=1 PORTA=%00000000 'все выводы на 0 PORTB=%00000000 ' -//- PORTC=%01000000 'все выводы на 0 SDO=0, SS=1 'настройка SPI SSPSTAT =%01000000 SSPCON =%00100000 '---------------------- Назначение пинов для SPI ----------------------------- 'Symbol CS=PORTB.5 ' переменная 'Symbol SDA=PORTB.4 ' линия данных 'Symbol SCLK=PORTB.6 ' линия тактирования 'Symbol RESE=PORTB.7 ' сброс дисплея RES можно соединить с Vdd и данный вывод не использовать '************************************************************************************** Dim Com As Byte 'переменная команды Dim Par As Word 'переменная данных (параметров) '******************************* переменные цвета ************************************* $define rgb_color_pack(r, G, b) ( r << 11) | ( G << 5) | ( b) Dim Color As Word Dim Cikl_Color As Word Dim N_Color As Word 'количество точек одного цвета '***************** переменные для вывода символа, точки ******************** Dim X1 As Byte 'первая координата Х1 Dim X2 As Byte 'вторая координата Х2 Dim Y1 As Byte 'первая координата У1 Dim Y2 As Byte 'вторая координата У2 '************************************************************** GoSub Nokia_1616_Init' инициализация дисплея GoSub Nokia_1616_Cls ' очистка дисплея (белым цветом) Main: 'выводим напряжение GoTo Main '---------------------- Инициализация дисплея ---------------------------- Nokia_1616_Init: Com=$01: GoSub Nokia_1616_Com: DelayUS 40 'Software Reset (софтовый сброс) Com=$11: GoSub Nokia_1616_Com: DelayUS 40 Com=$29: GoSub Nokia_1616_Com: DelayUS 40 Com=$3A: GoSub Nokia_1616_Com: Par=$0500: GoSub Nokia_1616_Par Com=$13: GoSub Nokia_1616_Com Com=$36: GoSub Nokia_1616_Com: Par=$0000: GoSub Nokia_1616_Par Return '------------------------------ Send Command (передача команды) ----------------------------------- Nokia_1616_Com: ''CS = 0 : SCLK = 0 : SDA = 0 : SCLK = 1 ''SHOut SDA, SCLK, MsbFirst, [Com] 'передача данных While SSPCON.7 = 1: Wend ' ждем, если буфер не пустой SSPBUF = Com ' подаем следующий байт ''CS = 1 Return '--------------------------- Send Parameter (передача параметров) --------------------------------- Nokia_1616_Par: ''CS = 0 ''SCLK = 0 : SDA = 1 : SCLK = 1 ''SHOut SDA, SCLK, MsbFirst, [Par.HighByte] 'передача старшего байта данных While SSPCON.7 = 1: Wend ' ждем, если буфер не пустой SSPBUF = Par.HighByte ' подаем следующий байт ''SCLK = 0 : SDA = 1 : SCLK = 1 ''SHOut SDA, SCLK, MsbFirst, [Par.LowByte] 'передача младшего байта данных While SSPCON.7 = 1: Wend ' ждем, если буфер не пустой SSPBUF = Par.LowByte ' подаем следующий байт ''CS = 1 Return '----------------------------------- Установка координат ------------------------------------------ X_Y_Set: Com=$2A: GoSub Nokia_1616_Com: Par=X1: GoSub Nokia_1616_Par 'X=1 Par_High=$00: Par_Low=X1: Par=X2: GoSub Nokia_1616_Par 'X=2 Par_High=$00: Par_Low=X2: Com=$2B: GoSub Nokia_1616_Com: Par=Y1: GoSub Nokia_1616_Par 'Y=1 Par_High=$00: Par_Low=Y1: Par=Y2: GoSub Nokia_1616_Par 'Y=2 Par_High=$00: Par_Low=Y2: Com=$2C: GoSub Nokia_1616_Com 'записали команду в память Return '------------------------------------- Вывод цвета -------------------------------------------- Nokia_Color: ''CS = 0 For Cikl_Color = 0 To N_Color ''SCLK = 0 : SDA = 1 : SCLK = 1 ''SHOut SDA, SCLK, MsbFirst, [Color.HighByte] 'передача данных 'старший байт While SSPCON.7 = 1: Wend ' ждем, если буфер не пустой SSPBUF = Color.HighByte ' подаем следующий байт ''SCLK = 0 : SDA = 1 : SCLK = 1 ''SHOut SDA, SCLK, MsbFirst, [Color.LowByte] 'передача данных 'младший байт While SSPCON.7 = 1: Wend ' ждем, если буфер не пустой SSPBUF = Color.LowByte ' подаем следующий байт Next Cikl_Color N_Color=0 ''CS = 1 Return '-------------------------------------- Очистка дисплея ------------------------------------------- Nokia_1616_Cls: X1=1: X2=132: Y1=00: Y2=160: GoSub X_Y_Set Color=rgb_color_pack(0,0,0): N_Color=21120: GoSub Nokia_Color 'для примера заполняем экран белым цветом 255,255 Return