當前位置:首頁 » 編程語言 » 8255初始化c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

8255初始化c語言

發布時間: 2022-09-13 16:47:12

㈠ 8255的C語言編程

P0口不像P1P2P3那樣內部有上拉電阻。若要輸出高電平要接上拉電阻。
單片機不要直接連8255,P0通過一個地址鎖存器(74LS373)連8255.要用p0口先發控制字,連在8255的A0A1和CS上。
A1A0若為01、10、11,分別選中8255的B口C口和控制口。若通過鎖存器連在)P0.1和P0.0,地址用16為表示,沒用到的埠設為1,則FF7CH、FF7DH、FF7EH、FF7FH分別是8255的ABC及控制口的地址。具體看你的硬體電路了。所以沒有固定的。
先給控制口發工作方式,如90H代表工作方式0。然後再與需要用到的口傳輸數據。不知道有沒有說清楚。
你找一本單片機書好好看看,匯編並不難,看明白匯編,單片機就理解差不多了。

㈡ 求8255的C語言編程舉例(希望有圖有程序)

/*本實驗通過P0口的分時復用,用8255擴展IO口,用74hc53鎖存低8位地址
8255的wr和rd直接與單片機的wr、rd連接,當做外部存儲器來使用,8255
的PA口上接LCD1602的數據埠,本程序的功能是在LCD上顯示字元串和自
定義的圖形,已成功實現(板子是自己焊的) */
/*********************包含頭文件*********************************/
#include <REGX51.H>
#include<absacc.h>
#define CLEARSCREEN LCD_write_command(0x01)
#define uint unsigned int
#define uchar unsigned char
/**************定義介面************************/
#define LCDIO P0
#define PA XBYTE[0xFF00]
#define PB XBYTE[0xFF01]
#define PC XBYTE[0xFF02]
#define COM XBYTE[0xFF03]
sbit LCD1602_RS=P1^0;
sbit LCD1602_RW=P1^1;
sbit LCD1602_EN=P1^2;
unsigned char table1[]={ 0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,
0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,
0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,
0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00}; //心圖案
/**************定義函數************************/
void LCD_write_command(unsigned char command); //寫入指令函數
void LCD_write_dat(unsigned char dat); //寫入數據函數
void LCD_set_xy( unsigned char x, unsigned char y ); //設置顯示位置函數
void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat); //顯示一個字元函數
void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s); //顯示字元串函數
void LCD_init(void); //初始化函數
void delay_nms(unsigned int n); //延時函數
void delay();
void init_8255();
void write_8255PA(uchar ch);
/**************8255初始化******************************/
void init_8255()
{
COM=0x80;
}
/*************往PA口寫數據*******************************/
void write_8255PA(uchar ch)
{
PA=ch;
}
/************初始化函數****************/
void LCD_init(void)
{
CLEARSCREEN; //clear screen
LCD_write_command(0x38); //set 8 bit data transmission mode
LCD_write_command(0x0d); //open display (enable lcd display)
LCD_write_command(0x80); //set lcd first display address
CLEARSCREEN; //clear screen
}

/**************寫指令函數********************************/
void LCD_write_command(unsigned char command)
{
write_8255PA(command);
delay_nms(100);
LCD1602_RS=0;
LCD1602_RW=0;
LCD1602_EN=0;
LCD1602_EN=1;
delay_nms(10);
}
/***************************************************/
/****************寫數據函數************************/
void LCD_write_dat(unsigned char dat)
{
write_8255PA(dat);
delay_nms(100);
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_EN=0;
delay_nms(1);
LCD1602_EN=1;
}
/****************************************************/
/***************設置顯示位置**************************/
void LCD_set_xy( unsigned char x, unsigned char y )
{
unsigned char address;
if (y == 1)
address = 0x80 + x;
else
address =0xc0+ x;
LCD_write_command(address);
}
/***************************************************/
/****************顯示一個字元**********************/
void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat)
{
LCD_set_xy( x, y );
LCD_write_dat(dat);
}
/**********************************************/
/***************顯示字元串函數***************/
void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s)
{
LCD_set_xy( X, Y );
while (*s)
{
LCD_write_dat(*s);
s ++;
}
}
/***********************************************/
/********** 延時**********************/
void delay_nms(unsigned int n)
{
unsigned int i=0,j=0;
for (i=n;i>0;i--)
for (j=0;j<10;j++);
}
/**************************************/
void delay()
{ int i;
for(i=0;i<50;i++)
delay_nms(100);}
/***********主函數**************/
void main(void)
{
unsigned char i,j,k,tmp;
init_8255();
LCD_init();
delay_nms(100);
tmp=0x40;//設置CGRAM地址的格式字
k=0;
for(j=0;j<8;j++)
{
for(i=0;i<8;i++)
{
LCD_write_command(tmp+i); // 設置自定義字元的 CGRAM 地址
delay_nms(2);
LCD_write_dat(table1[k]); // 向CGRAM寫入自定義字元表的數據
k++;
delay_nms(2);
}
tmp=tmp+8;
}
LCD_dsp_string(1,1,"LCD TEST ");//在第一行第一列顯示"LCD TEST"
LCD_dsp_string(1,2,"SUCCESSFUL ");//在第二行第一列顯示"SUCCESSFUL"
for (i=0;i<4;i++)
{
LCD_dsp_char( 12+i,1,i);//在第一行第12列位置顯示心圖案的上半部
delay_nms(1);
}
for (i=4;i<8;i++)
{
LCD_dsp_char(12+i-4,2,i);//在第二行第12列位置顯示心圖案的下半部
delay_nms(1);
}
do
{
LCD_write_command(0x08);
delay();
LCD_write_command(0x0c);
delay();
}while (1);
}

㈢ 關於8255初始化,埠地址賦值

1、地址確定
因為A10A9A8A7A6A5A4A3=01010011,A2A1=11為控制字埠,A2A1=10為C口,A2A1=01為B口,A2A1=00為A口,A0為0,所以8255A地址范圍為24CH~24FH。
2、控制字確定
因為A口為方式0輸出,B口為方式0輸入,所以控制字為10000010B=82H
3、初始化程序
MOV AL,82H
MOV DX,24FH
OUT DX,AL
http://..com/question/43029502.html?fr=qrl

㈣ 怎樣編寫8255A的初始化 (用C語言)請指教!

#include "reg51.h"
#include "absacc.h"
#define COM XBYTE[0x7FFF] //8255A 控制口地址
#define PA XBYTE[0x7CFF] //8255A A口地址
#define PB XBYTE[0x7DFF] //8255A B口地址
上面就是初始化 後面比如 你要在pa口 輸出0x80那就
PA=0x80;
那個地址的演算法
假設P0口連接D7~D0,P2.1、P2.0連接A1A0,P2.7連接
,那地址就應該是:
A口:0111110011111111 即7CFF
B口:0111110111111111 即7DFF
C口:0111111011111111 即7EFF
控制寄存器:0111111111111111 即7FFF
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
這是對應的地址

㈤ 求8255C語言編程

========================
下面的代碼是編譯和運行方式如下:

#包括<stdio.h>
#包括<conio.h>

#定義PI 3.14。

無效的主要()
{
INT R = 0;
?整數k = 0;

?輸出(「請輸入一個半徑為r:\ n」);
?scanf的(「%d」,&R);

輸出(「\ n \ n請輸入處理要求的\ n 1。計算面積?一個圓圈\ n 2計算一個圓的周長\ n 3。計算一個圓的周長和面積?一個圓\ n「);
scanf函數(「%d」,&K);

而(1)
?{
?開關(K)
?{
?案例1:
?printf(「請的面積?一個圓圈:0.2%F \ n」,PI * R * R);
?;
?案例2:
?輸出(「圓的周長:%.2 F \?」,2 * PI * R);
?;
?案例3:
?printf(「請的面積?一個圓圈:0.2%F \ n」,PI * R * R);
?輸出(「圓的周長:%.2 F \?」,2 * PI * R);
?;
?默認情況下:
?printf(「請誤差要求!\ n」);
?;
?}

輸出(「\ n \ n請輸入處理要求的\ n 1。計算面積?一個圓圈\ n 2計算一個圓的周長\ n 3。計算一個圓的周長和面積?一個圓\ n「);
scanf函數(「%d」,&K);
?}

?的getch();
}

㈥ 求救,多片8255怎麼初始化,用C語言實現。74LS373怎麼進行數據的緩沖和鎖存。謝謝指教。

可以把使能接在74ls373上,這樣地址和數據就是分開的。
第一片8255接的使能是Q5,第二片接的是Q6,第三片接的是Q7。
程序我給你發過去吧!

㈦ 8255初始定義,有這4個問題。。C語言,keil

先添加頭文件,INIT8255這個函數是頭文件已經定義?

頭文件添加完成之後,try it。
如果不行,再重新定義一下INIT8255()
四個錯誤,就是該函數中的變數add8255、 PA8255、 P13未定義;
修正錯誤,就是定義一下,定義成unsignd int;
INIT8255()被多次定義,查找一下,去掉其中一處。
(猜測)
應該是頭文件未添加導致的。
INIT8255在頭文件中,應該已經被定義完成了,你自己再次定義了,就出現上述錯誤。

㈧ 怎樣用C語言對8255進行初始化謝謝!!!

你指的8255是什麼?
int r=8255,賦值你是指這個?

㈨ 8255初始化C語言

參考答案 給我一個支點,我把鄰居那小子的汽車翹到溝里去,省得他見我就按喇叭。

㈩ C語言編程.8255流水燈設計這是8燈循環的編程。怎麼修改才能有不同的閃爍呢請各位大俠幫幫忙。謝謝了。

出高電平要接上拉電阻。
單片機不要直接連8255,P0通過一個地址鎖存器(74LS373)連8255.要用p0口先發控制字,連在8255的A0A1和CS上。
A1A0若為01、10、11,分別選中8255的B口C口和控制口。若通過鎖存器連在)P0.1和P0.0,地址用16為表示,沒用到的埠設為1,則FF7CH、FF7DH、FF7EH、FF7FH分別是8255的ABC及控制口的地址。具體看你的硬體電路了。所以沒有固定的。
先給控制口發工作方式,如90H代表工作方式0。然後再與需要用到的口傳輸數據。不知道有沒有說清楚。
你找一本單片機書好好看看,匯編並不難,看明白匯編,單片機就理解差不多了。