第三部分 8051扩展资源的C编程

上传人:我*** 文档编号:137699320 上传时间:2020-07-11 格式:PPT 页数:28 大小:724.50KB
返回 下载 相关 举报
第三部分 8051扩展资源的C编程_第1页
第1页 / 共28页
第三部分 8051扩展资源的C编程_第2页
第2页 / 共28页
第三部分 8051扩展资源的C编程_第3页
第3页 / 共28页
第三部分 8051扩展资源的C编程_第4页
第4页 / 共28页
第三部分 8051扩展资源的C编程_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《第三部分 8051扩展资源的C编程》由会员分享,可在线阅读,更多相关《第三部分 8051扩展资源的C编程(28页珍藏版)》请在金锄头文库上搜索。

1、教学基本要求: (1)、熟悉8255、8155接口的C编程; (2)、掌握DAC0832接口的C编程; (3)、掌握ADC0809接口的C编程; (4)、掌握键盘接口的C编程; (5)、掌握LED显示器接口的C编程。 教学重点: (1)、键盘接口的C编程; (2)、LED显示器接口的C编程。 教学难点: (1)、在Keil中调试各接口程序,第三部分 8051扩展资源的C编程,一、8255应用的C编程,例:用8255控制打印机 8255采用方式0。打印机忙时,BUSY=1。/STB上升沿锁存时数据。 假设高8位不用的地址线为0,低8位不用为1,则A口、B口、C口和命令口地址为:,007CH(00

2、00 0000 0111 1100),B口为007DH,C口为007EH,命令口为007FH;,8EH(10001110) A口方式0输出,C口高为输入,C口低为输出,,方式选择命令字为:,向打印机输出字符串“WELCOME” #include #include #define uchar unsigned char #define COM8255 XBYTE0 x007f #define PA8255 XBYTE0 x007c #define PC8255 XBYTE0 x007e void toprn( uchar *p) /*打印字符串函数*/ while( *p != 0 ) whil

3、e(0 x80 ,void main(void) uchar idata prn =“WELCOME”; COM8255=0 x8e; /*输出 方式选择命令字*/ COM8255=0 x01; toprn(prn); /*打印字符串*/ ,8155应用的C编程,8155可直接与8051接口,8155的RAM和I/O编址由IO/M和ALE 锁存地址决定: IO/M=0,选择RAM,编址为00H0FFH; IO/M=1 ,对8155的I/O进行读写 , 编址如下;,例:用8155控制打印机,下面是打印“北京SPRING 1999”的程序,其中汉字“北京”在硬汉字库的标准机内代码为B1B1H和BE

4、A9H。打印机与8051采用中断的方式联络。程序名prnbyte.c. #include #include #define uchar unsigned char #define COM8155 XBYTE0 x7ff0 #define PA8155 XBYTE0 x7ff1 #define PC8155 XBYTE0 x7ff3 sbit BUSY=P33; uchar code trb17=0 xb1,0 xb1,0 xbe,0 xa9,0 x20,0 x53,0 x50,0 x52, 0 x49, 0 x4e, 0 x47, 0 x20, 0 x31, 0 x39,0 x39, 0 x3

5、9, 0 x0a; /*北京SPRING 1999*/ uchar t1=17; void prt( uchar d) /*打印一字符函数*/ PA8155=d; /*送打印字代码*/ PC8155=0 x00; /*产生/STB低电平*/ PC8155=0 x01; /*产生/STB上升沿*/ while(BUSY); ,void main(void) COM8155=0 x0f; /*置命令字*/ prt(0 x1c);/*送中文打印方式命令字高字节*/ prt(0 x26); /*送中文打印方式命令字低字节*/ EA=1;/*开CPU中断*/ EX1=1; /*开外中断1*/ while

6、(1) void int1() inerrupt 2 using 1 /*打印机中断服务函数*/ uchar i; EA=0; for(i=0;it1;i+) /*打印一串字符*/ prt(tabi); EA=1; EX1=0;/*关打印机中断*/ ,二、DAC0832应用的C编程,例1:8051与DAC0832双缓冲接口的数据转换程序举例。 两片DAC0832的输入寄存器地址分别为8FFFH和A7FFH,两芯片的DAC寄存器地址为2FFFH。,将data1和data2数据同时转换为模拟量的C51程序如下: # include # include # define INPUTR1 XBYTE

7、0 x8fff # define INPUTR2 XBYTE 0 xa7ff # define DACR XBYTE 0 x2fff # define uchar unsigned char void dac2b (data1 ,data2 ) uchar data1 , data2 ; INPUTR1 = data1 ; /* 送数据到一片0832 */ INPUTR2 = data2 ; /* 送数据到另一片0832 */ DACR= 0 ; /* 启动两路D/A 同时转换 * / ,例2:8051与DAC0832单缓冲区接口的数据转换举例。,根据片选线确定FFFEH为DAC0832的端口

8、地址。使运行输出端输出一个锯齿波电压信号的C51程序如下: # include # include # define DA0832 XBYTE 0 xfffe # define uchar unsigned char # define uint unsigned int void stair (void ) uchar i ; while ( 1 ) for ( i=0 ; i=255 ; i=I+ ) /* 形成锯齿波输出值,最大值为255 */ DA0832 = i ; /* D/A转换输出 */ ,三、ADC0809应用的C编程,例:ADC0809与8051接口的数据采集程序举例。,从A

9、DC0809的8通道轮流采集一次数据,结果送数组ad。 程序如下: # include # include # define uchar unsigned char # define IN0 XBYTE 0 x7ff8 /* 设置AD0809的通道0地址 */ sbit ad_busy =P33 ; /* 即EOC状态 */ void ad0809 ( uchar idata *x ) /* 采样结果放指针中的A/D采集函数 */ uchar i ; uchar xdata *ad_adr ; ad_adr= void kbscan( void ) ; void main ( void ) u

10、char key ;,while( 1 ) key =kbscan ( ) ; dlms( ) ; void dlms( void ) uchar i ; for ( i=200 ; i0 ; i- -) uchar kbscan ( void ) /* 键扫描函数 */ uchar scode ,recode ; P1=0 xf0 ; if ( (P1 & 0 xf0 ) ! =0 xf0 ) /* 若有键按下 */ dlms ( ) ; /* 延时去抖动 */ if ( P1 & 0 xf0 )! = 0 xf0 ) scode =0 xfe ; /* 逐行扫描初值 */ while (

11、scode & 0 x10 ) !=0 ) P1=scode ; /* 输出扫描码 */,if ( P1 & 0 xf0 )! =0 xf0 ) /* 本行有键按下 */ recode= ( P1 & 0 xf0 ) | 0 x0f ; return ( scode ) + ( recode ) ) ; /* 返回特征字节码 */ else scode = ( scode 1) | 0 x01 ; /* 行扫描左移一位 */ return ( 0 ) ; ,五、LED数码管显示器的C编程,例1:LED数码管显示器程序设计举例。,8155片内4个端口地址如下: 命令/状态口 : FFF0H 口A

12、: FFF1H 口B: FFF2H 口C: FFF3H 6位待显示字符从左到右依次放在dis_buf数组中,显示次序从右向左顺序进行。程序中的table 为段选码表,表中段选码表存放的次序为0F等。以下为循环动态显示6位字符的程序,8155命令字为07H。,# include # include # define uchar unsigned char # define COM8155 XBYTE 0 xfff0 # define PA8155 XBYTE 0 xfff1 # define PB8155 XBYTE 0 xfff2 # define PC8155 XBYTE 0 xfff3 u

13、char idata dis_buf6 = 2,4,6,8,10,12 ; uchar code table18 = 0 x3f ,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f, 0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x40,0 x00 ; void dl_ms ( uchar d ) ;,void display ( uchar idata * p ) uchar sel ,i ; COM8155 = 0 x07 ; /* 送命令字 */ sel = 0 x01 ; /* 选出右边的LED *

14、/ for ( i= 0 ; i6 ; i+ ) PB8155=table * p ; /* 送段码 */ PA8155=sel ; /* 送位选码 */ dl_ms ( 1 ) ; p - - ; /* 缓冲区下移1位 */ sel =sel 1 /* 左移1 位 */ void main ( void ) display ( dis_buf +5 ) ; ,例2:串行口控制的静态LCD显示。,输出两位显示,即一字节的程序如下: # include # define uchar unsigned char uchar byte=0 x59 ; void display ( uchar x ) SBUF=x ; /* 由串口输出 */ while ( TI = =0 ); /* 等待8位发送结束 * / TI = 0 ; void main ( void ) display( byte ) ,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号