#include "C8051F330.h"
#include"math.h"
sbit TX=P0^4;
sbit RX=P0^5;
void Port_IO_Init();
void Oscillator_Init();
void Interrupts_Init();
void Init_Device(void);
void ADC_Init();
void PCA_Init();
void Interrupts_Init();
void Voltage_Reference_Init();
unsigned int disbuf[4];
unsigned char M[5];
unsigned int minute=1;
void delay(unsigned int m);
void key(void);
void display(void);
void sx (void);
double s;
bit b=0;
unsigned char a=5; //P0.7标志
unsigned char b1=0; //闪烁的标志
unsigned char M[5]={0,0,0,0,1};
long v;
double v1;
double vlue;
double vlue1;
unsigned char c=0;
void main( )
{
unsigned char i;
Init_Device();
//AD0BUSY=1;
for(i=0;i<4;i++)
{
disbuf[i]=i;
}
do{
key();
if(a==5)
{
if(b==1)
{
s=(((ADC0H*0x0100+ADC0L)*25*1000L)/1024);
v=s*s;
c++;
v1=v1+v;
if(c==100)
{
vlue=sqrt(v1/10000);
// vlue=v1/100000;
c=0;
v1=0;
vlue1= minute*vlue/1000;
// }
// vlue1= 12.31;
if(vlue1>=0&&vlue1<10)
{
vlue1=vlue1*1000;
disbuf[0]=(int)vlue1/1000+10;
disbuf[1]=((int)vlue1%1000)/100;
disbuf[2]=((int)vlue1%100)/10;
disbuf[3]=(int)vlue1%10;
vlue1=0;
}
if(vlue1>=10&&vlue1<100)
{
vlue1=vlue1*100;
disbuf[0]=(int)vlue1/1000;
disbuf[1]=((int)vlue1%1000)/100+10;
disbuf[2]=((int)vlue1%100)/10;
disbuf[3]=(int)vlue1%10;
vlue1=0;
}
if(vlue1>=100&&vlue1<1000)
{
vlue1=vlue1*10;
disbuf[0]=(int)vlue1/1000;
disbuf[1]=((int)vlue1%1000)/100;
disbuf[2]=((int)vlue1%100)/10+10;
disbuf[3]=(int)vlue1%10;
vlue1=0;
}
if(vlue1>=1000)
{
//vlue1=vlue1*100;
disbuf[0]=(int)vlue1/1000;
disbuf[1]=((int)vlue1%1000)/100;
disbuf[2]=((int)vlue1%100)/10;
disbuf[3]=(int)vlue1%10;
vlue1=0;
}
// }
b=0;
display();
//delay(10);
}
}
//display();
// delay(10);
}
// AD0BUSY=1;
else
{
// for(i=0;i<10;i++)
// {
sx ();
display();
delay(10);
// }
}
}while(1);
}
void key(void)
{
unsigned char keycode,k1;
k1=~(P0)&0x0C0;
delay (10); //读键
if ( k1 != 0) //有键按下
{
IE=0x00; //关中断
delay (10); //延时
keycode=~(P0)&0x0C0; //读键码
do //等待键释放
{
k1=~(P0)&0x0C0;
}
while (k1!=0);
switch (keycode)
{
case 0x40: //P0.6键,分加一
{
// minute++;
// if (minute==60) minute=0;
M[a]++;
if(M[1]==6)
M[1]=0;
if(M[2]==10)
M[2]=0;
if(M[3]==10)
M[3]=0;
if(M[4]==10)
M[4]=0;
minute=M[1]*1000+M[2]*100+M[3]*10+M[4];
if (minute>6000)
{ minute=0;
M[1]=0;
M[2]=0;
M[3]=0;
M[4]=0;}
};
break;
case 0x80: //P0.7键,时加一
{
//minute=0;
a=a-1;
if(a==0)
a=5;
c=0;
// hour++;
/* if (hour==24)
hour=0;
if (minute==60)
minute=0;*/
};
}
// sx(); //送显示
IE=0xA0;
//开中断
//minute=M[1]*1000+M[2]*100+M[3]*10+M[4];
}
}
void sx (void) //送显示函数
{
disbuf[0]=minute/1000; //分个位
disbuf[1]=minute%1000/100; //分十位
disbuf[2]=minute%100/10; //时个位
disbuf[3]=minute%10; //时十位
b1++;
if(b1<5)
disbuf[a-1]=20 ;
if(b1==10)
b1=0;
}
void delay(unsigned int m)
{
unsigned int k,i;
for(k=0;k<m;k++)
{
for(k=0;k<m;)
{
i++;
if(i==300)
{k++;
i=0;}
}
}
}
void display(void )
{
unsigned char i;
code unsigned char disptab[21]={/*0x11,0x7d,0x23,0x29,0x4d,
0x89,0x81,0x3d,0x01,0x09//共阴*/
0x88,0x0eb,0x04c,0x049,0x2b,0x19,
0x18,0x0cb,0x08,0x09,0x80,0x0e3,0x44,0x41,
0x23,0x11,0x10,0x0c3,0x00,0x01,0xff
//小板子上的
/* 0x11,0x7d,0x23,0x29,0x4d,
0x89,0x81,0x3d,0x01,0x09*/ };
unsigned char n,m;
for(n=0;n<4;n++)
{
TX=1;
m=disptab[disbuf[3-n]];
for(i=0;i<8;i++)
{
RX=m/128;
TX=0;
TX=1;
m=m*2;
}
}
}
void time2(void)interrupt 5
{
TF2H=0;
}
void ADC(void) interrupt 10
{
/* s=((ADC0H*0x0100+ADC0L)*33*100L)/1024;
disbuf[0]=(int)s/1000+10;
disbuf[1]=((int)s%1000)/100;
disbuf[2]=((int)s%100)/10;
disbuf[3]=(int)s%10;*/
/* v=(((ADC0H*0x0100+ADC0L)*3.3)/1024)*(((ADC0H*0x0100+ADC0L)*3.3)/1024);
c++;
s=s+v;
if(c==100)
{
vlue=sqrt(s/100)*1000;
s=0;
}
c=0;
disbuf[0]=(int)vlue/1000+10;
disbuf[1]=((int)vlue%1000)/100;
disbuf[2]=((int)vlue%100)/10;
disbuf[3]=(int)vlue%10;*/
b=1;
AD0INT=0;
// AD0BUSY=1;
}
// Peripheral specific initialization functions,
// Called from the Init_Device() function
void PCA_Init()
{
PCA0MD &= ~0x40;
PCA0MD = 0x00;
}
void Timer_Init()
{
CKCON = 0x50;
TMR2CN = 0x04;
TMR2RLL = 0xdf;
TMR2RLH = 0xfc;
TMR2L = 0xdf;
TMR2H = 0xfc;
//TMR2H = 0x00;
//TMR2RLH = 0x00;
}
void ADC_Init()
{
AMX0P = 0x0C;
AMX0N = 0x11;
ADC0CN = 0x82;
}
void Port_IO_Init()
{
// P0.0 - Unassigned, Open-Drain, Digital
// P0.1 - Unassigned, Open-Drain, Digital
// P0.2 - Skipped, Open-Drain, Analog
// P0.3 - Skipped, Open-Drain, Analog
// P0.4 - Unassigned, Push-Pull, Digital
// P0.5 - Unassigned, Push-Pull, Digital
// P0.6 - Unassigned, Open-Drain, Digital
// P0.7 - Unassigned, Open-Drain, Digital
// P1.0 - Unassigned, Open-Drain, Digital
// P1.1 - Unassigned, Open-Drain, Digital
// P1.2 - Unassigned, Open-Drain, Digital
// P1.3 - Unassigned, Open-Drain, Digital
// P1.4 - Unassigned, Open-Drain, Analog
// P1.5 - Unassigned, Open-Drain, Digital
// P1.6 - Unassigned, Open-Drain, Digital
// P1.7 - Unassigned, Open-Drain, Digital
P0MDIN = 0xF3;
P1MDIN = 0xEF;
P0MDOUT = 0x30;
P0SKIP = 0x0C;
XBR1 = 0x40;
}
void Oscillator_Init()
{
int i = 0;
OSCXCN = 0x65;
for (i = 0; i < 3000; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0);
CLKSEL = 0x01;
}
void Interrupts_Init()
{
IE = 0xA0;
EIE1 = 0x08;
EIP1 = 0x08;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
PCA_Init();
Timer_Init();
ADC_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
}
ADC.rar_C8051F330_C8051F330 ADC
版权申诉
154 浏览量
2022-09-24
00:26:16
上传
评论
收藏 2KB RAR 举报
JonSco
- 粉丝: 75
- 资源: 1万+
最新资源
- javaleetcode题解之第58题最后一个单词的长度.zip
- 基于Javascript和Vue的微信小程序抽奖打地鼠游戏设计源码 - 抽奖打地鼠
- 基于Python和Javascript的车展大屏演示前后端web应用设计源码 - autoshow
- 基于Javascript和微信小程序的Anna设计源码
- 基于Java的仿制品设计源码 - bilibili
- 基于Javascript的影视动画设计源码 - cad
- 基于Java和深度学习的瓦斯浓度预测系统后端设计源码 - 瓦斯浓度预测后端
- Screenshot_20240528_103010.jpg
- 基于Python的新能源承载力计算及界面设计源码 - HAINING-DG
- 基于Java的本科探索学习项目设计源码 - 本科探索
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈