本文最后更新于96 天前,如有错误请联系本人VX: g1489269494
通过本程序设计,对IIC时序有了更深刻的理解
#include <STC15F2K60S2.H>
#include "INit.h"
#include "LED.h"
#include "smg.h"
#include "Key.h"
#include "iic.h"
unsigned char key_slow_down;
unsigned char key_old,key_val,key_down,key_up;
unsigned int smg_slow_down;
unsigned char smg_pos;
unsigned char smg_buf[8] = {11,11,11,11,11,11,11,11};
unsigned char smg_point[8] = {0,0,0,0,0,0,0,0};
unsigned char led_buf[8] = {0,0,0,0,0,0,0,0};
float Voltage,Voltage_output;
bit smg_mode;
bit smg_flag = 1;
bit output_mode;
void Key_Function()
{
if(key_slow_down)return;
key_slow_down = 1;
key_val = Key_Get();
key_down = key_val & (key_val ^ key_old);
key_up = ~key_val & (key_val ^ key_old);
key_old = key_val;
if(key_down==4){
smg_mode ^=1;
}
if(smg_mode==1){
if(key_down==5)output_mode ^=1;
}
if(key_down==7){
smg_flag ^=1;
}
}
void smg_Function()
{
if(smg_slow_down)return;
smg_slow_down = 1;
Voltage = Ad_Read(0x43)/51.0;
if(smg_mode ==0)
{
smg_buf[0]= 12;
smg_buf[5]= (unsigned int)(Voltage *100) /100 %10;
smg_buf[6]= (unsigned int)(Voltage *100) /10 %10;
smg_buf[7]= (unsigned int)(Voltage *100) %10;
smg_point[5] = 1;
}
else
{
if(output_mode==0){
Voltage_output=2.0;
}
else{
Voltage_output = Voltage;
}
smg_buf[0]= 13;
smg_buf[5]= (unsigned int)(Voltage_output *100) /100 %10;
smg_buf[6]= (unsigned int)(Voltage_output *100) /10 %10;
smg_buf[7]= (unsigned int)(Voltage_output *100) %10;
smg_point[5] = 1;
}
}
void LED_Function()
{
//Da_Write(Voltage_output*51);
unsigned char i=0;
for(i=0;i<2;i++)
{
led_buf[i] = (i == smg_mode);
}
if(Voltage<1.5 || Voltage>=2.5 && Voltage<3.5){
led_buf[2] = 0;
}
else{
led_buf[2] = 1;
}
led_buf[3] = output_mode;
}
void Timer0_Init(void) //1毫秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
EA=1;
}
void Timer0_Function() interrupt 1
{
if(++key_slow_down==25)key_slow_down=0;
if(++smg_slow_down==50)smg_slow_down=0;
if(++smg_pos==8)smg_pos = 0;
if(smg_flag==1){
Smg_Set(smg_pos,smg_buf[smg_pos],smg_point[smg_pos]);
}
else{
Smg_Set(smg_pos,11,0);
}
LED_Set(smg_pos,led_buf[smg_pos]);
}
void main()
{
System_Init();
Timer0_Init();
while(1)
{
Key_Function();
smg_Function();
LED_Function();
}
}