|
#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]; //顯示緩沖區(qū)1
volatile uint8 data display_buffer2[16]; //顯示緩沖區(qū)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){//按照當前占空比鐵環(huán)輸出為高電平
out1=1;
}
if(scale2==tt2){//按照當前占空比鐵環(huán)輸出為高電平
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; //優(yōu)先級設置 PolityHigh,PolityLow
ADC_InitStructure.ADC_Interrupt = DISABLE; //中斷允許 ENABLE,DISABLE
ADC_Inilize(&ADC_InitStructure); //初始化
ADC_PowerControl(ENABLE); //單獨的ADC電源操作函數(shù), 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;
}
/**************************************************************
更新顯示緩沖區(qū)
***************************************************************/
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;
}
/******************************************************************
顯示緩沖區(qū)內容
*******************************************************************/
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的值一直保持不變,按鍵是正常的,程序可以通過編譯了
|
|