当前位置:首页 » 编程语言 » 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。然后再与需要用到的口传输数据。不知道有没有说清楚。
你找一本单片机书好好看看,汇编并不难,看明白汇编,单片机就理解差不多了。