①了解数码管的硬件原理 共阴 共阳
②了解HC595芯片的功能,用三个引脚控制多个引脚节省IO口
③用扫描刷新的思想控制数码管
④时间函数的写法
void TIMECOUNT_Task(void)
{
miao ++;
if( miao>59 )
{
miao = 0;
fen++;
if( fen>59 )
{
fen = 0;
shi ++;
if( shi>23 )
shi = 0;
}
}
}
void Seg_Task(void)
{
u8 num = 0;
if( Seg_no ==0 ) //小时十位
{
num = shi/10;
Display_Seg( SEG_NUM , ~T_NUM); //数码管刷段码和位码
}
else if( Seg_no ==1 ) //小时的个位
{
num = shi%10;
Display_Seg( SEG_NUM , ~T_NUM); //数码管刷段码和位码
}
else if( Seg_no ==2 ) //第一个横杠
{
Display_Seg( SEG_NUM , ~T_NUM); //数码管刷段码和位码
}
else if( Seg_no ==3 ) //分钟的十位
{
num = fen/10;
Display_Seg( SEG_NUM , ~T_NUM); //数码管刷段码和位码
}
else if( Seg_no ==4 )
{
num = fen%10;
Display_Seg( SEG_NUM , ~T_NUM); //数码管刷段码和位码
}
else if( Seg_no ==5 )
{
Display_Seg( SEG_NUM , ~T_NUM); //数码管刷段码和位码
}
else if( Seg_no ==6 )
{
num = miao/10;
Display_Seg( SEG_NUM , ~T_NUM); //数码管刷段码和位码
}
else if( Seg_no ==7 )
{
num = miao%10;
Display_Seg( SEG_NUM , ~T_NUM); //数码管刷段码和位码
}
else
{
}
Seg_no ++;
if( Seg_no>7 )
Seg_no=0;
}
第十节
DIP40协议
1~4字节 命令头
5字节 有效长度
6字节 屏蔽为 需要转化为2进制 如0000 0001 只开启了 P00端口
7字节 端口的状态 十一节 按键
了解矩阵按键原理 (优点 有限的端口控制更多的按键 缺点检测比单引脚口按键满)
控制算法(先判断x 在判断y)组合一下(定一下键值 根据键值知道是哪一个按钮) 第十二节 复位系统
上电复位 低压复位 复位脚复位(低电平复位)看门狗复位
看门狗复位,在系统运行以后,就启动了看门狗计数器,看门狗开始自动计数,如果到了一定的时间还不去清理看门狗(喂狗)看门狗计数器就会溢出,从而引起看门狗中断,造成系统复位。所以,在使用有看门狗的芯片的时候要注意清理看门狗
***********看门狗函数********
void Delay10ms(void) //@24.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
_nop_();
i = 59998UL;
while (i) i--;
}
void USB_Reset_U(void)
{
P3M0 = 0x00;
P3M1 = 0x00;
P3M0 &= ~0x03;
P3M1 |= 0x03;
USBCON = 0X00;
USBCLK = 0X00;
IRC48MCR = 0X00;
Delay10ms();
}
********调用初始化*********
USB_Reset_U();
*********开启看门狗*********
WDT_CONTR = 0X24;
*************喂狗******
WDT_CONTR = 0X34;、
************开启下载程序******
void KEY_Task(void)
{
if( P33 == 0 )
{
Key_Vol++;
if( Key_Vol==5 )
{
//按键按下的任务
// printf( "按键单击\r\n" );
USB_Reset_U();
IAP_CONTR = 0X60;
}
}
else
{
Key_Vol = 0;
}
}
***************按一下复位**********
void KEY_Task(void)
{
if( P33 == 0 )
{
Key_Vol++;
if( Key_Vol==5 )
{
//按键按下的任务
// printf( "按键单击\r\n" );
USB_Reset_U();
IAP_CONTR = 0X20;
}
}
else
{
Key_Vol = 0;
}
} 第十三十四节 中断和IO口中断
中断介绍(CPU总是先执行中断,并且级别高的中断可以打断级别低的中断)
引脚带INTx可以作为外部中断(上升沿下降沿 或者都支持 )
********初始化*********
void INT1_Init(void) //INT1_Init 引脚口已经定了
{
IT1 = 1;//下降沿中断
EX1 = 1 ;//允许打开中断
EA = 1 ; //打开总中断
}
********中断函数*********
ISR(void) interrupt 2
{
P01 = !P01;
}//为什么中断不是一一对应的?(后面 interrupt 2就代表了那一些列中断引脚)
void P3_IO_Init(void)
{
P3IM0 = 0X00; //IO中断模式设置为了下降沿
P3IM1 = 0Xff;
P3INTE= 0X08; //打开中断 打开P3的某一个引脚
}
void P3_IO_ISR(void) interrupt 40 //整个P3中断都进这个,在往下判断具体哪一个
{
u8 intf;
intf = P3INTF;
if( intf ) //判断也没有IO触发了中断
{
P3INTF = 0;
if( intf & 0x08 )//判断是否是P33按钮按下判断具体是这一个
{
passward = 1;
//P01 = !P01;
}
}
} 第十五节 定时器做计数器
通过配置,把定时器改为计数器 没是个脉冲进一次中断函数,中断函数++实现计数
页:
1
[2]