电子秤课程设计实验报告(3)

2019-05-17 10:58

GPIO_Init(GPIOA, &GPIO_InitStructure);

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE; //连续多通道模式 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换不

受外界决定

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1; //扫描通道数 ADC_Init(ADC1, &ADC_InitStructure);

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_71Cycles5);

//通道X,采样时间为1.5周期,1代表规则通道第1个这个1是啥意思我不太清楚只有是1的时候我的ADC才正常。

ADC_Cmd(ADC1, ENABLE); //使能或者失能指定的ADC ADC_ResetCalibration(ADC1); //重置ADC1校准寄存器

while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成 ADC_StartCalibration(ADC1);//开始ADC1校准

while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成

ADC_SoftwareStartConvCmd(ADC1 ,ENABLE);//使能或者失能指定的ADC的软件转换

启动功能

void ADC_Read(void) {

static u16 i; float he = 0; u16 j; mass = 0;

for(i=0;i<1000;i++){

while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); //检查制定ADC标志

位置1与否 ADC_FLAG_EOC 转换结束标志位

mass_get = ((float)ADC_GetConversionValue(ADC1)) / 4096 * 3.3;

adc_get[i] = mass_get ;

}

for(j=0;j<1000;j++){

he = he+adc_get[j]; }

void insertsort(float x[],int n){ int i , j; }

Keyboard.c部分程序如下: void update_key(void) {

unsigned char i, j;

for(i = 0; i < 4; i++) //i????,??????

{ GPIO_ResetBits(key_output[i].GPIO_x, key_output[i].GPIO_pin);

float a;

for (i=0;i

j=i;

while (a < x[j]){ x[j+1] = x[j]; } x[j+1] = a; }

j--;

}

mass_get = he/1000;

mass_get = mass_get - mass00; adc = mass_get - mass0;

mass = (0.7835*adc*adc*adc - 1.3802*adc*adc +1010.3*adc )/1000;

for(j = 0; j < 4; j++) //j????,????????????? {

if(GPIO_ReadInputDataBit(key_input[j].GPIO_x,

key_input[j].GPIO_pin) == 0) {

u16 t = 40000;

while (t--);

if (GPIO_ReadInputDataBit(key_input[j].GPIO_x, key_input[j].GPIO_pin)

== 0) {

key[i][j] = 1;

key_down(i,j);

//printf(\ //printf(\ //keypoint = 0 ;

//delay_ms(300);

}

} }

else { key[i][j] = 0; } }

GPIO_SetBits(key_output[i].GPIO_x, key_output[i].GPIO_pin); }

Oled.c中部分程序如下: void show_mass(void){

switch(oled_point){

case 1 : //正常显示重量

show_string_and_mass();

break;

case 0 : //显示系统内存已有单价,可以进行价格选择

OLED_ShowCHinese(0,0,14); OLED_ShowCHinese(16,0,15);

OLED_ShowNum(28,3,danjia[0],1,1); OLED_ShowNum(36,3,danjia[1],1,1); OLED_ShowNum(44,3,danjia[2],1,1); OLED_ShowNum(52,3,danjia[3],1,1); break;

case 2 : //键入单价界面 break;

case 3 : //计价界面

jiage = mass * (danjia[0]*10 + danjia[1] + danjia[2]*0.1 + danjia[3]*0.01); get_char(price,jiage);

OLED_ShowNum(20,3,price[4],1,1); OLED_ShowNum(28,3,price[3],1,1); OLED_ShowNum(36,3,price[2],1,1); OLED_ShowNum(44,3,price[1],1,1);

} }

OLED_ShowNum(52,3,price[0],1,1);

OLED_ShowCHinese(60,3,16);//??

void show_m_by_number(void) { get_char(fanhaoyang,mass); }

void get_char(u8 get[],float from){ u16 i = (u16)(from*1000); get[4] =(u8)(i/10000);

get[3] =(u8)((i - get[4]*10000)/1000);

get[2] =(u8)((i - get[4]*10000 - get[3]*1000) / 100);

get[1] =(u8)((i - get[4]*10000 - get[3]*1000 - get[2]*100)/10); get[0] =(u8)(i - get[4]*10000 - get[3]*1000 - get[2]*100 - get[1]*10); get[5] = '\\0'; }

OLED_ShowNum(20,3,fanhaoyang[4],1,1); OLED_ShowNum(28,3,fanhaoyang[3],1,1); OLED_ShowNum(36,3,fanhaoyang[2],1,1); OLED_ShowNum(44,3,fanhaoyang[1],1,1); OLED_ShowNum(52,3,fanhaoyang[0],1,1);


电子秤课程设计实验报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:水利水电实务工程建设强制性标准

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: