C8051F020程序库Word文档下载推荐.docx
- 文档编号:19826830
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:41
- 大小:25.89KB
C8051F020程序库Word文档下载推荐.docx
《C8051F020程序库Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C8051F020程序库Word文档下载推荐.docx(41页珍藏版)》请在冰豆网上搜索。
sfr16DAC0
=0xd2;
//DAC0data
sfr16DAC1
=0xd5;
//DAC1data
unsignedintad_temp,dis_y=0;
unsignedcharad_i=0;
chartabc;
unsignedchardis_i,dis_k=0;
unsignedchart_count,t_i;
unsignedintt_timecount;
bitt_flag;
unsignedlongt_y=0;
voidSYSCLK_Init(void)
{
unsignedinti;
//delaycounter
OSCXCN=0x67;
//startexternaloscillatorwith
for(i=0;
i<
3000;
i++);
//Waitforosc.tostartup
while(!
(OSCXCN&
0x80));
//Waitforcrystalosc.tosettle
OSCICN=0x88;
}
//-----------------------------------------------------------------------------
//函数名称:
PORT_Init
()
//函数功能:
通用I/O口及交叉开关初始化
//入口参数:
无
//出口参数:
//全局变量引用:
//调用模块:
无
voidPORT_Init(void)
XBR1
=0x02;
XBR2
=0x40;
P74OUT
=0x0f;
//P2口设为推挽方式
P4=0x07;
voidT_Init(void)
CKCON=0X18;
TMOD=0x15;
IP=0x0a;
TH0=0;
TL0=0;
TH1=(65536-44237)/256;
TL1=(65536-44237)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
//ADC0配置,T3定时启动ADC
voidADC0_Init(void)
ADC0CN=0x00;
//ADC0向AD0BUSY写1时采样,左对齐
REF0CN=0x03;
//启用内部基准源
ADC0CF=0X40;
AMX0SL=0x01;
AD0EN=1;
//选择采样输入源
EIE2|=0x02;
//启用ADC中断
voidt0(void)interrupt1
t_count++;
voidt1(void)interrupt3
t_timecount++;
if(t_timecount==250)
TR0=0;
t_timecount=0;
t_flag=1;
//ADC0采样中断
voidADC0_ISR(void)interrupt15
AD0INT=0;
//清ADC中断标志位
ad_temp=((ADC0H*256+ADC0L)*13)>
>
10;
tab_wave[ad_i]=(unsignedchar)(ad_temp&
0xff);
ad_i++;
if(ad_i>
=216){ad_i=0;
AD0EN=0;
AD0BUSY=1;
//主程序
voidmain(void)
{
WDTCN=0xde;
WDTCN=0xad;
//禁止看门狗定时器
SYSCLK_Init();
//系统时钟初始化
PORT_Init();
ADC0_Init();
T_Init();
lcd_int1();
wtcd2(0x24,0x0000);
show_coor(X_length,Y_length,origin_X,origin_Y,0,0);
showxy();
displayword(0,112,tab_word,2);
displayword(13,112,tab_word+64,2);
displaychar(6,112,tab_char+48,1);
displaychar(10,112,tab_char+64,1);
displaychar(23,112,tab_char+80,2);
AD0BUSY=1;
EA=1;
while
(1)
//幅度显示
if(AD0EN==0)
show_wave
(1);
for(dis_i=0,dis_k=0;
dis_i<
216;
dis_i++)
if(tab_wave[dis_i]>
dis_k)dis_k=tab_wave[dis_i];
dis_y=(unsignedint)dis_k;
dis_y=(dis_y*755)>
4;
//dis_y=dis_y>
8;
displaychar(5,112,tab_number+(dis_y/1000%10)*16,1);
displaychar(7,112,tab_number+(dis_y/100%10)*16,1);
displaychar(8,112,tab_number+(dis_y/10%10)*16,1);
displaychar(9,112,tab_number+(dis_y%10)*16,1);
//
//计数显示
for(t_i=0;
t_i<
6;
t_i++)
{
if(t_flag==1)
t_flag=0;
t_y=(t_count*65536+TH0*256+TL0)*2;
t_timecount=0;
t_count=0;
TH0=0;
TL0=0;
TR0=1;
}
displaychar(18,112,tab_number+(t_y/10000%10)*16,1);
displaychar(19,112,tab_number+(t_y/1000%10)*16,1);
displaychar(20,112,tab_number+(t_y/100%10)*16,1);
displaychar(21,112,tab_number+(t_y/10%10)*16,1);
displaychar(22,112,tab_number+(t_y%10)*16,1);
show_wave(0);
AD0EN=1;
---------------------------------------------------------------------------------------------------------------
dis240128.c文件
--------------------------------------------------------------------------------------------------------------
#defineX_length216
//xway
#defineY_length106
//yway
#defineorigin_X0
//原点x(绝对坐标)
#defineorigin_Y53
//原点y(绝对坐标)y为53
unsignedcharcklcdst(void)
unsignedchartemp;
P5=0xFF;
P4=0x03;
temp=P5;
P4=0x07;
returntemp;
voidcheck01(void)//状态位STA1,STA0判断(读写指令和读写数据)
while(cklcdst()&
0x03!
=0x03);
/*
voidcheck3(void)//状态位ST3判断(数据自动写状态)
while(cklcdst()&
0x08!
=0x08);
voidcheck2(void)//状态位ST2判断(数据自动读状态)
0x04!
=0x04);
voidcheck6(void)//状态位ST6判断(屏读/屏拷贝状态)
0x40!
=0x40);
voiddelay1000(unsignedchardelayvalue)
unsignedchari;
unsignedintj;
i=delayvalue;
while(i--)
j=1000;
while(j--);
voidawtdt0(unsignedcharuData)//自动写数据
check3();
wtdt(uData);
*/
voiddelay50(unsignedchardelayvalue)
unsignedchari,j;
j=50;
}//
voidwtcd(unsignedcharcmd)
P4=0x05;
P5=cmd;
delay50
(1);
//------------------------------------------------------------------------------
//IO口方式写数据
//status:
O.K.
voidwtdt(unsignedcharlcddata)
P4=0x04;
P5=lcddata;
P4=0x06;
voidwtcd2(unsignedcharuCmd,unsignedintuPar)//写双参数的指令
check01();
wtdt(uPar&
0xFF);
//先写低字节,再写高字节
wtdt((unsignedchar)(uPar>
8));
wtcd(uCmd);
/********************
//=函数原型:
ucharwr_cmd_1(ucharuCmd,ucharuPar1)
//=功
能:
给T6963C写带单参数的指令
//=参
数:
//=返回值:
返回0成功,否则忙
//=函数性质:
私有函数
********************/
voidwtcd1(unsignedcharuCmd,unsignedcharuPar)//写单参数的指令
wtdt(uPar);
voidwtcd0(unsignedcharuCmd)//写无参数的指令
voidwtdt0(unsignedcharuData)//写一次数据
voidlcdclr()
unsignedchari,j;
wtcd0(0xb0);
for(j=0;
j<
=0x80;
j++)
for(i=0;
i<
=0x1E;
i++)
wtdt0(0x00);
wtcd0(0xb2);
//----------------------------------------------------------------------------------
//初始化函数
voidlcd_int1()
{lcdclr();
//清屏
wtcd2(0x42,0x0000);
wtcd2(0x43,0x001e);
//图形显示宽度30
wtcd0(0x80);
//显示方式OR功能
wtcd0(0x98);
//启用图形显示方式,光标闪烁
voidprintpoint(unsignedcharPointX,unsignedcharPointY,bitflag)
unsignedintk=0;
unsignedcharldata=0xf0;
//bitoperation
:
flag=0bitresetandflag=1bitset;
(7-PointY%8)isselect
bit.
k=PointY*30+PointX/8;
//ksavetheaddress
ldata=ldata+7-PointX%8;
if(flag)ldata=ldata|0x08;
wtcd2(0x24,k);
wtcd0(ldata);
//outputthebitoperation
//--------------------------------------------------------------------------
voidshow_coor(unsignedcharx_length,unsignedchary_length,unsignedcharorigin_x,unsignedcharorigin_y,bitoffset,bitoffset1)
{
unsignedchari,j,k,l,m;
//showcoordinatestartpoint
if((offset==0)&
&
(offset1==0))
{j=origin_x;
k=x_length+origin_x+6;
l=origin_y-y_length/2;
m=y_length+origin_y-y_length/2+3;
//ywaylength
elseif((offset==0)&
(offset1==1))
j=origin_x;
l=origin_y;
m=y_length+origin_y+3;
elseif((offset==1)&
l=origin_y-y_length;
m=y_length+origin_y-y_length+3;
//showthecoordinate
for(i=j;
k;
i++)//xway
printpoint(i,origin_y,1);
for(i=l;
m;
i++)//Y_way
printpoint(origin_x,i,1);
i=i+y_length/8)//y_wayaveragedividing
printpoint(origin_x+1,i,1);
i=i+x_length/8)//xwayaveragedividing
printpoint(i,origin_y-1,1);
printpoint(i-1,origin_y-1,1);
//xwaythenextpoint
//----------------------------------------------------------------------------------
voidshow_wave(bitmod)
//
y
0
1
unsignedchari,k;
for(i=1;
X_length;
{
k=origin_Y-tab_wave[i];
if(k!
=origin_Y)printpoint(origin_X+i,k,mod);
}
//汉化显示程序,y为行,x为列,注意一个汉字占两列,而西文字符占一列
voiddisplayword(unsignedcharx,unsignedchary,unsignedchar*word,unsignedcharc)
unsignedintxy;
unsignedchari,j,k=0;
xy=y*30+x;
for(i=0;
c;
for(j=0;
16;
wtcd2(0x24,xy+j*30+i*2);
//置地址指针
lowaddress
wtcd1(0xc0,word[k]);
wtcd1(0xc0,word[k+1]);
k+=2;
//字符显示程序,y为行,x为列,注意一个汉字占两列,而西文字符占一列
voiddisplaychar(unsignedcharx,unsignedchary,unsignedchar*word,unsignedcharc)
unsigned
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C8051F020 程序库
![提示](https://static.bdocx.com/images/bang_tan.gif)