當前位置:首頁 » 編程語言 » c語言8255

c語言8255

發布時間: 2022-03-14 10:29:53

⑴ 8255a可編程並行介面c語言實驗

inline int IsSpace(int c)
{
if(c == 0x20 || c == 0x09 || c== 0x0D)
{
return 1;
}
return 0;
}

template<class T>
T RemovePreAndLastSpace(const T& str)
{

int length = str.size();
int i = 0,j = length -1;
while(i < length && IsSpace(str[i])){i++;}

while(j >= 0 && IsSpace(str[j])){j--;}
cout << i << " :" << j<< endl;

if(j<i) return T();

return str.substr(i,j-i+1);
}

⑵ 單片機與8255A的連接以及C語言編程

呵呵,同是8255A,各種作業花樣不同。剛好有一個,好像一樣的。
http://hi..com/47okey/blog/item/005502fd374e9eeafc037f85.html?timeStamp=1323051570109

⑶ 怎樣編寫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
這是對應的地址

⑷ 如何用C語言寫8255a

#include <at89x51.h>
上面是頭文件自己研究一下裡面的數據類型和函數吧
自己是C51,不太了這個

⑸ 8255的C語言編程

RESET:復位輸入線,當該輸入端外於高電平時,所有內部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成輸入方式。
CS:晶元選擇信號線,當這個輸入引腳為低電平時,即/CS=0時,表示晶元被選中,允許8255與CPU進行通訊;/CS=1時,8255無法與CPU做數據傳輸.
RD:讀信號線,當這個輸入引腳為低電平時,即/RD=0且/CS=0時,允許8255通過數據匯流排向CPU發送數據或狀態信息,即CPU從8255讀取信息或數據。
WR:寫入信號,當這個輸入引腳為低電平時,即/WR=0且/CS=0時,允許CPU將數據或控制字寫入8255。
D0~D7:三態雙向數據匯流排,8255與CPU數據傳送的通道,當CPU 執行輸入輸出指令時,通過它實現8位數據的讀/寫操作,控制字和狀態信息也通過數據匯流排傳送。
PA0~PA7:埠A輸入輸出線,一個8位的數據輸出鎖存器/緩沖器, 一個8位的數據輸入鎖存器。
PB0~PB7:埠B輸入輸出線,一個8位的I/O鎖存器, 一個8位的輸入輸出緩沖器。
PC0~PC7:埠C輸入輸出線,一個8位的數據輸出鎖存器/緩沖器, 一個8位的數據輸入緩沖器。埠C可以通過工作方式設定而分成2個4位的埠, 每個4位的埠包含一個4位的鎖存器,分別與埠A和埠B配合使用,可作為控制信號輸出或狀態信號輸入埠。'
A0,A1:地址選擇線,用來選擇8255的PA口,PB口,PC口和控制寄存器.
當A0=0,A1=0時,PA口被選擇;
當A0=0,A1=1時,PB口被選擇;
當A0=1,A1=0時,PC口被選擇;
當A0=1.A1=1時,控制寄存器被選擇.

⑹ c語言段8255數碼管用法

PA口8位接8個開關K1~ K8,PB口8位接8個發光二極體,從PA口讀入8位開關量送PB口顯示。撥動K1~ K8

⑺ 關於8255A的C語言編程的問題

當然不行了,控制寄存器是同一個嘛
你只能在工作模式切換前進行置位和復位操作

⑻ 8255晶元如何用(C語言)

一個IO擴展的晶元,其實你沒必要用82C55,直接用單片機代替進行擴展也是一樣的,而且成本絕對比8255低!


⑼ 求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 c語言

如果是一個IO口復用的話,不用鎖存器是不行的。
IO的值會更新為最新的設置的,沒辦法保留上一次的。

熱點內容
護網腳本 發布:2025-07-22 03:32:38 瀏覽:4
伺服器有多個網口怎麼查看地址 發布:2025-07-22 03:31:54 瀏覽:235
pda掃描服務密碼是多少 發布:2025-07-22 03:06:11 瀏覽:98
暗影精靈2代配置是什麼 發布:2025-07-22 03:02:07 瀏覽:432
密碼鎖恢復出廠設置後如何設置密碼 發布:2025-07-22 03:02:05 瀏覽:787
linux外網ip 發布:2025-07-22 02:49:23 瀏覽:888
內核和根文件系統的編譯與配置 發布:2025-07-22 02:45:00 瀏覽:589
ps存儲了文件但找不到 發布:2025-07-22 02:39:10 瀏覽:191
dcu反編譯 發布:2025-07-22 02:21:50 瀏覽:161
比亞迪車機安卓什麼版本 發布:2025-07-22 02:19:46 瀏覽:983