BẢNG MẠCH IN KIỂM SOÁT LPT VỚI PIC16F877 C ++

BẢNG MẠCH IN KIỂM SOÁT LPT VỚI PIC16F877 C ++


Chuẩn bị bởi: Soner IL và Ramazan ERYILDIZ
Đầu vào: PIC là toán tử đầu vào-đầu ra cho bộ điều khiển giao tiếp PERIPHERAL. Nó ban đầu được phát triển vào năm 1994 vì nhu cầu cho một giải pháp rất nhanh và rẻ để giảm và kiểm soát tải trên đầu vào và đầu ra của bộ vi xử lý 16 bit và 32 bit.
Trong dự án của chúng tôi, chúng tôi đang tạo mạch in bằng 16f877. Công việc của thời gian có thể được kiểm tra trong hai giai đoạn. Đầu tiên, các tọa độ của các điểm bị xuyên thủng được lấy từ máy tính và trong phần thứ hai, động cơ bước được sử dụng để đục lỗ bo mạch in.
Tôi đang sử dụng một chương trình C ++ để chuyển đổi dữ liệu từ máy tính sang bit-by-bit
Tổ chức bộ nhớ PIC: Gia đình PIC 16C7X có bộ đếm chương trình 13 bit có thể giải quyết không gian bộ nhớ chương trình 8K * 14. Số lượng bộ nhớ chương trình được sử dụng bởi mỗi phần tử được liệt kê dưới đây: Truy cập một địa chỉ trên đầu địa chỉ được sử dụng trong các phần tử này với bộ nhớ chương trình nhỏ hơn 8K gây ra xung đột. Các vector thiết lập lại là 0000h và vector cắt là trên 0004h.
Bảng3.2 Phạm vi địa chỉ bộ nhớ chương trình
Phạm vi địa chỉ bộ nhớ chương trình
Tổ chức bộ nhớ dữ liệu : Bộ nhớ dữ liệu được chia thành các thanh ghi đa năng và các thanh ghi chức năng đặc biệt (các thanh ghi). Các bit RP1 và RP0 là các bit chọn ngân hàng.
RP1: RP0 (Tiểu bang <6: 5="">) 
00 => Bank0 
01 => Bank1 
10 => Bank2 
11 => Bank3
Mỗi ngân hàng mở rộng đến 7Fh (128 byte). Một ngân hàng thuộc mỗi ngân hàng được dành riêng cho các máy ghi chức năng đặc biệt. Các thanh ghi chức năng đặc biệt có các thanh ghi chung được sử dụng làm RAM tĩnh. Tất cả các ngân hàng đã sử dụng đều chứa các thanh ghi chức năng đặc biệt. Một số thanh ghi chức năng đặc biệt "sử dụng cao" được nhân đôi từ ngân hàng này sang ngân hàng khác để giảm mã (giảm) và truy cập nhanh hơn.
Đăng ký mục đích chung được sử dụng trong dự án
Sổ đăng ký trạng thái: Thanh ghi STATUS chứa trạng thái số học ALU, trạng thái RESET và bit chọn cụm của bộ nhớ dữ liệu. Như với bất kỳ bản ghi nào, bản ghi STATUS có thể là đích cho bất kỳ lệnh nào. Nếu lệnh ảnh hưởng đến thanh ghi STATUS, Z, DC hoặc bit C là đích thì các ghi đè ba bit này sẽ bị vô hiệu hóa. Các bit này đã được thiết lập hoặc xóa một cách thích hợp theo trạng thái logic của thiết bị. Ngoài ra, các bit TO và PD không phải là các bit có thể ghi được. Do đó, kết quả của các lệnh STATUS mục tiêu được lưu trữ có thể khác với thiết kế.
Ví dụ, lệnh CLRF STATUS sẽ xóa ba bit trên cùng và thiết lập bit Z. Đây sẽ là 000u trong bản ghi STATUS. (U = không đổi). Để thay đổi bản ghi STATUS, chỉ sử dụng BCF, BSF, SWAPF và MOVWF. Bởi vì các lệnh này không ảnh hưởng đến bất kỳ bit trạng thái nào.
CHÚ THÍCH 1: Các bit IRP và RP1 (STATUS <7: 6="" a.="" b="" c="" ch="" d="" font="" i="" kh="" l="" n="" nbsp="" ng="" nh="" p="" ph="" s="" t="" tr="" v="" x="" y="">Không nên sử dụng các bit này làm các bit R / W có mục đích chung vì nó có thể ảnh hưởng đến khả năng tương thích cao với các sản phẩm trong tương lai. Note2: Trong các chiết xuất , các bit C và DC hoạt động như các bit được mượn và được mượn số. Các lệnh SUBLW và SUBWF có thể được kiểm tra cho ví dụ này.
Hình 3.2: Thanh ghi trạng thái (O3h, Địa chỉ 83h)
Đăng ký trạng thái O3h 83h
LƯU Ý:
R = Có thể đọc Bit 
W = Bit có thể ghi 
= bit không được triển khai, đọc là "0" 
N = giá trị khi đặt lại POR.
Bit 7: IRP: bit lựa chọn bản ghi (được sử dụng để định địa chỉ gián tiếp).
Bit 6-5: RP1: RPO: Đăng ký các bit lựa chọn thiết lập (được sử dụng để định địa chỉ trực tiếp)
Bit 4: TO = Khoảng thời gian Bit 
1 = Sau khi bùng nổ nguồn điện, CLRWDT hoặc lệnh SLEEP 
0 = khoảng thời gian WDT kết thúc.
Bit 3: PD: Power Down Bit 
1 = Sau khi bật nguồn hoặc với lệnh CLRWDT 
0 = Thi hành lệnh SLEEP
Bit 2: Z: Zero Bit 
1 = Kết quả của phép tính số học hoặc logic là 0. 
0 = Sự kết thúc của phép toán số học hoặc logic không phải là số không.
Bit 1: DC: Số bit truyền / mượn số (hướng dẫn ADDWF và AALW) 
1 = Thực hiện kết quả thu được theo thứ tự 4.lớn. 
0 = Không có kết quả thực hiện trong thứ tự thấp thứ 4.
Bit 0: C: bit thực thi / mượn (hướng dẫn ADDWF và ADDLW) 
1 = Thực thi từ bit quan trọng nhất của kết quả làm tròn 
0 = Không thực hiện từ bit quan trọng nhất của kết quả thu được.
Ghi chú: Phép toán trừ được thực hiện bằng cách thêm các số nguyên nhị phân của dữ liệu thứ hai. (RRF, RLF), bit này được nạp với bit thứ tự thấp hoặc cao trong thanh ghi nguồn.
Option_reg kỷ lục (không bắt buộc ghi): Option_reg đăng ký, TMR0 / WDT prescene là bên ngoài ngắt INT, TMR0 và PORTB từ các bit kiểm soát khác nhau mà được cấu hình để được vẽ nghèo, đăng ký là có thể ghi và đọc được. 81h.
Hình 3.3: Ghi tùy chọn (Địa chỉ 81h, 181h)
Lựa chọn ghi 81h 181h
Bit7 ::các RBP PORTB pull-up (kéo lên), bit kích hoạt. 
1: PORTB là một thụ động kéo lên. 
0: Hấp thụ PORTB được kích hoạt với giá trị khóa cổng.
Bit6: INTEDG: bit lựa chọn cạnh cắt cuối. 
1 = Pin RB0 / INT được gửi đến cạnh tăng. 
0 = RB0 ​​/ INT được gửi đến cạnh dưới của pin.
Bit5: TOSC: TMR0 Nguồn đồng hồ chọn bit. 
1 = Pin RA4 / TOCKI thay đổi. 
0 = Chu trình lệnh nội bộ CLOCK (CLKOUT) được chọn.
Bit4: T0SE: TMR0 bit lựa chọn bắt đầu cạnh. 
1 = Di chuyển chốt RA4 / T0CKI từ cao xuống thấp 
0 = RA4 / T0CKI đạt mức cao ở mức thấp.
Bit3: PSA: Kết thúc nhiệm vụ phân vùng (prescale). 
1 = WDT như prescale. 
0 = Đặt T.mer0 làm prescale.
Bt2-0: PS2: PS0: Bit để chọn tỷ lệ của bộ đếm trước. 
1 = WDT như prescale. 
0 = Đặt T.mer0 làm prescale.
Bt2-0: PS2: PS0: Bit để chọn tỷ lệ của bộ đếm trước.
ps2-Ps0-prescene Hiện
Đăng ký Intcon: Thanh ghi INTCON là một thanh ghi có thể đọc và ghi được có chứa các bit kích hoạt khác nhau cho tất cả các cờ ngắt. 0Bh và 8Bh.
Hình 3.4: Ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh)
Ghi INTCON 0Bh 8Bh 10Bh 18Bh Địa chỉ
Bit 7: GIE: Bit kích hoạt ngắt chung. 
1 = Tất cả các ngắt đang hoạt động. 
0 = Tất cả các vết cắt đều không hoạt động.
Bit 6: PEIE: Ngắt bit kích hoạt ngắt. 
1 = Bật tất cả các ngắt giao diện. 
0 = Vô hiệu hóa tất cả các ngắt giao diện.
Bit5: T0IE: bit ngắt ngắt tràn TMR0 
1 = Bật TMR0 ngắt. 
0 = Vô hiệu hóa ngắt TMR0.
Bit4: INTE: RB0 / INT Ngắt bit ngắt bên ngoài. 
1 = Kích hoạt ngắt ngoài của chân RB0 / INT. 
0 = RB0 ​​/ INT chốt bên ngoài để trạng thái thụ động.
Bit3: RBIE: bit cho phép thay đổi cổng RB 
1 = Cho phép thay đổi cổng RB. 
0 = Vô hiệu hóa thay đổi cổng RB.
Bit2: T0IF: TMR0 tràn cờ ngắt bit. 
1 = Ghi đè đăng ký TMR0 (phải được xóa trong phần mềm). 
0 = Không tràn trong TMR0 register0.
Bit1: INTF: bit cờ ngắt ngoài RB0 / INT. 
1 = Ngắt bên ngoài tại chân RB0 / INT (phải được xóa trong phần mềm). 
0 = Không có ngắt ngoài xảy ra tại chân RB0 / INT.
Bit0: RBIF: bit cờ ngắt thay đổi cổng RB. 
1 = RB7: Ít nhất một trong các chân RB4 thay đổi trạng thái. 
0 = RB7: Không có trạng thái thay đổi chân RB4 nào.
Đăng ký INDF và FSR: Sổ đăng ký INDF không phải là đăng ký vật lý. Địa chỉ của thanh ghi INDF sẽ là địa chỉ gián tiếp. Có thể giải quyết gián tiếp bằng cách sử dụng thanh ghi INDF. Bất kỳ lệnh nào sử dụng thanh ghi INDF thực sự truy cập vào thanh ghi được chỉ ra bởi FSR (FileSelect Register). Khi bản thân đăng ký INDF được đọc, giá trị của 00h sẽ được đọc gián tiếp (FSR = 0). Khi được ghi vào thanh ghi INDF, nó dẫn gián tiếp đến một kết quả ít giao dịch hơn. (Mặc dù các bit trạng thái vẫn bị ảnh hưởng).
Ngắt: Ngắt là một tính năng rất hữu ích cho bộ vi xử lý vì chúng cho phép các sự kiện bên ngoài làm gián đoạn luồng phần mềm bình thường. Điều này dẫn đến việc thực thi mã cho một mục đích cụ thể. Ví dụ, trong phần mềm truyền thông, một ngắt từ chốt đầu vào làm cho phần mềm giải mã mã vào.
INT Interrupt: Các giới hạn của Interrupts bên ngoài trong RBO / INT đã được kích hoạt. Nếu những giới hạn này nếu bảng INTEDG bit (tùy chọn Reg <6>) tăng hoặc giảm, nếu INTENDG xóa thời gian pin RBO / INT qua đó giới hạn hiện tại xảy ra, các bit INTF (Intco các <1>) được cài đặt. Ngắt này có thể được tắt bằng cách xóa điều khiển CCE INTEON.
Tín hiệu INTF bit phải được xóa khỏi phần mềm bởi Chương trình dịch vụ ngắt trước khi gián đoạn này được kích hoạt. Trình xử lý ngắt INT có thể được loại bỏ khỏi SLEEP lúc đầu nếu nó được thiết lập để đi tới SLEEP. Trạng thái bit GIE quyết định bộ xử lý có rời khỏi SLEEP hay không và tách thành vector cắt tiếp theo.
Mã ASEMBLER
	DANH SÁCH p = 16f877
	BAO GỒM "P16F877.INC"
	
Công cụ CNC

#DEFINE DATA PORTC
#DEFINE KES PORTB, 0
#DEFINE X0SW PORTB, 1
#DEFINE Y0SW PORTB, 2
#DEFINE Z0SW PORTB, 3
#DEFINE ZSSW PORTB, 4
#DEFINE ZASW PORTB, 5
# DEFINE LCDEN PORTB, 6
#DEFINE CẮT PORTB, 7
#DEFINE XMOTY PORTD, 0
#DEFINE YMOTY PORTD, 2
#DEFINE XMOTCP PORTD, 1
#DEFINE YMOTCP PORTD, 3
#DEFINE ZMOTY PORTD, 4
#DEFINE ZMOTEN PORTD, 5
#DEFINE DELMOT PORTD, 6
#DEFINE LCDRS PORTD, 7
#DEFINE LCD PORTA
#DEFINE LRI PORTA, 4
#DEFINE WORK PORTA, 5
#DEFINE BASBUT PORTE, 0
#DEFINE	BASLED	PORTE,1
#DEFINE	MESGUL	PORTE,2
#DEFINE	INTFLUG	INTCON,1
COPY	EQU	0X7F
XOLD	EQU	0X7E
YOLD	EQU	0X7D
XNEW	EQU	0X7C
YNEW	EQU	0X7B
INDF	EQU	0X00
OPTI	EQU	0X81
INDEX1	EQU	0X7A
INDEX2	EQU	0X79
TMRIN1	EQU	0X78
TMRIN2	EQU	0X77
	org	0x0003
	goto	BASLA
	org	0x0004
	goto	KESME
BASLA 	BSF	STATUS,7	;DOLAYLI ADRESLEMEDE  2VE4. BANK
	CLRF	PORTA
	CLRF	PORTB
	CLRF	PORTC
	CLRF	PORTD
	CLRF	PORTE
	BSF	STATUS,RP0
	CLRF	TRISA	; LCD için boş bırakıldı
	MOVLW	0X3F	;BUTONLAR LAMBA VE KESMEDE KULL.
	MOVWF	TRISB	;(KESME İZİN UCU)
	MOVLW	0XFF	;BİLGİSAYARDAN GELEN DATA PİNLERİ
	MOVWF	TRISC	;BU PORTA BAĞLANACAK
	CLRF	TRISD	;MOTOR SÜRME
	MOVLW	0X01	
	MOVWF	TRISE
	MOVLW	b’00001111’
	MOVWF	OPTI
	BCF	STATUS,RP0
	CLRF	COPY
	CLRF	XOLD
	CLRF	YOLD
	CLRF	XNEW
	CLRF	YNEW
	MOVLW	0X8F
	MOVWF	FSR
	MOVLW	b’10010000’
	MOVWF	INTCON
	BSF	KESEN	;PC KESMESİNE İZİN VER ....?????
DON	BTFSS	BASLED
	GOTO	DON
	BCF	INTCON,7	;KESME İPTAL.....?????
	CALL	BTCONT
	BCF	BASLED
	BSF	WORK	;DELİNİYOR.......??????
	CALL	ZERO
	CALL	ZAYAR
	CALL	OKU1
	CLRF	XOLD
	CLRF	YOLD
	CLRF	XNEW
	CLRF	YNEW
	BCF	WORK
	MOVLW	0X8F
	MOVWF	FSR
	BSF	INTCON,GIE
	BSF	KESEN
	GOTO	DON
KESME	BCF	KESEN
	BCF	INTCON,INTF
	BSF	MESGUL	;ÇIKARKEN SIFIR YAPILACAK
	BTFSC	FSR,7
	GOTO	ART_KONT	;FSRYİ ARTIR VE KONTROL ET
ARTDO	CALL	CHANG
	MOVF	DATA,0
	MOVWF	INDF
	COMF	INDF,0
	BTFSC	STATUS,Z
	GOTO	CALIS
	BCF	MESGUL
	BSF	KESEN
	RETFIE
ART_KONT	INCF	FSR,1
	MOVF	FSR,0
	SUBLW	0XF0
	BTFSS	STATUS,Z
	GOTO	ARTDO
CALIS	BSF	BASLED
	BCF	MESGUL
	RETFIE
CHANG	BTFSS	FSR,7
	GOTO	SIFIR
	BCF	FSR,7
	RETURN
SIFIR	BSF	FSR,7
	RETURN
ZAYAR	BCF	ZMOTY
	BCF	ZMOTEN
	BTFSC	Z0SW
	RETURN
	BSF	ZMOTEN
	NOP
	NOP
	NOP
	GOTO	ZAYAR
OKU1	MOVLW	0X0F
	MOVWF	FSR
OKU	BCF	FSR,7
	MOVF	FSR,W
	SUBLW	0X6F
	BTFSC	STATUS,Z
	RETURN
	INCF	FSR,F
	MOVF	INDF,W
	MOVWF	XNEW
	BSF	FSR,7
	MOVF	INDF,W
	MOVWF	YNEW
	COMF	XNEW,W
	BTFSC	STATUS,Z
	RETURN
GIT	BCF	XMOTY
	MOVF	XOLD,W
	SUBWF	XNEW
	BTFSC	STATUS,C
	BSF	XMOTY
	CALL	XFIND
	BCF 	YMOTY
	MOVF	YOLD,W
	SUBWF	YNEW
	BTFSC	STATUS,C
	BSF	YMOTY
	CALL	YFIND
DEL	BSF	DELMOT
	BSF	ZMOTY
	BSF	ZMOTEN
	BTFSS	ZSSW
	GOTO	DEL
	BCF 	ZMOTEN
BAK	BTFSS	ZASW
	GOTO	BAK
	CALL	B1S
	CALL	ZAYAR
	GOTO	OKU
XFIND	MOVF	XOLD,W
	SUBWF	XNEW
	BTFSC	STATUS,Z
	RETURN
	MOVLW	0X3D	;HER 0,05 İNCH İÇİNMOTOR ADIM SAY.
	MOVWF	INDEX1
AAAA	BSF	XMOTCP
	CALL	B3MS
	BCF	XMOTCP
	CALL	B3MS
	DECFSZ	INDEX1,F
	GOTO	AAAA
	INCF	XOLD,1
	BTFSC	XMOTY
	GOTO	XFIND
	DECF	XOLD,F
	DECF	XOLD,F
	GOTO	XFIND
YFIND	MOVF	YOLD,W
	SUBWF	YNEW
	BTFSC	STATUS,Z
	RETURN
	MOVLW	0X3D	;MOTOR ADIM SAYISI
	MOVWF	INDEX1
BBBB	BSF	YMOTCP
	CALL	B3MS
	BCF	YMOTCP
	CALL	B3MS
	DECFSZ	INDEX1,F
	GOTO	BBBB
	INCF	YOLD,1
	BTFSC	YMOTY
	GOTO	YFIND
	DECF	YOLD,F
	DECF	YOLD,F
	GOTO	YFIND
ZERO	MOVLW	0XF0
	MOVWF	INDEX1
	BSF	XMOTY
	BSF	YMOTY
XXXX	BSF	XMOTCP
	BSF	YMOTCP
	CALL	B3MS
	BCF	XMOTCP
	BCF	YMOTCP
	CALL	B3MS
	DECFSZ	INDEX1,F
	GOTO	XXXX
	BCF	XMOTY
	BCF	YMOTY
	CALL	B1S
XXX1	CALL	B30MS
	BSF	XMOTCP
	BSF	YMOTCP
	CALL	B30MS
	BTFSS	X0SW
	BCF	XMOTCP
	BTFSS	Y0SW
	BCF	YMOTCP
	BTFSS	X0SW
	GOTO	XXX1
	BTFSS	Y0SW
	GOTO	XXX1	
	RETURN
B196MS	MOVLW	0XFF
	MOVWF	TMRIN1
SS	MOVLW	0XFF
	MOVWF	TMRIN2
CCCC	DECFSZ	TMRIN2,1
	GOTO CCCC
	DECFSZ TMRIN1,1
	GOTO SS
	RETURN
B1S MOVLW 0X05
	MOVWF TMRIN1
	GỌI B196MS
	DECFSZ TMRIN1,1
	GOTO B1S
	RETURN
B30MS MOVLW 0X0A
	MOVWF TMRIN1
	GỌI B3MS
	DECFSZ INDEX1,1
	GOTO B30MS
	RETURN
B3MS MOVLW 0X06
	MOVF TMRIN1
XXX3 MOVLW 0XB4
	MOVWF TMRIN2
XXX2 DECFSZ TMRIN2, F
	GOTO XXX2
	DECFSZ TMRIN1, F
	GOTO XXX3
	RETURN
BTCONT BTFSS BASBUT
	GOTO BTCONT
	RETURN
	END
Sơ đồ mạch
in-mạch-to-mạch-khoan Schema-LPT-kiểm soát
Print Circuit pcb Bottom, chế độ xem hàng đầu
in-mạch-khoan-se preview-LPT-control-alt-pcb in-mạch-khoan-se preview-LPT-control-PCB-ust
Chương trình C ++
#include 
#include 
#include 
#include 
#include 
char kor [2] [952];

void find (void);
void set (void);
void chủ đề (void);
void new (void);

main () {
clrscr ();
find ();
kur ();
topic ();
clrscr ();
printf ("\ n \ n \ n \ n \ nNhấn phím cho mạch ...");
getche ();
}
void find (void) {
int x, y, a = 0;
int r, g, b;
char str1 [60], str2 [60];
FILE * bmp, * ref, * h1, * h2;
if (! bmp = fopen ("c: \\ soner \\ son.bmp", "r"))) {
	printf ("\ n \ nBạn không thể tìm thấy tệp hoặc tệp bị hỏng \ a \ n \ nNhấn nút cho dấu hiệu");
	fcloseall ();
	new ();
	}
if (! (ref = fopen ("c: \\ soner \\ son.b", "r"))) {
	printf ("\ n \ nBạn không thể tìm thấy tệp hoặc tệp bị hỏng \ a \ n \ nNhấn nút cho dấu hiệu");
	getche ();
	fcloseall ();
	thoát (0);
if (! h1 = fopen ("c: \\ soner \ ramazan.db", "w"))) {
	printf ( "\ n \ nDisc không viết OR vào đường dẫn cụ thể không được tìm thấy \ a \ n \ ncikis của một nút trên lối ra.");
	getche ();
	fcloseall ();
	thoát (0);
if (! h2 = fopen ("c: \\ soner \\ soner.db", "w"))) {
	printf ( "\ n \ ?? zere HOẶC nDisc không viết đường dẫn cụ thể không được tìm thấy \ a \ n \ ncikis của một nút trên lối ra.");
	getche ();
	fcloseall ();
	thoát (0);
fgets (str1,53, bmp);
fgets (str2,53, ref);
if (strcmp (str1, str2)) {
fcloseAll ();
new ();}
fclose (ref);
fseek (bmp, 54, SEEK_SET);
cho (x = 599; x & gt; = 0; x -) {
cho (y = 0; y & lt; 900; y ++) {
r = fgetc (bmp);
if (r == 110 && g == 120 && b == 130) {
cor [1] [a] = x / 5;
cor [0] [a] = y / 5;
a ++;
if (a> 950) {printf ("nhấn một nút cho quá nhiều tọa độ \ n \ n");
getche ();
thoát (0);
fprintf (h1, "% d \ t% d \ n", x / 5, y / 5);
fprintf (h2, "% c% c", x / 5, y / 5);
}}
if (a <1 font="" h="" m="" n="" ng="" printf="" t="" th="" to="" y="">
Nhấn một nút cho hai. "); Getche (); thoát (0);
printf ("Tìm thấy tọa độ% d. \ n \ n \ nNhấn nút để tạo \ n \ n \ t \ t \ tCircle for ESC ...", a);
if (getche () == 27) {fcloseall (); thoát (0);
fcloseall ();
}
void set (void) {
char cev;
unsigned int delay = 0;
clrscr ();
/ * Chỉ:
gotoxy (1,1);
printf ("Nhập số bản sao: \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b");
scanf ("% d", & copy);
if (copy <1 copy=""> 255) {printf ("\ n \ ị giá trị phải nằm trong khoảng từ 1 đến 255."); goto tek;} * /
tín dụng:
printf ("Kết nối \ n \ n \ n \ t \ tĐây là kết nối của tôi ...");
while ((inportb (0x379))! = 0 && (inportb (0x379))! = 128) {trì hoãn (1000);
trì hoãn ++;
if (delay> 9) {
printf ("\ n \ n \ n \ n \ t \ tKết nối không thành công gấp 10 lần dùng thử \ n \ nHãy thử / hủy");
cevtek:
cev = getch ();
if (cev == 'i' || cev == 'I') {
printf ("Nhấn nút cho \ n \ n \ n \ n \ n \ n \ n \ n \ n");
getche ();
thoát (0);
nếu không (cev == 'y' || cev == 'Y') {
clrscr ();
Độ trễ = 0;
goto kiểm tra;
khác goto cevtek;}}
clrscr ();
printf ("\ n \ nblinked");
chậm trễ (3000);
}
void topic (void) {clrscr ();
int a = 0;
trong khi (cor [0] [a]! = 255) {
	kết thúc:
	while ((inportb (0x379)) = 128) {
		if ((inportB (0x379))! = 0) {
			printf ("Đã ngắt kết nối khỏi phần cứng .... \ nVui lòng kết nối vật lý và nhấn một phím. \ n \ n \ n \ n \ n \ nNhập ESC");
			nếu (getche () == 27) thoát (0);
		}
	}
	chậm trễ (1);
	outPortB (0x37a, 12);
	chậm trễ (1);
	outPortB (0x378, lõi [0] [a]);
	chậm trễ (1);
	outPortB (0x37a, 8);
	chậm trễ (1);
	trong khi ((inportb (0x379)) = 128);
	outPortB (0x37a, 12);
	chậm trễ (1);
	outportb (0x378, lõi [1] [a]);
	chậm trễ (1);
	outPortB (0x37a, 8);
	chậm trễ (1);
	outPortB (0x37a, 4);
	chậm trễ (1);
	a ++;
	}
chậm trễ (1);
trong khi ((inportb (0x379)) = 128);
chậm trễ (1);
outPortB (0x37a, 12);
chậm trễ (1);
outPortB (0x378,255);
chậm trễ (1);
outPortB (0x37a, 8);
chậm trễ (10);
}
void new (void) {
clrscr ();
FILE * bm, * db;
printf ("\ n \ nTôi không thể đọc định dạng tệp hiện tại .... (600 X 900) \ n \ n \ n \ n \
nhấn phím bất kỳ để tạo tệp BMP mới \ n \ n \ n \
ESC cho đầu ra ... \ n \ n \ nBảo vệ của bạn sẽ bị mất nếu bạn tạo một BMP mới. ");
if (getche ()! = 27) {
if (! bm = fopen ("c: \\ soner \\ son.bmp", "w"))) {
	printf ("\ n \ nDisk không ghi trên đĩa. \ a \ n \ nNhấn khóa cho kép");
	getche ();
	fclose (bm);
	thoát (0);
if (! db = fopen ("c: \\ soner \\ ram.db", "r"))) {
	printf ("\ n \ nBạn không thể tìm thấy tệp hoặc tệp bị hỏng \ a \ n \ nNhấn khóa cho cả hai");
	getche ();
	fcloseall ();
	thoát (0);
fputc ('B', bm);
while (! (feof (db)))
fputc ((fgetc (db)), bm);
fcloseAll ();
printf ("tệp được tạo thành công");}
printf ("\ n \ n \ n \ nNhấn phím để đóng chương trình.");
getche ();
thoát (0);
}
Tệp tải xuống danh sách LINK (ở định dạng TXT) link-4117.zip mật khẩu-pass: 320volt.com

Post a Comment

[disqus] [facebook] [blogger]

MKRdezign

Biểu mẫu liên hệ

Name

Email *

Message *

Powered by Blogger.
Javascript DisablePlease Enable Javascript To See All Widget
Hỗ trợ trực tuyến