#include
#include
#include
char SendByte(char ByteOut)
{
int i.j; long li;
unsigned char ByteOutCpy, Byteln = 0;
ByteOutCpy = ByteOut;
for (i=0; i
{
Byteln = (Byteln <<1) + ((inportb(0x379)&0x80)==0);
outportb(0x37A,0x021(((128&Byte0utCpy)==0)));
for (li=0; li<20001; li++);
outportb(0x37A,0x001(((12B&Byte0utCpy)==0)));
for (li=0; li<20001; li++);
outportb(0x37A,0x021(((128&Byte0utCpy)==0)));
ByteOutCpy = ByteOutCpy <<1;
for (li=0; 1К20001; li++);
}
return Byteln;
}
void KeyOn(void)
{
int i;
long li;
for (i=0; i<64; i++)
{
outportb(0x37A,0x00);
for (li=0; li<200001; li++);
outportb(0x37A.0x03);
for (li=0; li<200001; li++);
}
delay(100);
}
void KeyOff(void)
{
int i;
long li;
for (i=0; i<128; i++)
{
outportb(0x37A,0x0B);
for (li=0; li<20001: li++):
outportb(0x37A.0x08);
for (li=0; 1K20001: li++);
}
}
void Riain()
{
Key0n(); // Включение ключа
printf("%02X",SendByte(0)); // Отправка 8 байтов.
printf("%02X",SendByte(1))
printf("%02X",SendByte(2));
printf("%02X",SendByte(3));
printf("%02X",SendByte(4));
printf("%02X",SendByte(5));
printf("%02X",SendByte(6));
printf("%02X",SendByte(7));
printf("\n");
printf(''%02X",SendByte(7)); // Отправка следующих 8 байтов и одновременное
printf(”%02X",SendByte(6)); // получение байтов, отправленных раньше
printf("%02X",SendByte(5));
printf("%02X",SendByte(4));
printf("%02X",SendByte(3));
printf("%02X",SendByte(2));
printf("%02X",SendByte(1));
printf(:%02X".SendByte(0)):
printf("\n");
printf("%02Х''.SendByte(0xF0)); // Отправка следующих 8 байтов и одновременное
ргintf("%02Х",SendByte(0xF1)); // получение байтов, отправленных раньше
printf("%02Х",SendByte(0xF2));
printf("%02X",SendByte(0xF3));
printf("%02X",SendByte(0xF4));
printf("%02X",SendByte(0xF5));
printf("%02X",SendByte(0xF6));
printf("%02X", SendByte(0xF7));
printf("\n");
printf("\n');
KeyOff(); // Отключение питания ключа
Автор:
6.11. Кодовый замок
1. Назначение и описание устройства
Схема предназначена для работы в качестве электронного кодового замка, музыкального звонка и устройства регистрации.
Секретный код состоит из 5 десятичных цифр и набирается на 11-кнопочной клавиатуре; дополнительная кнопка используется как сброс в случае, если была нажата неверная клавиша. Предусмотрена возможность ввода нового кода с этой же клавиатуры.
При нажатии на кнопку звонка микроконтроллер проигрывает мелодию или выдает звуковой сигнал, напоминающий звонок телефонного аппарата. Первый вариант выбирается в случае, если первая цифра секретного кода четная, а второй — если нечетная.
При проигрывании мелодии останавливается вывод данных во внешний компьютер, поэтому, если шел прием данных и был нажат звонок, потребуется дополнительное время на исправление возникшей ошибки. При проигрывании простого сигнала такого не происходит. Кроме того, для правильного воспроизведения мелодии желательно использовать внешний кварц вместо внутреннего RC-генератора микросхемы.