1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/huang_daming-stc89c52

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Основы экспериментального примера обновления

Базовый эксперимент по обновлению примера:

Keil C51 компилятор исходного кода (https://github.com/hongwenjun/stc89c52/tree/master/src)

Исходный код SDCC lib (https://github.com/hongwenjun/stc89c52/tree/master/sdcc/lib_src)

CodeBlocks + Keil_C51 Компилятор C51 Однокристальный микрокомпьютер: настройка видео для обучения

Рекомендация двух базовых видеоуроков для начинающих

Схема принципа работы одночиповой микросхемы HC6800-ES V2.0 (новая версия).pdf (https://github.com/hongwenjun/stc89c52/tree/master/Document)

Справочник по другим компонентам платы разработки (https://github.com/hongwenjun/img/tree/master/c51)


Настройка CodeBlocks с использованием компилятора Keil_C51 для одночиповых микрокомпьютеров

  • Компилятор Keil uVision5 C51 (https://www.keil.com/download/product/)

    • Каталог установки: C:\Keil
  • Настройки CodeBlocks, выбор компилятора Keil C51:

Каталог компилятора: C:\Keil\C51
Каталог поиска файлов заголовков компилятора: C:\Keil\C51\INC
Каталог поиска библиотечных файлов компилятора: C:\Keil\C51\LIB

Преобразование инструмента HEX настройки

Имя: Keil_C51 компиляция_создание HEX
Исполняемая программа: OH51.EXE
$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).omf

CodeBlocks + компилятор SDCC с открытым исходным кодом для C51 одночиповых микрокомпьютеров

SDCC — это оптимизирующий компилятор ANSI C89, ISO C99 и ISO C11 с малым размером устройства для микропроцессоров на базе Intel MCS51 (8031, 8032, 8051, 8052 и т. д.), Maxim (ранее Dallas) DS80C390, Freescale (ранее Motorola) на основе HC08 (hc08, s08), Zilog Z80 на основе MCU (z80, z180, gbz80, Rabbit 2000/3000, Rabbit 3000A, TLCS-90), Padauk (pdk14, pdk15) и STMicroelectronics STM8. В настоящее время ведётся работа над поддержкой Padauk (pdk13), Microchip PIC16 и PIC18. Он может быть повторно настроен на другие микропроцессоры.

  • SDCC компилятор с открытым исходным кодом (http://sdcc.sourceforge.net)

    • Рекомендованный каталог установки: C:\sdcc
  • Настройка CodeBlocks, выберите компилятор SDCC:

Каталог компилятора: C:\sdcc
Каталог поиска файлов заголовков: C:\sdcc\include
Каталог поиска библиотек: C:\sdcc\lib

# Создание нового проекта CodeBlocks, выбор MCS51 Project, по умолчанию выбирается компилятор SDCC, шаблон автоматически добавляет команду преобразования C51 в файл HEX
cmd /c "packihx <$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).ihx >$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).hex"

Эксперимент 1. Мигание светодиода и бегущая строка исходный код

Эксперимент 2. Использование зуммера для воспроизведения музыки [исходный код] (https://github.com/hongwenjun/stc89c52/tree/master/2-beep_music)

// Музыкальный проигрыватель: порхающая девушка, одна и та же песня, две бабочки
void main()
{
    InitialSound();
    while (1) {
        keypros();

        // K1 кнопка для выбора песни «Две бабочки»
        if (key_id == 1) {
            Play(Music_Two, 0, 3, 360);
            Delay1ms(500);

            key_id = 0;
        }
        // K2 кнопка для выбора песни «Порхающая девушка»
        // K3 кнопка для выбора той же песни
        // K4 звуковой сигнал
    }
}

Эксперимент 3. Динамическое отображение чисел на семисегментном дисплее [исходный код] (https://github.com/hongwenjun/stc89c52/tree/master/3-led_segment_displays)

Подарок: семисегментный дисплей с 7 сегментами и 26 буквами

sbit LSA = P2 ^ 2;
sbit LSB = P2 ^ 3;
sbit LSC = P2 ^ 4; // Управление выходом Y0 38-го декодера с низким уровнем напряжения

u8 code smgduan[] = {
    0x3f, 0x06, 0x5b, 0x4f, 0x66, // 0 1 2 3 4
    0x6d, 0x7d, 0x07, 0x7f, 0x6f, // 5 6 7 8 9
    0x77, 0x7c, 0x39, 0x5e, 0x79, // A B C D E
    0x71, 0x00                   // F NULL
};

— Файл: * Семисегментный дисплей — таблица из 26 букв и символов.xls * используется для расширения пользовательских букв и знаков.

Эксперимент 4. Матричная клавиатура [исходный код] (https://github.com/hongwenjun/stc89c52/tree/master/4-matrix_key)

void KeyDown(void)
{
  char a=0;
  GPIO_KEY=0x0f;
  if(GPIO_KEY!=0x0f)//чтение кнопки, чтобы увидеть, нажата ли она
  {
    delay(1000);//задержка 10 мс для устранения дребезга
    if(GPIO_KEY!=0x0f)//повторное определение, нажата ли кнопка
    {
      //тестирование столбца
      GPIO_KEY=0X0F;
      switch(GPIO_KEY)
      {
          case(0X07):   KeyValue=0;break;
          case(0X0b):   KeyValue=1;break;
          case(0X0d): KeyValue=2;break;
          case(0X0e):   KeyValue=3;break;
      }
      //проверка строки
      GPIO_KEY=0XF0;
      switch(GPIO_KEY)
      {
          case(0X70):   KeyValue=KeyValue;break;
          case(0Xb0):   KeyValue=KeyValue+4;break;
          case(0Xd0): KeyValue=KeyValue+8;break;
          case(0Xe0):   KeyValue=KeyValue+12;break;
      }

``` **5. 8*8LED матрица  эксперимент по отображению текста**

В то время как (a < 50) и (GPIO_KEY != 0xf0), {
    delay(1000);
    a++;
}
}  

**6. Таймер и прерывание**

// Прерывание по таймеру
void Timer0Init(void) { // 2 мс при 12 МГц
  EA = 1 ; // Разрешить все прерывания
  TMOD &= 0xFC;       // Установить режим таймера
  TMOD |= 0x01;
  TH0 = (655536 - 2000) / 256;  // 2мс
  TL0 = (655536 - 2000) % 256;
  ET0 = 1;       // Включить таймер 0
  TR0 = 1;        // Запустить таймер 0
}

void inter_timer0() interrupt 1 {
  static unsigned int cnt;
  cnt++;
  if (cnt >= 1000) {   // 2мс * 1000 = 2 секунды срабатывания
      cnt = 0;
      P2 = ~P2;
  }
}

**7. Управление кнопкой для внешнего прерывания**

#include <reg51.h>

// K3 независимая кнопка вызывает внешнее прерывание INT0
// Внешняя процедура обслуживания прерываний 0 // Внешнее прерывание 0
void exint0() interrupt 0 {
    P2++;      // Светодиод в группе P2 I/O порт
}

void main() {
    IT0 = 1;    // Установить тип INT0 int (1: спад, 0: низкий уровень)
    EX0 = 1;    // Разрешить прерывание INT0
    EA = 1;     // Открыть глобальный переключатель прерываний

    while (1);
}

**8. Знакомство с ЖК-модулем LCD1602**

#define LcdDB  P0       // D0-D7 — 8-битные двунаправленные линии данных для передачи данных или команд
sbit  LcdRS = P2 ^ 6;   // RS — выбор регистра, высокий уровень выбирает регистр данных, низкий уровень выбирает регистр команд
sbit  LcdRW = P2 ^ 5;   // R/W — линия чтения/записи, высокий уровень для операции чтения, низкий уровень для записи
sbit  LcdEN = P2 ^ 7;   // E — разрешение, когда высокий уровень переходит в низкий, ЖК-модуль выполняет команду

void Lcd_Init();            // Функция инициализации LCD1602
void LcdWrDat(uchar dat);   // Функция записи 8-битных данных на LCD1602
void LcdWrCmd(uchar cmd);   // Функция записи 8-битной команды на LCD1602
void LcdBusy();             // Ожидание сигнала занятости
void Lcd_Show(uchar x, uchar y); // Отображение координат: x — горизонтальная координата; y — вертикальная координата (y=0 — первая строка, y=1 — вторая строка)

void Lcd_Init() {
    LcdWrCmd(0x38); // Запись команды 38H: установка режима отображения
    LcdWrCmd(0x0C); // Запись команды 0CH: включить отображение, не отображать курсор
    LcdWrCmd(0x06); // Запись команды 06H: установить положение курсора
    LcdWrCmd(0x01); // Запись команды 01H: очистить экран
    LcdWrCmd(0x08); // Запись команды 08H: выключить отображение
}

void LcdWrDat(uchar dat) {
    LcdBusy();   // Ожидание сигнала занятости
    LcdRS = 1;   // Высокий уровень для выбора регистра данных
    LcdRW = 0;   // Низкий уровень для выполнения операции записи
    LcdDB = dat; // Запись данных
    LcdEN = 1;   // Падение уровня для разрешения
    LcdEN = 0;
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Кодовые блоки + компилятор Keil C51: изучение микроконтроллеров C51; Кодовые блоки + открытый компилятор SDCC: компиляция микроконтроллеров C51. Экспериментальный набор для разработки микроконтроллера 51 с чипом STC89C52: DIY-комплект на основе версии для обучения микроконтроллера 51, плата HC6800-ES V2.0, материалы на оптическом диске. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/huang_daming-stc89c52.git
git@api.gitlife.ru:oschina-mirror/huang_daming-stc89c52.git
oschina-mirror
huang_daming-stc89c52
huang_daming-stc89c52
master