Текст программы лабораторной работы №4
#include "ADuC831.h"
#define MAXBASE 0xFF //Номер страницы внешней памяти (xdata), куда отображаются регистры расширителя. unsigned char ReadMax(unsigned char xdata *regnum) // Чтение памяти из адреса { unsigned char oldDPP=DPP; unsigned char val=0;
DPP=MAXBASE; val=*regnum; DPP=oldDPP; return val; }
void WriteMax(unsigned char xdata *regnum, unsigned char val)// Запись в //память по адресу { unsigned char oldDPP=DPP; DPP=MAXBASE; *regnum=val; DPP=oldDPP; }
void Wsio(unsigned char ch) //Функция передачи символа в COM-порт компьютера
{ TI=0; SBUF=ch; while(!TI); }
void Type(char *s) //Передача набора символов
{ char n=0; while(*s) Wsio(*s++); }
void SIO_Init() //Инициализация передачи данных
{ T3CON = 0x83; //CD = 3 T3FD = 0x2D; SCON = 0x52; ES=0; }
char GetKey(void) //Чтение нажатой клавиши с клавиатуры (функция возвращает символ, который нажат в текущий момент) { char table[]="147*2580369#ABCD"; //Таблица символов, соответствующих клавишам клавиатуры SDK-1.1
unsigned char row,col,rownum=0,colnum=0; unsigned int i; //while(srecv())Rsio(); EA=0; while(1){ col=0x1<<(colnum&0x3); if((col&0x0F)==0x00)col=0x1; WriteMax(0x00,~col); for(rownum=4; rownum<8; rownum++){ row=(ReadMax(0x00))&(0x1<<rownum); if(row==0){ for(i=0;i<10000;i++)continue; row=(ReadMax(0x00))&(0x1<<rownum); // if(row==0) // Wsio(table[4*(colnum&0x3) + rownum-4]); return (table[4*(colnum&0x3) + rownum-4]); } } colnum++; //if(srecv()) if(Rsio()=='e')break;
} //EA=1; //Type("\r\n"); return 0; } void Light(int State)//Зажигание светодиодов { WriteMax(0x08007, State); }
void Delay(long int count) { long int j; for(j=0;j<count;j++)10.4994/2.333; }
void main(void) { char ch = 0; int j;
Light(153); Delay(10000);
SIO_Init();
while(1) { ch = GetKey();// Получение нажатой клавиши if(ch) Wsio(ch);// Вывод символа на компьютер if (ch=='2') Light(36); Delay(5000); }; }
Кафедра автоматизации процессов химической промышленности
Методические указания
|