|
#include "config.h"
#include "adc.h"
#include "delay.h"
//#include "soft_uart.h"
#include "pcf8574lcd.h"
unsigned int scale1;//占空比控制变量
unsigned int scale2;//占空比控制变量
sbit out1=P3^6;
sbit out2=P3^7;
sbit key1=P3^5;
sbit key2=P3^4;
sbit key3=P3^3;
sbit key4=P3^2;
unsigned int kf1=1;//按键用的标志位
unsigned int kt1=0;//按键用的标志位
unsigned int kf2=1;//按键用的标志位
unsigned int kt2=0;//按键用的标志位
unsigned int num1=50;
unsigned int num2=25;
unsigned int ADC1;//上
unsigned int ADC2;//下
unsigned int ADC3;//左
unsigned int ADC4;//右
unsigned int ADC5;//电压
volatile uint8 data display_buffer1[16]; //显示缓冲区1
volatile uint8 data display_buffer2[16]; //显示缓冲区2
void timer0() interrupt 1{//定时器0 0中断服务程序
static unsigned int tt1,tt2;//tt用来保存当前时间在一秒中的比例位置
tt1++;
tt2++;
//每10微妙增加1
if(tt1==150){//2.5毫秒的时钟周期
tt1=0;//使tt=0,开始新的PWM周期
out1=0;
}
if(tt2==150){//2.5毫秒的时钟周期
tt2=0;//使tt=0,开始新的PWM周期
out2=0;
}
if(scale1==tt1){//按照当前占空比铁环输出为高电平
out1=1;
}
if(scale2==tt2){//按照当前占空比铁环输出为高电平
out2=1;
}
}
void ADC_config(void)
{
ADC_InitTypeDef ADC_InitStructure; //结构定义
ADC_InitStructure.ADC_Px = ADC_P10 | ADC_P11 | ADC_P12 | ADC_P13 | ADC_P14 ; //设置要做ADC的IO, ADC_P10 ~ ADC_P17(或操作),ADC_P1_All
ADC_InitStructure.ADC_Speed = ADC_540T; //ADC速度 ADC_90T,ADC_180T,ADC_360T,ADC_540T
ADC_InitStructure.ADC_Power = ENABLE; //ADC功率允许/关闭 ENABLE,DISABLE
ADC_InitStructure.ADC_AdjResult = ADC_RES_H8L2; //ADC结果调整, ADC_RES_H2L8,ADC_RES_H8L2
ADC_InitStructure.ADC_Polity = PolityLow; //优先级设置 PolityHigh,PolityLow
ADC_InitStructure.ADC_Interrupt = DISABLE; //中断允许 ENABLE,DISABLE
ADC_Inilize(&ADC_InitStructure); //初始化
ADC_PowerControl(ENABLE); //单独的ADC电源操作函数, ENABLE或DISABLE
}
void ADC_zhuanhuan(void)
{
u8 a,b,c,d;
ADC1=Get_ADC10bitResult(0);//上下左右 电压
ADC2=Get_ADC10bitResult(1);
ADC3=Get_ADC10bitResult(2);
ADC4=Get_ADC10bitResult(3);
ADC5=Get_ADC10bitResult(4);
a=ADC1/11;
b=ADC2/11;
c=ADC3/11;
d=ADC4/11;
}
/**************************************************************
更新显示缓冲区
***************************************************************/
void updata_buffer(void)
{
//显示日期
u8 a,b,c,d;
display_buffer1[0] = 'S';
display_buffer1[1] = ':';
display_buffer1[2] = a/10+0x30; //年
display_buffer1[3] = a%10+0x30;
display_buffer1[4] = ' ';
display_buffer1[5] = 'X';
display_buffer1[6] = ':';
display_buffer1[7] = b/10+0x30; //年
display_buffer1[8] = b%10+0x30;
display_buffer1[9] = ' ';
display_buffer1[10] = ' ';
display_buffer1[11] = ' ';
display_buffer1[12] = ' ';
display_buffer1[13] = ' ';
display_buffer1[14] = num1/10+0x30;
display_buffer1[15] = num1%10+0x30;
display_buffer2[0] = 'Z';
display_buffer2[1] = ':';
display_buffer2[2] = c/10+0x30; //年
display_buffer2[3] = c%10+0x30;
display_buffer2[4] = ' ';
display_buffer2[5] = 'Y';
display_buffer2[6] = ':';
display_buffer2[7] = d/10+0x30; //年
display_buffer2[8] = d%10+0x30;
display_buffer2[9] = ' ';
display_buffer2[10] = ' ';
display_buffer2[11] = ' ';
display_buffer2[12] = ' ';
display_buffer2[13] = ' ';
display_buffer2[14] = num2/10+0x30;
display_buffer2[15] = num2%10+0x30;
}
/******************************************************************
显示缓冲区内容
*******************************************************************/
void display_buffer(void)
{
uint8 i ;
send_command(0x80) ; //显示第一行
for(i=0;i<16;i++)
send_data(display_buffer1[i]);
send_command(0xc0) ; //显示第二行
for(i=0;i<16;i++)
send_data(display_buffer2[i]);
}
/*****************************************************/
/**********************************************/
void main(void)
{
u8 a,b,c,d;
TMOD=0x02;//定时器0,工作模式2(0000,0010),8位定时模式
TL0 = 0xec; //设置定时初值 20微妙
TH0 = 0xec; //设置定时重载值
TR0=1;//启动定时器
ET0=1;//允许定时器0中断
EA=1;//允许总中断
lcd_open();
init_lcd() ;
while (1)
{
updata_buffer();
display_buffer();
ADC_zhuanhuan();
/**********************************************/
if(a-b>=10){
num1++;
if(num1>99)
{
num1=99;
}
}
/**********************************************/
/**********************************************/
if(b-a>=10){
num1--;
if(num1<50)
{
num1=50;
}
}
/**********************************************/
/**********************************************/
if(c-d>=10){
num2++;
if(num2>99)
{
num2=99;
}
}
/**********************************************/
/**********************************************/
if(d-c>=10){
num2--;
if(num2<25)
{
num2=25;
}
}
/**********************************************/
if(key1==0){
num1=50;
scale1=25;
}
if(key2==0){//当按键1按下
if(kf1){//当标志位kf0=1的时候进行
kf1=0;//标志位kf0=0
kt1=1;//标志位kt0=0
num1++;
}
}else{//当按键松开
if(kt1){//当标志位kt0=1的时候进行
kf1=1;//标志位kf0=1
kt1=0;//标志位kt0=0
}
}//按键1结束
if(key3==0){//当按键1按下
if(kf2){//当标志位kf0=1的时候进行
kf2=0;//标志位kf0=0
kt2=1;//标志位kt0=0
num1--;
}
}else{//当按键松开
if(kt2){//当标志位kt0=1的时候进行
kf2=1;//标志位kf0=1
kt2=0;//标志位kt0=0
}
}//按键1结束
if(key4==0){
num1=99;
}
scale1=num1+25;
scale2=num2+25;
// ADC_soft_uart();
}
}
大神们过年好,程序是这样的,无法通过作比较使得程序中的角度进行加减,num1和num2的值一直保持不变,按键是正常的,程序可以通过编译了
|
|