📄 led._c
字号:
#include"main.h"
/*=============定时器0中断函数==============*/
#pragma interrupt_handler timet0_ovf:10
void timet0_ovf(void)
{
static unsigned int
BEEP1_CONT=110,
BEEP2_CONT=190,
M05_CONT=800;
SREG =0X80; //重新开放中断
TCNT0=0XEE; //重装1.25MS的定时初值
DDRB|=BIT(PB0);
PORTB|=BIT(PB0);
M05_CONT--;
if(M05_CONT==0)
{
M05_CONT=800;
if(MBZ==0) { MBZ=1; }
else { MBZ=0; }
}
if(a.BEEP1==1)
{
BUZZ_NO;
if((BEEP1_CONT--)==1)
{
BEEP1_CONT=110;
BUZZ_YE;
a.BEEP1=0;
}
}
/*==========响铃2次函数设置============*/
if(a.BEEP2==1) //响铃2次
{
--BEEP2_CONT;
if(BEEP2_CONT>113)
{
BUZZ_NO;
}else
if(BEEP2_CONT>75)
{
BUZZ_YE;
}else
if(BEEP2_CONT>0)
{
BUZZ_NO;
}else
if(BEEP2_CONT==0)
{
BUZZ_YE;
a.BEEP2=0;
BEEP2_CONT=190;
}
}
/*==========响铃2次函数结束============*/
}
/*========HT1622驱动程序========*/
/*
void write_clk() //允许写脉冲
{
_NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP();
HT_WR_ONE;
_NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP();
HT_WR_ZER;
}
void send_bit(unsigned char op_code,unsigned char len)
//从高位的位开始送
{
while(len--)
{
if(op_code&0x80==0x80)
{
HT_DT_ONE;
}
else
{
HT_DT_ZER;
}
write_clk();
op_code = op_code<<1;
}
}
void send_command(unsigned char command) //送一个命令
{
HT_CS_ZER;
send_bit(0x80,3);
send_bit(command,8);
write_clk();
HT_CS_ONE;
}
void send_all_char() //开始送数据,一次全部送完
{
unsigned char x,y;
unsigned char c;
HT_CS_ZER;
send_bit(0xa0,3);
_NOP();
send_bit(0,6); //从第0个地址开始送数据
for(x=0;x!=23;x++)
{
c=LCD[x];
for(y=0;y!=8;y++)
{
if(c&0x01==1)
{
HT_DT_ONE;
}
else
{
HT_DT_ZER;
}
write_clk();
c=c>>1;
}
}
HT_CS_ONE;
}
void init_1622() //LCD初始化
{
HT_CS_ONE;
HT_WR_ONE;
HT_DT_ONE;
send_command(1); //SYS EN
send_command(3); //LCD ON
send_command(0x29); // 1/3 偏压,4个公共端
}
*/
/*===============主函数部分===================*/
void main(void)
{
unsigned int i;
unsigned char x;
/*===============初始化函数============*/
// init_1622();
/*
======================================
采用定时器管理
定时器0预分频系数为1024,定时时间为1.25MS
初值为=256-1.25*14.7456*1000000/1024/1000=238
首先要开启定时器0,
=========================================
*/
for(x=0;x<23;x++) LCD[x]=0XFF;
TCCR0=0X05; //预分频系数为1024 0000 0101
TCNT0=0XEE; //238
TIMSK|=0X01; //使能T/C0中断,允许中断
DDRD&=0XF3; //PIND2 PIND3设为输入
MCUCR=0X08; //00001000下降沿触发中断、GICR
//ISC11,ISC10 INT1下降沿
/*========PB2输出PWM信号WGM[3;0]=1011
========加一计数中比较匹配时清零OC1B
========减一计数中比较匹配时置位
========CS12,CS11,CS10=010,表示8预分频计时器
*/
DDRB|=0X3e;//PB2为输出端,(pb3,pb4,pb5为液晶驱动脚设为输出)
TCCR1A=0X63; //0110 0011
TCCR1B=0X12; //0001 0010
OCR1A=0x61A7; //设置TOP值为1249
OCR1B=2500; //比较匹配值
SREG =0X80; //使能总中断
MBZ=0;
while(1)
{
// send_all_char();
DDRD|=BIT(PD7); //PD7设为输出
DDRD|=BIT(PD6);
if(MBZ==0)
{
LED_LIANG; //PD7为1,点亮LED指示灯
}
if(MBZ==1)
{
LED_MIE;
a.BEEP1=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -