![]() КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Программа опроса клавиатуры и вывода сообщения на LCD индикатор ⇐ ПредыдущаяСтр 4 из 4 /* Драйвер LCD дисплея для стенда TB51M */
#include <at89c51xd2.h>//Описание регистров контроллера #include <stdio.h> #include <intrins.h> // Библиотека, содержащая _nop_ void BeepBeep(); #include <KBDDriv.c> // Драйвер клавиатуры #define Read 1 #define Write 0 #define Data_Reg 1 #define Com_Reg 0 #define E_Strobe E=1; _nop_(); E=0 #define Line_0 0 #define Line_1 1
#define Tic -(11592/120*5) // 1 мс #define HP 1
/* Описание аппаратных средств */ /* LCD индикатор подключен к порту P0 */
/* Биты управления */ sbit RS = P2^0;// Переключение регистра: данные/команда sbit RW =P2^1;// Переключение режима: чтение/запись sbit E =P3^5; // Строб записи sbit BUSY=P0^7;// Бит занятости в регистре состояния sbit Beep =P3^3; code unsigned char Text0[] = "LCD Test"; code unsigned char Text1[] = "Hello!"; data unsigned char txtbuf[10];
/* Подпрограммы обслуживания дисплея */ /* Ожидания сброса флага занятости */ void Wait_BW (void) { P0 = 0xFF; // Сброс порта для чтения RW = Read; // Режим - чтение RS = Com_Reg; // Регистр команды E = 1; // Открыть регистр для чтения Продолжение приложения while (BUSY == 1){} // Ждать готовность дисплея E = 0; // Отключить шину данных } /* Вывод байта в регистр команды*/ void Put_Com (unsigned char Command){ Wait_BW(); // Ждать готовность RW = Write; // Режим - запись RS = Com_Reg; // Регистр команды P0 = Command; // Данные в порт E_Strobe; // Строб записи в регистр } // Вывод данных void Put_Data(unsigned char Data){ Wait_BW(); // Ждать готовность RS = Data_Reg; // Регистр данных RW = Write; // Режим - запись P0 = Data; // Данные в порт E_Strobe; // Строб записи данных }
void LCD_Init (void) { E = 0; Put_Com (0x38); Put_Com (0x0C); Put_Com (0x06); Put_Com (0x01); }
void Timer_Init(void){ TMOD = 0x01; }
void Delay(unsigned char Dl){ do { TH0 = (Tic >> 8); TL0 = Tic; TR0 = 1; while(!TF0); TF0 = 0; TR0 = 0; } while (--Dl); }
Окончание приложения void BeepBeep(){ unsigned char i; for (i=0; i<100;i++){ Beep = 0; Delay(HP); Beep = 1; Delay(HP);} }
void Put_String(unsigned char Str[],unsigned char Line) { data char i; data unsigned char C; if(Line) Put_Com(0xC0); else Put_Com(0x80);//Номер строки i = 0; // Счетчик символов do { // Цикл вывода строки C = Str[i++]; Put_Data(C); } while (Str[i]!= 0); // Признак конца - 0 } void PrintKeyKode(char Key) { data int N; N = sprintf(txtbuf,"Key:0x%2bX",Key); Put_String(txtbuf,0); } void main (void) { unsigned char Key,i; Timer_Init(); LCD_Init(); Put_String(Text0,Line_0); Put_String(Text1,Line_1);
for (i=0; i<50;i++) Delay(100); // Put_Com (0x01); while(1){ Key = GetKey(); if (Key) { PrintKeyKode(Key); Key = 0; } }; } Основы микропроцессорной техники: методические указания к выполнению лабораторных работ для студентов направления 210100 - “Электроника и наноэлектроника”
АЛЕКСАНДР ИВАНОВИЧ ВЛАСОВ
Научный редактор В.Ф. Зотин Редактор издательства Компьютерный набор А.И. Власов
Темплан 2015 г., п. Подписано в печать . Формат 60х84 1/16. Бумага офсетная. Офсетная печать. Усл. печ.л. 1,52. Уч.-изд.л. 1,52. Тираж 10 экз. Заказ . Бесплатно.
Издательство Брянского государственного технического университета 241035, Брянск, бульвар 50-летия Октября, 7, БГТУ. 58-82-49. Лаборатория оперативной полиграфии БГТУ, ул. Институтская, 16.
|