- •Предисловие.
- •1. Основные сведения, необходимые для создания программ на языке c.
- •1.1 Общая характеристика языка c.
- •1.2. Процесс создания исполняемого файла.
- •1.3. Распределение памяти программы.
- •1.4. Основные правила работы с программами.
- •2. Программная имитация электронных схем.
- •3. Описание программы образца.
- •3.1. Подпрограммы общего назначения.
- •3.2. Подпрограммы мехатронного объекта.
- •3.3. Подпрограммы графических примитивов.
- •3.4. Подпрограммы системных сообщений.
- •3.5. Подпрограммы звуковой сигнализации.
- •3.6. Глобальные константы и переменные.
- •4. Тексты исходных файлов программы образца.
- •4.1. Подпрограммы общего назначения.
- •4.2. Подпрограммы мeхатронного объекта.
- •4.3. Подпрограммы графических примитивов.
- •4.4. Подпрограммы системных сообщений.
- •4.5. Подпрограммы звуковой сигнализации.
- •4.6. Глобальные константы и переменные.
- •5. Методические указания к лабораторным работам.
- •6. Задания на выполнение лабораторных работ.
- •6.1. Лабораторная работа 1. Разработка графического отображения титульного листа программы.
- •6.2. Лабораторная работа 2. Разработка логической схемы мехатронного объекта.
- •6.3. Лабораторная работа 3. Разработка графического отображения логической схемы мехатронного объекта.
- •6.4. Лабораторная работа 4. Разработка графического отображения работы логической схемы мехатронного объекта.
- •6.5. Лабораторная работа 5. Разработка средств сигнализации (системные сообщения, звуковая сигнализация, дата, время).
- •7. Варианты лабораторных работ.
- •8. Описание dvd диска
- •Литература.
- •Содержание.
4.2. Подпрограммы мeхатронного объекта.
ФАЙЛ DEV_LIS.H.
[1] /*##############################################*/
[2] /*
[3] Copyright (C) 2009 by A.E.Stefanovich tel. 236-2729, 268-3916
[4] Moscow State University of Instrument-making and Computer Sciences.
[5] (MGUPI).
[6] Chair TI-1.
[7] */
[8] /*##############################################*/
[9] /* File: DEV_LIS.H
[10] Imitator of the schemes electronics. [ DEMO version ].
[11] */
[12] /*############################################# PROGRAME */
[13] #ifndef DEV_LIS_
[14] #define DEV_LIS_
[15] /*============================= Declarations */
[16] int Title_sheet();
[17] int Dev_pct(int mode); /* Picture */
[18] int Dev_logD(int kx, int ky); /* Logic [ DEMO version ]. */
[19] /*============================= Device constants */
[20] /*-------- Dimention of the picture [draft] (row, column) */
[21] #define ROW_D 40
[22] #define COL_D 50
[23] /*============================= Device variables */
[24] /*-------- Device */
[25] unsigned int X0,X1,X2; /* Entrances */
[26] unsigned int Y0,Y1,Y2; /* Invert. Entrances */
[27] unsigned int DD2or,DD3and,DD4and; /* 1 range */
[28] unsigned int DD5or,DD6or,DD7and; /* 2 range */
[29] /*============================= Text */
[30] /*-------- Text (title sheet) */
[31] char *Title_1=
[32] " Moscow State University of Instrument-making and Computer Sciences ";
[33] char *Title_2=
[34] " I M I T A T O R - L I S ";
[35] char *Title_2a=
[36] "(Imitator of the schemes electronic)";
[37] char *Title_3=
[38] " Student: Livanov I. S. ";
[39] char *Title_4=
[40] " Group: TI-1-08-03 (d); Code: 94505 ";
[41] char *Title_5=
[42] " Discipline: Programming (3401) ";
[43] char *Title_6=
[44] " Specialty: 220301 ";
[45] char *Title_7=
[46] " Chair TI-1 ";
[47] char *Title_8=
[48] " Teacher: A.E. Stefanovich ";
[49] char *Title_9=
[50] " Year: 2009 ";
[51] /*------------- Text (device) */
[52] char *Title_10=
[53] " Z0 = (X1 | X2) | (Y0 & Y1) ";
[54] char *Title_11=
[55] " Z1 = (Y2 & X0) | (X1 | X2) ";
[56] char *Title_12=
[57] " Z2 = (Y0 & Y1) & (Y2 & X0) ";
[58] /*------------- Demo (ON/OFF) */
[59] extern int Demo;
[60] /*############################### SUBPROGRAMS */
[61] /*IIIIIIIIIIIIIIIIIIIIIIIIIIIIII*/
[62] int Title_sheet()
[63] {
[64] /*-------- Variables */
[65] int x,y;
[66] int kx; /* Scale axis X */
[67] int ky; /* Scale axis Y */
[68] /*-------- Graph. initialisation */
[69] Graph_regime();
[70] /*-------- Scale axis X & axis Y */
[71] kx=Maxx/COL;
[72] ky=Maxy/ROW;
[73] /*-------- Title 1 */
[74] settextjustify(CENTER_TEXT,CENTER_TEXT);
[75] settextstyle(SMALL_FONT,HORIZ_DIR,5);
[76] setcolor(YELLOW);
[77] setbkcolor(BLACK);
[78] x=Maxx/2+1*kx;
[79] y=1*ky;
[80] outtextxy(x,y,Title_1); /* MGUPI */
[81] /*-------- Frame */
[82] setlinestyle(SOLID_LINE,0,NORM_WIDTH);
[83] setcolor(WHITE);
[84] setbkcolor(BLACK);
[85] x=0; /* 0*kx */
[86] y=2*ky;
[87] Rectangle2(x,y,Maxx,Maxy);
[88] setfillstyle(SOLID_FILL,BLUE);
[89] x=Maxx/2;
[90] y=Maxy/2;
[91] floodfill(x,y,WHITE);
[92] /*-------- Text */
[93] settextjustify(CENTER_TEXT,CENTER_TEXT);
[94] /**/
[95] settextstyle(SMALL_FONT,HORIZ_DIR,5);
[96] setcolor(YELLOW);
[97] x=Maxx/2;
[98] y=4*ky;
[99] outtextxy(x,y,Title_7); /* TI-1 */
[100] /**/
[101] settextstyle(TRIPLEX_FONT,HORIZ_DIR,0);
[102] setusercharsize(1,1,3,2);
[103] x=Maxx/2;
[104] y=11*ky;
[105] setcolor(BLACK);
[106] outtextxy(x,y,Title_2); /* IMITATOR */
[107] setcolor(WHITE);
[108] outtextxy(x+4,y+4,Title_2);
[109] /**/
[110] settextstyle(SMALL_FONT,HORIZ_DIR,7);
[111] setcolor(WHITE);
[112] x=Maxx/2;
[113] y=14*ky;
[114] outtextxy(x,y,Title_2a); /* (imitator) */
[115] /**/
[116] settextstyle(SMALL_FONT,HORIZ_DIR,7);
[117] setcolor(YELLOW);
[118] x=Maxx/2;
[119] y=18*ky;
[120] outtextxy(x,y,Title_3); /* Student */
[121] /**/
[122] settextstyle(SMALL_FONT,HORIZ_DIR,7);
[123] setcolor(YELLOW);
[124] x=Maxx/2;
[125] y=19*ky;
[126] outtextxy(x,y,Title_4); /* Group, Code */
[127] /**/
[128] settextstyle(SMALL_FONT,HORIZ_DIR,5);
[129] setcolor(LIGHTGRAY);
[130] x=Maxx/2;
[131] y=21*ky;
[132] outtextxy(x,y,Title_6); /* Speciality */
[133] /**/
[134] settextstyle(SMALL_FONT,HORIZ_DIR,5);
[135] setcolor(LIGHTGRAY);
[136] x=Maxx/2;
[137] y=22*ky;
[138] outtextxy(x,y,Title_5); /* Discipline... */
[139] /**/
[140] settextstyle(SMALL_FONT,HORIZ_DIR,5);
[141] setcolor(LIGHTGRAY);
[142] x=Maxx/2;
[143] y=23*ky;
[144] outtextxy(x,y,Title_8); /* Teacher */
[145] /**/
[146] settextstyle(SMALL_FONT,HORIZ_DIR,5);
[147] setcolor(LIGHTGRAY);
[148] x=Maxx/2;
[149] y=24*ky;
[150] outtextxy(x,y,Title_9); /* Year */
[151] /*-------- Happy work */
[152] settextstyle(SMALL_FONT,HORIZ_DIR,7);
[153] x=Maxx/2;
[154] y=16*ky;
[155] while(bioskey(1)==0)
[156] {
[157] setcolor(random(16));
[158] outtextxy(x,y," HAPPY WORK ");
[159] delay(50);
[160] }
[161] bioskey(0);
[162] /*-------- Return to text mode */
[163] Text_regime();
[164] /**/
[165] return 0;
[166] }
[167] /*IIIIIIIIIIIIIIIIIIIIIIIIIIIII*/
[168] int Dev_pct(int mode)
[169] {
[170] /*-------- Variables */
[171] int x,y;
[172] int kx; /* Scale axis X */
[173] int ky; /* Scale axis Y */
[174] /*-------- Graph. initialisation */
[175] Graph_regime();
[176] /*-------- Scale axis X & axis Y */
[177] kx=Maxx/COL_D;
[178] ky=Maxy/ROW_D;
[179] /*-------- Frame */
[180] setbkcolor(BLACK);
[181] setcolor(LIGHTGRAY);
[182] setlinestyle(SOLID_LINE,0,NORM_WIDTH);
[183] rectangle(0,0,Maxx,Maxy);
[184] /*-------- Title */
[185] settextjustify(CENTER_TEXT,CENTER_TEXT);
[186] settextstyle(SMALL_FONT,HORIZ_DIR,9);
[187] setcolor(CYAN);
[188] outtextxy(36*kx,2*ky,Title_2);
[189] /**/
[190] setcolor(MAGENTA);
[191] outtextxy(36*kx-1,2*ky-1,Title_2);
[192] /**/
[193] setcolor(YELLOW);
[194] outtextxy(36*kx-2,2*ky-2,Title_2);
[195] /*-------- Devices */
[196] setbkcolor(BLACK);
[197] settextjustify(CENTER_TEXT,CENTER_TEXT);
[198] settextstyle(SMALL_FONT,HORIZ_DIR,6);
[199] setlinestyle(SOLID_LINE,0,NORM_WIDTH);
[200] /*-------- Devices Invertors */
[201] /* invertor (NOT) DD1.1 */
[202] setcolor(LIGHTGRAY);
[203] outtextxy(10*kx,1*ky,"DD1.1");
[204] setcolor(WHITE);
[205] RectangleN(8*kx,2*ky,12*kx,6*ky,3);
[206] setcolor(YELLOW);
[207] outtextxy(10*kx,4*ky,"NOT");
[208] /* invertor (NOT) DD1.2 */
[209] setcolor(LIGHTGRAY);
[210] outtextxy(10*kx,7*ky,"DD1.2");
[211] setcolor(WHITE);
[212] RectangleN(8*kx,8*ky,12*kx,12*ky,3);
[213] setcolor(YELLOW);
[214] outtextxy(10*kx,10*ky,"NOT");
[215] /* invertor (NOT) DD1.3 */
[216] setcolor(LIGHTGRAY);
[217] outtextxy(10*kx,13*ky,"DD1.3");
[218] setcolor(WHITE);
[219] RectangleN(8*kx,14*ky,12*kx,18*ky,3);
[220] setcolor(YELLOW);
[221] outtextxy(10*kx,16*ky,"NOT");
[222] /*-------- Devices Range 1 */
[223] /* DD2 OR */
[224] setcolor(LIGHTGRAY); outtextxy(28*kx,17*ky,"DD2");
[225] setcolor(WHITE); RectangleN(26*kx,18*ky,30*kx,22*ky,3);
[226] setcolor(YELLOW);
[227] outtextxy(28*kx,20*ky,"OR");
[228] /* DD3 AND */
[229] setcolor(LIGHTGRAY); outtextxy(28*kx,23*ky,"DD3");
[230] setcolor(WHITE); RectangleN(26*kx,24*ky,30*kx,28*ky,3);
[231] setcolor(YELLOW);
[232] outtextxy(28*kx,26*ky,"AND");
[233] /* DD4 AND */
[234] setcolor(LIGHTGRAY); outtextxy(28*kx,29*ky,"DD4");
[235] setcolor(WHITE); RectangleN(26*kx,30*ky,30*kx,34*ky,3);
[236] setcolor(YELLOW);
[237] outtextxy(28*kx,32*ky,"AND");
[238] /*-------- Devices Range 2 */
[239] /* DD5 OR */
[240] setcolor(LIGHTGRAY); outtextxy(40*kx,17*ky,"DD5");
[241] setcolor(WHITE); RectangleN(38*kx,18*ky,42*kx,22*ky,3);
[242] setcolor(YELLOW);
[243] outtextxy(40*kx,20*ky,"OR");
[244] /* DD6 OR */
[245] setcolor(LIGHTGRAY); outtextxy(40*kx,23*ky,"DD6");
[246] setcolor(WHITE); RectangleN(38*kx,24*ky,42*kx,28*ky,3);
[247] setcolor(YELLOW);
[248] outtextxy(40*kx,26*ky,"OR");
[249] /* DD7 AND */
[250] setcolor(LIGHTGRAY); outtextxy(40*kx,29*ky,"DD7");
[251] setcolor(WHITE); RectangleN(38*kx,30*ky,42*kx,34*ky,3);
[252] setcolor(YELLOW);
[253] outtextxy(40*kx,32*ky,"AND");
[254] /*-------- Text */
[255] settextjustify(CENTER_TEXT,CENTER_TEXT);
[256] settextstyle(SMALL_FONT,HORIZ_DIR,6);
[257] /**/
[258] setcolor(LIGHTGREEN);
[259] outtextxy(2*kx,37*ky,"X2");
[260] outtextxy(4*kx,37*ky,"X1");
[261] outtextxy(6*kx,37*ky,"X0");
[262] /**/
[263] setcolor(LIGHTGREEN);
[264] outtextxy(14*kx,37*ky,"Y0");
[265] outtextxy(16*kx,37*ky,"Y1");
[266] outtextxy(18*kx,37*ky,"Y2");
[267] /**/
[268] setcolor(WHITE);
[269] outtextxy(4*kx,39*ky,"ENTRY");
[270] outtextxy(16*kx,39*ky,"INVERT");
[271] /**/
[272] setcolor(LIGHTGREEN);
[273] outtextxy(32*kx,37*ky,"A2");
[274] outtextxy(34*kx,37*ky,"A1");
[275] outtextxy(36*kx,37*ky,"A0");
[276] /**/
[277] settextjustify(CENTER_TEXT,TOP_TEXT);
[278] settextstyle(SMALL_FONT,VERT_DIR,6);
[279] setcolor(YELLOW);
[280] /**/
[281] outtextxy(32*kx,38*ky,"DD4");
[282] outtextxy(34*kx,38*ky,"DD3");
[283] outtextxy(36*kx,38*ky,"DD2");
[284] /**/
[285] settextjustify(CENTER_TEXT,CENTER_TEXT);
[286] settextstyle(SMALL_FONT,HORIZ_DIR,6);
[287] setcolor(LIGHTGREEN);
[288] /**/
[289] outtextxy(45*kx,32*ky,"Z2");
[290] outtextxy(45*kx,26*ky,"Z1");
[291] outtextxy(45*kx,20*ky,"Z0");
[292] /**/
[293] settextjustify(CENTER_TEXT,CENTER_TEXT);
[294] settextstyle(SMALL_FONT,VERT_DIR,6);
[295] setcolor(WHITE);
[296] outtextxy(48*kx,26*ky,"EXIT");
[297] /**/
[298] settextjustify(CENTER_TEXT,TOP_TEXT);
[299] setcolor(WHITE);
[300] settextstyle(SMALL_FONT,VERT_DIR,6);
[301] outtextxy(28*kx,35*ky,"LEVEL A");
[302] outtextxy(40*kx,35*ky,"LEVEL Z");
[303] /*-------- Formules */
[304] settextjustify(LEFT_TEXT,CENTER_TEXT);
[305] settextstyle(SMALL_FONT,HORIZ_DIR,7);
[306] setcolor(WHITE);
[307] /**/
[308] outtextxy(21*kx,5*ky,Title_10); /* Z0=... */
[309] outtextxy(21*kx,7*ky,Title_11); /* Z1=... */
[310] outtextxy(21*kx,9*ky,Title_12); /* Z2=... */
[311] /*-------- Wires */
[312] setcolor(LIGHTGRAY);
[313] /* X2 */
[314] line(2*kx,34*ky,2*kx,4*ky);
[315] line(2*kx,4*ky,8*kx,4*ky);
[316] /* X1 */
[317] line(4*kx,34*ky,4*kx,10*ky);
[318] line(4*kx,10*ky,8*kx,10*ky);
[319] /* X0 */
[320] line(6*kx,34*ky,6*kx,16*ky);
[321] line(6*kx,16*ky,8*kx,16*ky);
[322] /* Y0 */
[323] line(14*kx,34*ky,14*kx,16*ky);
[324] line(14*kx,16*ky,12*kx,16*ky);
[325] /* Y1 */
[326] line(16*kx,34*ky,16*kx,10*ky);
[327] line(16*kx,10*ky,12*kx,10*ky);
[328] /* Y2 */
[329] line(18*kx,34*ky,18*kx,4*ky);
[330] line(18*kx,4*ky,12*kx,4*ky);
[331] /*-------- To Range 1 */
[332] /* To DD2 */
[333] circle(2*kx,19*ky,2);
[334] line(2*kx,19*ky,26*kx,19*ky);
[335] circle(4*kx,21*ky,2);
[336] line(4*kx,21*ky,26*kx,21*ky);
[337] /* To DD3 */
[338] circle(6*kx,25*ky,2);
[339] line(6*kx,25*ky,26*kx,25*ky);
[340] circle(18*kx,27*ky,2);
[341] line(18*kx,27*ky,26*kx,27*ky);
[342] /* To DD4 */
[343] circle(16*kx,31*ky,2);
[344] line(16*kx,31*ky,26*kx,31*ky);
[345] circle(14*kx,33*ky,2);
[346] line(14*kx,33*ky,26*kx,33*ky);
[347] /*-------- Devices Kommutator */
[348] setfillstyle(SOLID_FILL, LIGHTGRAY);
[349] bar(20*kx,18*ky,24*kx,34*ky);
[350] setcolor(BLACK);
[351] settextstyle(SMALL_FONT,VERT_DIR,6);
[352] outtextxy(21*kx,26*ky,"COMMUTATOR");
[353] /*-------- Wires Exits DD4, DD3, DD2 */
[354] setcolor(LIGHTGRAY);
[355] line(32*kx,34*ky,32*kx,18*ky); /* A2 */
[356] line(34*kx,34*ky,34*kx,18*ky); /* A1 */
[357] line(36*kx,34*ky,36*kx,18*ky); /* A0 */
[358] /**/
[359] line(30*kx,32*ky,32*kx,32*ky); /* to A2 */
[360] circle(32*kx,32*ky,2);
[361] line(30*kx,26*ky,34*kx,26*ky); /* to A1 */
[362] circle(34*kx,26*ky,2);
[363] line(30*kx,20*ky,36*kx,20*ky); /* to A0 */
[364] circle(36*kx,20*ky,2);
[365] /*-------- Range 2 */
[366] circle(32*kx,19*ky,2); /* to DD5 OR */
[367] line(32*kx,19*ky,38*kx,19*ky);
[368] circle(36*kx,21*ky,2);
[369] line(36*kx,21*ky,38*kx,21*ky);
[370] circle(36*kx,25*ky,2); /* to DD6 OR */
[371] line(36*kx,25*ky,38*kx,25*ky);
[372] circle(34*kx,27*ky,2);
[373] line(34*kx,27*ky,38*kx,27*ky);
[374] circle(34*kx,31*ky,2); /* to DD7 AND */
[375] line(34*kx,31*ky,38*kx,31*ky);
[376] circle(32*kx,33*ky,2);
[377] line(32*kx,33*ky,38*kx,33*ky);
[378] /*-------- Exit */
[379] line(42*kx,20*ky,44*kx,20*ky); /* Z0 */
[380] line(42*kx,26*ky,44*kx,26*ky); /* Z0 */
[381] line(42*kx,32*ky,44*kx,32*ky); /* Z0 */
[382] /*-------- Logic */
[383] if(mode==WORK) Dev_logD(kx,ky);
[384] /*-------- STOP */
[385] STOP;
[386] /*-------- Return to text mode */
[387] Text_regime();
[388] /**/
[389] return 0;
[390] }
[391] /*IIIIIIIIIIIIIIIIIIIIIIIIIIIII*/
[392] int Dev_logD(int kx, int ky)
[393] {
[394] /*-------- Entry */
[395] delay(1);
[396] if(Demo==ON)
[397] {
[398] settextjustify(CENTER_TEXT,CENTER_TEXT);
[399] settextstyle(SMALL_FONT,HORIZ_DIR,5);
[400] setcolor(CYAN);
[401] EllipseN(23*kx,14*ky,0,360,4*kx,2*ky,3);
[402] setcolor(WHITE);
[403] outtextxy(23*kx,14*ky,"ENTRY-INV");
[404] siren_0(1);
[405] }
[406] /**/
[407] Bit(2*kx,35*ky,X2); /* bit X2 */
[408] Bit(4*kx,35*ky,X1); /* bit X1 */
[409] Bit(6*kx,35*ky,X0); /* bit X0 */
[410] /*-------- Devices Inventors DD1.1, DD1.2, DD1.3 */
[411] Y2=~X2&1;
[412] Y1=~X1&1;
[413] Y0=~X0&1;
[414] Bit(18*kx,35*ky,Y2); /* bit DD1.1 (Y2) */
[415] Bit(16*kx,35*ky,Y1); /* bit DD1.2 (Y1) */
[416] Bit(14*kx,35*ky,Y0); /* bit DD1.3 (Y0) */
[417] /*-------- Devices Range 1 */
[418] delay(1);
[419] if(Demo==ON)
[420] {
[421] settextjustify(CENTER_TEXT,CENTER_TEXT);
[422] settextstyle(SMALL_FONT,HORIZ_DIR,5);
[423] setcolor(WHITE);
[424] EllipseN(34*kx,14*ky,0,360,4*kx,2*ky,3);
[425] setcolor(WHITE);
[426] outtextxy(34*kx,14*ky,"LEVEL A");
[427] scale_0(MODERATO/25);
[428] }
[429] DD2or=X1 | X2;
[430] DD3and=Y2 & X0;
[431] DD4and=Y0 & Y1;
[432] Bit(31*kx,21*ky,DD2or); /* bit DD2*/
[433] Bit(31*kx,27*ky,DD3and); /* bit DD3*/
[434] Bit(31*kx,33*ky,DD4and); /* bit DD4 */
[435] /**/
[436] Bit(32*kx,35*ky,DD4and); /* bit DD4 on A2 */
[437] Bit(34*kx,35*ky,DD3and); /* bit DD3 on A1 */
[438] Bit(36*kx,35*ky,DD2or); /* bit DD2 on A0 */
[439] /*-------- Devices Range 2 */
[440] delay(1);
[441] if(Demo==ON)
[442] {
[443] settextjustify(CENTER_TEXT,CENTER_TEXT);
[444] settextstyle(SMALL_FONT,HORIZ_DIR,5);
[445] setcolor(RED);
[446] EllipseN(45*kx,14*ky,0,360,4*kx,2*ky,3);
[447] setcolor(WHITE);
[448] outtextxy(45*kx,14*ky,"LEVEL Z");
[449] sonata17(ALLEGRO);
[450] }
[451] DD5or= DD2or | DD4and;
[452] DD6or= DD3and | DD2or;
[453] DD7and= DD4and & DD3and;
[454] Bit(43*kx,21*ky,DD5or); /* bit DD5 */
[455] Bit(43*kx,27*ky,DD6or); /* bit DD6 */
[456] Bit(43*kx,33*ky,DD7and); /* bit DD7 */
[457] /**/
[458] return 0;
[459] }
[460] #endif /* DEV_LIS_ */
[461] /*######################################################*/