1、sbit ad_busy=P33; /AD转换结束标志void ad0809(unsigned char *x); /AD转换函数,变量x为AD转换结果的指针unsigned char ADC0809(unsigned int nADAddrBase,unsigned char chChannel);main() unsigned int data i; static unsigned char data ad8;/ ad0809(ad); for(i=0;i8;i+) adi=ADC0809(0x7FF8,i); void ad0809(unsigned char *x) unsigned
2、char i,j;/ unsigned char adstate; unsigned char xdata *ad_adr; /指向外部存储空间的指针 ad_adr= IN0; /获得AD转换通道0的地址 *ad_adr =0; /启动AD转换 for(j=0;j2;j+); /延时,EOC在AD转换启动后10us行变成低电平 / while(adstate=P3&0x08)=0x00); /等待AD转换结束 while(ad_busy=0); /等待AD转换结束,AD转换结束后EOC变高电平 *x=*ad_adr; ad_adr+; x+;/返回值为无符号字符型,变量分别为AD转换器的基地址
3、,AD转换器的模拟通道unsigned char ADC0809(unsigned int nADAddrBase,unsigned char chChannel) unsigned char i,chADResult; unsigned char xdata *pADChannel; pADChannel=nADAddrBase+chChannel; *pADChannel=chChannel;i+); while(ad_busy=0); chADResult=*pADChannel; /读AD转换结果 return(chADResult);AD574 /绝对地址访问头文件,外部扩展接口时加
4、入此头文件#define ADCOM XBYTE0xFF7C /A0=0,R/C=0, CS=0;#define ADLO XBYTE0xFF7F /A0=1,R/C=1, CS=0;#define ADHI XBYTE0xFF7D /A0=0,R/C=1, CS=0;sbit bRead=P37; /读信号sbit bWrite=P36; /写信号sbit bADBusy=P10; /AD转换完成信号unsigned int AD574(); /AD转换程序 unsigned int nResult; nResult=AD574(); unsigned int AD574() bRead=0
5、; /使CE=1; bWrite=0; ADCOM=0; /启支动AD转换 while(bADBusy=1); return(unsigned int)(ADHI0;i-)DAC0832_P218_10_5/用8051单片机和0832数模转换器产生梯形波。梯形波的斜边采用步幅为1的线性波,幅度为00H80H,/水平部分靠调用延迟程序来维持。写出梯形波产生的程序。void TiXingBo(unsigned int chDelay,unsigned char chVol); TiXingBo(50,200);void TiXingBo(unsigned int chDelay,unsigned
6、char chVol)HD7279键盘显示控制程序/*/#define CMD_RESET 0xa4 /复位命令#define CMD_TEST 0xbf /测试命令#define DECODE0 0x80 /译码方式0#define DECODE1 0xc8 /译码方式1#define CMD_READ 0x15 /读键盘命令#define UNDECODE 0x90 /非译码方式#define RTL_CYCLE 0xa3 /循环左移#define RTR_CYCLE 0xa2 /循环右移#define RTL_UNCYL 0xa1 /左移#define RTR_UNCYL 0xa0 /右
7、移#define ACTCTL 0x98 /消隐控制#define SEGON 0xe0 /段点亮#define SEGOFF 0xc0 /段关闭#define BLINKCTL 0x88 /闪烁控制/* *void init(); /初始化程序void keyint(); /键盘中断服务程序void long_delay(void); /长延时程序void short_delay(void); /短延时程序void write7279(unsigned char cmd, unsigned char dta); / 往HD7279A中写命令unsigned char read7279(uns
8、igned char command); / 从HD7279A中读键值void send_byte(unsigned char out_byte); /往HD7279A中写入一个字节unsigned char receive_byte(void); /从HD7279A中读出一个字节void display(); /显示程序 /* I/O *sbit cs=P11; /片选信号接P1.1sbit clk=P12; /CLK信号接P1.2sbit dat=P10; /DATA信号接P1.0sbit key=P32; /键盘中断信号接P3.2/* HD7279A *unsigned char chK
9、ey; /键盘返回值bit bNewKey; /有新键值标志位。unsigned char dispdata6=7,8,0,0,0,0; /要显示的数据,六位void dispcode(unsigned char chData); /形成显示代码/主程序实验功能是按下一个键,显示出相应的键。 bit bt; bt=dat; init(); bNewKey=0; display(); if(bNewKey) /是否有新键按下 for(i=0;6;i+) /如果有则在显示器中显示出键值 dispdatai=chKey; display(); /显示 bNewKey=0; /清有新键按下标志 voi
10、d init() PX0=0; /*外部中断0优先级*/ IT0=0; /*外部中断0,低电平触发*/ IE0=0; /*外部中断0中断申请标志位*/ EX0=1; /*允许外部中断0*/ EA=1; send_byte(CMD_RESET); /HD7279A复位/按照实验箱的接法,接一个3*4小键盘,它们的键值分别是:/1:0x04;2:0x05;3:0x06;4:0x0c;5:0x0d;6:0x0e;7:0x14;8:0x15;9:0x0x16;*:0x1c;0:0x1d;#:0x1evoid keyint() interrupt 0 using 1 unsigned char temp
11、; temp=read7279(0x15);/读出键值 switch(temp) case 0x04: chKey=1; break; case 0x05: chKey=2; break; case 0x06: chKey=3; case 0x0c: chKey=4; case 0x0d: chKey=5; case 0x0e: chKey=6; case 0x14: chKey=7; case 0x15: chKey=8; case 0x16: chKey=9; case 0x1d: chKey=0; case 0x1c: chKey=10; case 0x1e: chKey=11; bNe
12、wKey=1; /表示有新的键按下/显示程序void display() unsigned char j;j+) write7279(0x80+j),dispdataj);/把显示数据输出/往HD7279A中写入一个字节.void send_byte( unsigned char out_byte) / EA=0; clk=0; /CLK变低电平 long_delay(); for (i=0; if (out_byte&0x80) /得到要输出的数据位,高位在先 dat=1; dat=0; clk=1; /CLK变高电平,这一位写入HD7279A寄存器 short_delay(); /延时 /CLK变低,为下一次写入数据作准备 out_byte=out_by
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1