Задача: Вариант 5, задача 1:При запуске программы на экран терминала выводится сообщение «Задача № …» с
Описание
При запуске программы на экран терминала выводится сообщение «Задача № …» с соответствующим номером задачи.
При нажатии на любую кнопку клавиатуры стенда соответствующий символ выводится на ЖКИ стенда и семисегментный индикатор. При нажатии остальных клавиш звучит звуковой сигнал длительность 1 секунда с частотой 3 кГц. Реализовать удаление последнего введенного символа на экране ЖКИ кнопкой “*”.
Вывести показания двух АЦП на ЖКИ, а так же их разность, при разности больше 15 включить LED1,больше 30, LED2, больше 45 LED3, больше 60 включить все три светодиода.
Характеристики решённой задачи
Список файлов
- 1.LST 22,73 Kb
- 1.txt 22,73 Kb
C51 COMPILER V7.06 MAIN 01/09/2009 18:34:05 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND CODE NOCOND
stmt level source
1 #include <at898252.h>
2
3 #define KEY_PORT P2
4 #define KEY_1 0x11
5 #define KEY_2 0x21
6 #define KEY_3 0x41
7 #define KEY_4 0x12
8 #define KEY_5 0x22
9 #define KEY_6 0x42
10 #define KEY_7 0x14
11 #define KEY_8 0x24
12 #define KEY_9 0x44
13 #define KEY_0 0x28
14 #define KEY_A 0x81
15 #define KEY_B 0x82
16 #define KEY_C 0x84
17 #define KEY_D 0x88
18 #define KEY_ASTERISK 0x18
19 #define KEY_BAR 0x48
20
21 #define MCS_FREQUENCY 22.1184 / 12
22 #define timer_count_for_5KhZ 184
23 #define cyclec_for_05sec (1 * 1000000 * MCS_FREQUENCY / timer_count_for_5KhZ)
24
25 sbit B_BIT = P1 ^ 4;
26 unsigned int cycles=0;
27
28 //************************************** **************************************** **************************
-*************
29
30 void delay40mcs()
31 {
32 1 unsigned char i=37; //djnz выполняется за 2 цикла
33 1 again: i--;
34 1 if (i) goto again;
35 1 }
36
37 void delay20ms()
38 {
39 1 unsigned char i; //djnz выполняется за 2 цикла
40 1 unsigned char j=72;
41 1 again1:i=255;
42 1 again2: i--;
43 1 if (i) goto again2;
44 1 j--;
45 1 if (j) goto again1;
46 1 }
47
48 unsigned char KEY_getkey()
49 {
50 1 KEY_PORT = 240;delay40mcs();
51 1 if (KEY_PORT == 240) return 0;
52 1 KEY_PORT = 254;delay40mcs();
53 1 if (KEY_PORT != 254) return ~KEY_PORT;
54 1 KEY_PORT = 253;delay40mcs();
C51 COMPILER V7.06 MAIN 01/09/2009 18:34:05 PAGE 2
55 1 if (KEY_PORT != 253) return ~KEY_PORT;
56 1 KEY_PORT = 251;delay40mcs();
57 1 if (KEY_PORT != 251) return ~KEY_PORT;
58 1 KEY_PORT = 247;delay40mcs();
59 1 return ~KEY_PORT;
60 1 }
61
62 unsigned char KEY_getkeynumber( unsigned char keycode )
63 {
64 1
65 1 if (keycode==KEY_0) return 0;
66 1 if (keycode==KEY_1) return 1;
67 1 if (keycode==KEY_2) return 2;
68 1 if (keycode==KEY_3) return 3;
69 1 if (keycode==KEY_4) return 4;
70 1 if (keycode==KEY_5) return 5;
71 1 if (keycode==KEY_6) return 6;
72 1 if (keycode==KEY_7) return 7;
73 1 if (keycode==KEY_8) return 8;
74 1 if (keycode==KEY_9) return 9;
75 1 if (keycode==KEY_A) return 10;
76 1 if (keycode==KEY_B) return 11;
77 1 if (keycode==KEY_C) return 12;
78 1 if (keycode==KEY_D) return 13;
79 1 if (keycode==KEY_ASTERISK) return 14;
80 1 if (keycode==KEY_BAR) return 15;
81 1 return 16;
82 1
83 1 }
84
85 void timer0_ISR (void) interrupt TF0_VECTOR
86 {
87 1 cycles--;
88 1 if (cycles) B_BIT = !B_BIT;
89 1 }
90
91 void usart_transmit(unsigned char cData)
92 {
93 1 SBUF=cData;
94 1 while (!TI);
95 1 TI=0;
96 1 }
97
98 void main()
99 {
100 1 unsigned char key = 0;
101 1 unsigned char keynumber;
102 1
103 1 P0 = 0xFF; // Настраиваем порты на вывод
104 1 P1 = 0xFF;
105 1 P2 = 0xFF;
106 1 P3 = 0xFF;
107 1
108 1 SCON = 0x50; // 8-битовый UART 0x50=1010000
109 1 TMOD = 0x20|0x2; // Таймер 1: 8-битовый режим, авто-перезагружаемый, Таймер 0: 8р перезагружаемый для з
-адержки для BEEP
110 1 TH1 = 250; // Задаем начальное значение таймера для скорости 9600 бод
111 1 TL1 = 250;
112 1 TR1 = 1; // Запускаем таймер 1
113 1
114 1 TH0=0xFF-184; //начальные значения таймера для 100 мкс
115 1 TL0=0xFF-184;
C51 COMPILER V7.06 MAIN 01/09/2009 18:34:05 PAGE 3
116 1 TR0=1;
117 1
118 1 EA=1;
119 1 ET0=1;
120 1
121 1 // Посылаем в UART сообщение
122 1
123 1 usart_transmit('Z');
124 1 usart_transmit('A');
125 1 usart_transmit('D');
126 1 usart_transmit('A');
127 1 usart_transmit('4');
128 1 usart_transmit('A');
129 1 usart_transmit(' ');
130 1 usart_transmit('N');
131 1 usart_transmit('1');
132 1 usart_transmit(0x0A);// \n
133 1
134 1 while(1)
135 1 {
136 2 key = KEY_getkey();delay20ms();
137 2 if( !key )continue;
138 2 keynumber = KEY_getkeynumber( key );
139 2
140 2 if( keynumber <= 9 ) { usart_transmit(keynumber + '0'); cycles=cyclec_for_05sec;continue;}
141 2 if( keynumber >=10 && keynumber <=13 ) {usart_transmit(keynumber + '7'); cycles=cyclec_for_05sec;continu
-e;}
142 2 if( keynumber ==14 ) {usart_transmit('#'); cycles=cyclec_for_05sec;continue;}
143 2 if( keynumber ==15 ) {usart_transmit('*'); cycles=cyclec_for_05sec;continue;}
144 2
145 2
146 2 }
147 1 }
C51 COMPILER V7.06 MAIN 01/09/2009 18:34:05 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION delay40mcs (BEGIN)
; SOURCE LINE # 30
Начать зарабатывать