单片机部分程序单片机的C语言应用程序设计Word文件下载.docx

上传人:b****4 文档编号:16687805 上传时间:2022-11-25 格式:DOCX 页数:46 大小:26.77KB
下载 相关 举报
单片机部分程序单片机的C语言应用程序设计Word文件下载.docx_第1页
第1页 / 共46页
单片机部分程序单片机的C语言应用程序设计Word文件下载.docx_第2页
第2页 / 共46页
单片机部分程序单片机的C语言应用程序设计Word文件下载.docx_第3页
第3页 / 共46页
单片机部分程序单片机的C语言应用程序设计Word文件下载.docx_第4页
第4页 / 共46页
单片机部分程序单片机的C语言应用程序设计Word文件下载.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

单片机部分程序单片机的C语言应用程序设计Word文件下载.docx

《单片机部分程序单片机的C语言应用程序设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机部分程序单片机的C语言应用程序设计Word文件下载.docx(46页珍藏版)》请在冰豆网上搜索。

单片机部分程序单片机的C语言应用程序设计Word文件下载.docx

sbitad_busy=P3^3;

//AD转换结束标志

voidad0809(unsignedchar*x);

//AD转换函数,变量x为AD转换结果的指针

unsignedcharADC0809(unsignedintnADAddrBase,unsignedcharchChannel);

main()

{

unsignedintdatai;

staticunsignedchardataad[8];

//ad0809(ad);

for(i=0;

i<

8;

i++)

{

ad[i]=ADC0809(0x7FF8,i);

}

}

voidad0809(unsignedchar*x)

unsignedchari,j;

//unsignedcharadstate;

unsignedcharxdata*ad_adr;

//指向外部存储空间的指针

ad_adr=IN0;

//获得AD转换通道0的地址

*ad_adr=0;

//启动AD转换

for(j=0;

j<

2;

j++);

//延时,EOC在AD转换启动后10us行变成低电平

//while((adstate=P3&

0x08)==0x00);

//等待AD转换结束

while(ad_busy==0);

//等待AD转换结束,AD转换结束后EOC变高电平

*x=*ad_adr;

ad_adr++;

x++;

//返回值为无符号字符型,变量分别为AD转换器的基地址,AD转换器的模拟通道

unsignedcharADC0809(unsignedintnADAddrBase,unsignedcharchChannel)

unsignedchari,chADResult;

unsignedcharxdata*pADChannel;

pADChannel=nADAddrBase+chChannel;

*pADChannel=chChannel;

i++);

while(ad_busy==0);

chADResult=*pADChannel;

//读AD转换结果

return(chADResult);

AD574

//绝对地址访问头文件,外部扩展接口时加入此头文件

#defineADCOMXBYTE[0xFF7C]//A0=0,R/C=0,CS=0;

#defineADLOXBYTE[0xFF7F]//A0=1,R/C=1,CS=0;

#defineADHIXBYTE[0xFF7D]//A0=0,R/C=1,CS=0;

sbitbRead=P3^7;

//读信号

sbitbWrite=P3^6;

//写信号

sbitbADBusy=P1^0;

//AD转换完成信号

unsignedintAD574();

//AD转换程序

unsignedintnResult;

nResult=AD574();

}

unsignedintAD574()

bRead=0;

//使CE=1;

bWrite=0;

ADCOM=0;

//启支动AD转换

while(bADBusy==1);

return((unsignedint)(ADHI<

<

4)+(ADLO&

0x0f));

ADC0809_P233_11_2

//利用11_3电路,编写由ADC0809的通道6连续采集20个数据放在数组中的程序。

#defineADC0809_6XBYTE[0x7FFE]//通道0的地址

unsignedintADBaseAddr=0x7FF8;

unsignedcharxdata*pADAddr;

unsignedchardataad[20];

unsignedchardatai;

//pADAddr=0x7ffe;

pADAddr=&

ADC0809_6;

*pADAddr=0x08;

//用指针方式AD转换

i=*pADAddr;

20;

ADC0809_6=0;

ad_busy=1;

ad[i]=ADC0809_6;

//用绝对地址方式AD转换

ad0809(ad);

//取8个通道的数据,存储在数组ad中

ad[0]=ADC0809(ADBaseAddr,0);

//取0通道的AD采集结果

//AD采样函数,参数为AD采样结果的指针

ad_adr=&

IN0;

//for(j=0;

//while((adstate=(P3&

0x08))==0x00);

x++;

*pADChannel=0x00;

//for(i=0;

5;

C

Cpara

unsignedcharx,y,z;

x=2;

y=3;

z=x*y;

x=1;

y=2;

Cpara2

unsignedchar*px,*py,*pz;

px=0x18;

py=0x20;

pz=0x22;

*px=2;

*py=3;

*pz=(*px)*(*py);

*px=1;

*py=2;

Cpara3

floatmul(floatx,y);

floatx,y,z;

float*px,*py,*pz;

px=&

x;

py=&

y;

pz=&

z;

x=4;

y=5;

z=mul(x,y);

z=6;

floatmul(floatx,y)

floatz;

returnz;

Cpara4

unsignedchardatax;

//DATA区,内部的低128字节

unsignedcharpdatay;

//外部存储区的最低地址的256个字节,称为PDATA区。

unsignedcharxdataz;

//外部存储区

unsignedcharbdatau;

//内部RAM的位寻址区叫做位寻址段BDATA区,包括16个字节共128位。

unsignedcharidatav;

//8052有附加的128字节的内部RAM,位于从80H开始的地址空间中,这部分加上低128字节的内部RAM共256字节,被称为IDATA。

unsignedcharcodew=0xaa;

//程序存储区称为CODE区

unsignedchardatatemp,temp1;

unsignedchar*pDataAddr;

unsignedcharidata*pIdataAddr;

pDataAddr=&

*pDataAddr=0x01;

temp=*pDataAddr;

*pDataAddr=0x02;

*pDataAddr=0x03;

u;

*pDataAddr=0x04;

v;

*pDataAddr=0x05;

temp=*pDataAddr;

w;

P1=0x08;

//sfrP0=0x80;

sfrP1=0x90;

sfrP2=0xA0;

pIdataAddr=0x90;

//如果CPU选8051,则这个访问无效

*pIdataAddr=0x55;

temp=*pIdataAddr;

pIdataAddr=0x91;

temp1=P1;

P0=0xbb;

DA转换

DAC0832

#defineDA0832XBYTE[0xA001]//DA转换器地址

voidstair(unsignedintchDelay,unsignedcharchVol);

voiddelay(unsignedintndelaytime);

sbitstartP1^7;

while

(1)

if(start)

stair(200,100);

else

;

voidstair(unsignedintchDelay,unsignedcharchVol)

unsignedchari;

=chVol;

DA0832=i;

//DA数据输出

delay(chDelay);

if(!

start)break;

}

voiddelay(unsignedintndelaytime)

unsignedinti;

ndelaytime;

DAC0932_P218_10_4

//单片机的C语言应用程序设计第3版

//P218,第十章4题

//编程实现由DAC0832输出的幅度和频率都可以控制的三角波,即从0上升到最大值,再从最大值下降到0并不断重复。

//图参见211页

#defineDAC0832XBYTE[0xfffe]//DA转换器地址

voidsanjiaobo(unsignedintchDelay,unsignedcharchVol);

sanjiaobo(50,200);

voidsanjiaobo(unsignedintchDelay,unsignedcharchVol)

DAC0832=i;

for(i=chVol;

i>

0;

i--)

DAC0832_P218_10_5

//用8051单片机和0832数模转换器产生梯形波。

梯形波的斜边采用步幅为1的线性波,幅度为00H~80H,

//水平部分靠调用延迟程序来维持。

写出梯形波产生的程序。

voidTiXingBo(unsignedintchDelay,unsignedcharchVol);

TiXingBo(50,200);

voidTiXingBo(unsignedintchDelay,unsignedcharchVol)

HD7279键盘显示控制程序

/**/

#defineCMD_RESET0xa4//复位命令

#defineCMD_TEST0xbf//测试命令

#defineDECODE00x80//译码方式0

#defineDECODE10xc8//译码方式1

#defineCMD_READ0x15//读键盘命令

#defineUNDECODE0x90//非译码方式

#defineRTL_CYCLE0xa3//循环左移

#defineRTR_CYCLE0xa2//循环右移

#defineRTL_UNCYL0xa1//左移

#defineRTR_UNCYL0xa0//右移

#defineACTCTL0x98//消隐控制

#defineSEGON0xe0//段点亮

#defineSEGOFF0xc0//段关闭

#defineBLINKCTL0x88//闪烁控制

//******

voidinit();

//初始化程序

voidkeyint();

//键盘中断服务程序

voidlong_delay(void);

//长延时程序

voidshort_delay(void);

//短延时程序

voidwrite7279(unsignedcharcmd,unsignedchardta);

//往HD7279A中写命令

unsignedcharread7279(unsignedcharcommand);

//从HD7279A中读键值

voidsend_byte(unsignedcharout_byte);

//往HD7279A中写入一个字节

unsignedcharreceive_byte(void);

//从HD7279A中读出一个字节

voiddisplay();

//显示程序

//***I/O***

sbitcs=P1^1;

//片选信号接P1.1

sbitclk=P1^2;

//CLK信号接P1.2

sbitdat=P1^0;

//DATA信号接P1.0

sbitkey=P3^2;

//键盘中断信号接P3.2

//******HD7279A******

unsignedcharchKey;

//键盘返回值

bitbNewKey;

//有新键值标志位。

unsignedchardispdata[6]={7,8,0,0,0,0};

//要显示的数据,六位

voiddispcode(unsignedcharchData);

//形成显示代码

//主程序实验功能是按下一个键,显示出相应的键。

bitbt;

bt=dat;

init();

bNewKey=0;

display();

if(bNewKey)//是否有新键按下

{

for(i=0;

6;

i++)//如果有则在显示器中显示出键值

{

dispdata[i]=chKey;

}

display();

//显示

bNewKey=0;

//清有新键按下标志

}

voidinit()

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;

#:

0x1e

voidkeyint()interrupt0using1

unsignedchartemp;

temp=read7279(0x15);

//读出键值

switch(temp)

case0x04:

chKey=1;

break;

case0x05:

chKey=2;

break;

case0x06:

chKey=3;

case0x0c:

chKey=4;

case0x0d:

chKey=5;

case0x0e:

chKey=6;

case0x14:

chKey=7;

case0x15:

chKey=8;

case0x16:

chKey=9;

case0x1d:

chKey=0;

case0x1c:

chKey=10;

case0x1e:

chKey=11;

bNewKey=1;

//表示有新的键按下

//显示程序

voiddisplay()

unsignedcharj;

j++)

write7279((0x80+j),dispdata[j]);

//把显示数据输出

//往HD7279A中写入一个字节.

voidsend_byte(unsignedcharout_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