📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
**
** http://www.zlgmcu.com
**
** 文 件 名: main.c
** 最后修改日期: 2004年11月15日
** 描 述: 用户应用程序
** 版 本: V5.0
**********************************************************************************************************/
#include "stc51.h"
//#include <reg52.h>
#include "D12Config.h"
#include "Descriptor.h"
#include "Chap_9.h"
#include "D12Driver.h"
#include <intrins.h>
//定义按键及LED引脚
sbit MCU_SWM0 = P2^0; //按键
sbit MCU_SWM1 = P2^1;
sbit MCU_KO1 = P1^0; //按键
sbit MCU_KO2 = P1^1;
sbit MCU_LED0 = P1^2; //LED
sbit MCU_LED1 = P1^3;
sbit RST_CS5466 = P1^4;
sbit Mcubz = P2^4;
unsigned char Time_S;
unsigned char Time_M;
unsigned char Time_x;
void check_key_LED(void);
void delay_ak(unsigned char times);
void InitTimer(void);
void Inc_time();
void InitCPUIO(void);
//////////////////////////////////////////////////////////////////
main()
{
unsigned char ktso[16]={0,0,0,0,0,0,0,0,0,0,0,0};
INT32U cnt;
InitCPUIO();
AUXR=0x02;
InitTimer();
//复位后LED亮
for(cnt = 0; cnt <= 0x5000; cnt++) //延时
{
MCU_LED0 = 0; //D2和D3点亮
MCU_LED1 = 0;
}
MCU_LED0 = 1; //D2和D3灭
MCU_LED1 = 1;
if (Init_D12()!=0) //初始化D12
return; //如果初始化不成功,返回
EX0 = 1; //开外部中断0
PX0 = 0; //设置外部中断0中断优先级
EA = 1; //开80C51总中断
while(1)
{
usbserve(); //处理USB事件
if(bEPPflags.bits.configuration)
{
check_key_LED(); //连接正常,调用按键和LED控制处理
}
if(Time_M>2)
{
ktso[2]=TL1;
ktso[3]=220;
ktso[4]=0;
ktso[5]=0;
Time_M=0;
Time_S=0;
TH1=0;
TL1=0;
D12_WriteEndpoint(3, 16, ktso);
}
}
}
/******* 下面为与D12 Smart板相关的操作 *************/
/*******************************************************************
** 函数名称: check_key_LED()
** 功能描述: 检测D12 Smart板上的按键以及控制LED
** 输 入: 无
** 输 出: 无
********************************************************************/
void check_key_LED(void)
{
static unsigned char c, last_key = 0xf;
unsigned char kts[16]={1,3,5,7,9,2,4,6,8,10,0x0a,0x0b,0x0c,0x0d,15};
unsigned char k;
c = MCU_SWM0 & MCU_SWM1; //读取两个按键状态
c &= 0x0f;
kts[15]=c;
if (c != last_key) {
D12_WriteEndpoint(3, 16, kts); //按键状态改变,发送信息给主机
}
last_key = c; //保留按键状态
if(bEPPflags.bits.ep1_rxdone) {
DISABLE(); //接收到主机发来的LED控制信息
bEPPflags.bits.ep1_rxdone = 0;
ENABLE();
if(GenEpBuf[3]==1){
MCU_LED0 = !(GenEpBuf[4] & 0x1); //控制LED状态
MCU_KO1= !MCU_LED0;
MCU_LED1 = !(GenEpBuf[4] & 0x2);
MCU_KO2 = !MCU_LED1;
//delay_ak(2);
}
else if(GenEpBuf[3]==2){
for(k=0;k<GenEpBuf[4];k++){
Mcubz=1;
delay_ak(2);
Mcubz=0;
delay_ak(2);
}
}
}
}
/////////////////////////////////////////////////////////////////////
void delay_ak(unsigned char times)
{
unsigned int ktime1,ktime2;
while(times--!=0){
for(ktime1=0;ktime1<200;ktime1++)
for(ktime2=0;ktime2<100;ktime2++);
}
}
////////////////////////////////////////////////////////////////////
void InitCPUIO(void)
{
MCU_KO1=0;
MCU_KO2=0;
Mcubz=0;
MCU_LED0 = 1;
MCU_LED1 = 1;
RST_CS5466=0;
delay_ak(1);
RST_CS5466=1;
}
///////////////////////////////////////////////////////////////////
void InitTimer(void)
{
TMOD=0x51;
TR0=1;
TR1=1;
ET0=1;
EA=1;
TH1=0x00;
TL1=0x00;
TH0=0x20;
TL0=0x00;
Time_S=0;
Time_M=0;
}
///////////////////////////////////////////////////////////////
//功能:模拟时钟变化,
//Time_S为秒,Time_M为分
//------------------------------------------------------------------------------------
void Inc_time()
{
Time_S++;
if(Time_S>10)
{
Time_S=0;
Time_M++;
if(Time_M>59)
{
Time_M=0;
Time_x++;
if(Time_x>23) Time_x=0;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////
void timer1_isr(void) interrupt 1 using 3
{ TF0=0;
TH0=0x20;
TL0=0x00;
Inc_time();
TR0=1;
}
////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -