一、C语言知识
1、数组
数组初始化的时候,可以不指定数组长度,但是指定数组长度后,必须保证数组的初始化长度小于等于指定长度,未初始化的元素默认值为0。
2、if语句
3、switch语句
如果不加break,则会继续执行剩下的语句。
二、中断
中断解决了多线程工作的问题,通过设置或默认中断优先级可以控制多个任务同时进行,在使用中断的过程中,一定先使能中断。
三、实例
//使用中断控制数码管
#include<reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char code LedChar[]={
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[6]={
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
unsigned char i = 0; //位选
unsigned int cnt = 0; //计算机器周期,定时
unsigned char flages = 0; //位选标志位
void shuma()
{
unsigned long sec = 0;
ENLED = 0;
ADDR3 = 1;
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x67;
TR0 = 1; //时钟使能
EA = 1; //总中断使能
ET0 = 1; //中断时钟使能
while(1)
{
if(flages == 1)
{
flages = 0;
sec++; //秒加一
LedBuff[0] = LedChar[sec%10];
LedBuff[1] = LedChar[sec/10%10];
LedBuff[2] = LedChar[sec/100%10];
LedBuff[3] = LedChar[sec/1000%10];
LedBuff[4] = LedChar[sec/10000%10];
LedBuff[5] = LedChar[sec/100000%10];
}
}
}
void main()
{
shuma();
}
void InterruptTime0() interrupt 1 //中断定义格式,定义中断1
{
TH0 = 0xFC;
TL0 = 0x67;
cnt++;
if(cnt >= 1000)
{
cnt = 0;
flages = 1;
}
P0 = 0xFF; //去鬼影
switch(i)
{
case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0];break;
case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1];break;
case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2];break;
case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3];break;
case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4];break;
case 5: ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5];break;
default:break;
}
}
总结:中断是独立与main函数运行的,当检测到标志位变化时,中断就会响应,检测中断标志位的代码有时候不写,但是系统会自行检测中断,当中断标志位变化时,中断就进行响应,main函数是不调用中断的。