51CTO下载-单片机原理与C51编程教案.ppt
文本预览下载声明
//***********显示函数 void display(void) //定义显示函数 {uchar codevalue[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0~F的字段码表 uchar chocode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选码表 uchar i,p,temp; for (i=0;i8;i++) { p=disbuffer[i]; //取当前显示的字符 temp=codevalue[p]; //查得显示字符的字段码 XBYTE[0x7f00]=temp; //送出字段码 temp=chocode[i]; //取当前的位选码 XBYTE[0x7f01]=temp; //送出位选码 delay(20); //延时1ms } } 动态键盘扫描C51编程 #include reg51.h #include absacc.h #define uchar unsigned char #define uint unsigned int void delays(void); uchar kbscan(void); void main(void) { uchar key; while(1) { key=kbscan(); /*键扫描函数*/ delays(); /*键消抖的延时函数*/ } } ◎ // 键消抖的延时函数 ◎ void delays(void) ◎ { ◎ uchar i; ◎ for(i=300;i0;i--); ◎ } // kbscan(void) 键扫描函数 uchar kbscan(void) { uchar sccode,recode; P1=0xf0; /*发全0行扫描码,列线输入*/ if((P10xf0)!=0xf0) /*若有键按下*/ { delays(); /*延时去抖动*/ if((P10xf0)!=0xf0) { sccode=0xfe; /*逐行扫描初值*/ while((sccode0x10)!=0) { P1=sccode; /*输出行扫描码*/ if((P10xf0)!=0xf0) /*本行有键按下*/ { recode=(P10xf0)|0x0f; return((~sccode)+(~recode)); /*返回特征字节码*/ } else sccode=(sccode1)|0x01; /*行扫描码左移一位*/ } } } return(0); /*无键按下,返回值为0*/ } 六.输入输出通道与MCS-51单片机的接口C51编程 例8 下图是一个ADC0809与8051的一个接口电路图。 1.硬件连接 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 ALE WR P2.7 RD INTO + + +5V GND D0 D1 D2 D3 D4 D5 D6 D7 ADDA ADDB ADDC CLK ALE START OE EOC IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7 VREF+ VREF- ADC0809 8051 分 频 器 2.软件编程 设接口电路用于一个8路模拟量输入的巡回检测系统,使用中断方式采样数据,把采样转换所得的数字量按序存于片内RAM的30H~37H单元中。采样完一遍后停止采集。 C语言编程: #include reg51.h #include absacc.h //定义绝对地址访问 #define uchar unsigned char #define IN0 XBYTE[0x0000] //定义IN0为通道0的地址 static uchar data x[8]; //定义8个单元的数组,存放结果 uchar xdata *ad_adr; //定义指向通道的指针 uchar i=0; void main(void) { IT0=1; //初始化 EX0=1; EA=1; i=0; ad_adr=IN0; //指针指向通道
显示全部