由于面包板面积的限制,以8个LED为例,设计花样闪烁效果。硬件
电路同上节。
1.程序设计
#include 《reg52.h》
#define uchar unsigned char
#define uint unsigned int
uchartable[ ]={0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe, 0xff, 0xff, 0x00,0x00, 0x55, 0x55, 0xaa, 0xaa};//只要不超过ROM空间可以无限添加// 0111 1111(0x7f) 1011 1111(0xbf) 1101 1111(0xdf) 1110 1111(0xef) 1111 0111(0xf7)// 1111 1011(0xfb) 1111 1101(0xfd) 1111 1110(0xfe) 1111 1111(0xff) 1111 1111(0xff)// 0000 0000(0x00) 0000 0000(0x00) 0101 0101(0x55) 0101 0101(0x55) 1010 1010(0xaa)
void delay(uint a)//简易延时
{
while(a--);
}
void main()
{
uchar i;
while(1)
{
for(i=0;i《16;i++)//查表简单显示各种花样
{
delay(40000);
P1=table[i];
}
}
}
2.程序解释
通过for循环语句不断地从数组中取出数值,赋值给P1。for语句执行第一次循环的时候,“i=0;”,即“P1=table[0];”,对应数组是0x7f,换算为二级制是0111 1111,只有P1.7接口的LED点亮,其他熄灭。不断循环,直到i《16不成立而退出循环体。
3.C语言基础知识
数组
数组,就是一组数据的集合,数组分为一维数组,二维数组,三位数组和多维数组。
一维数组格式:
数据类型说明数组名[数量]={数值1,数值2};
[数量]一般不填,编译器自动计算
举例 unsigned char table[ ]={0xfe,0xfd,0xfb};
table是数字名0xfe,0xfd,0xfb是数值
使用数组注意事项:
①大括号内数值之间用逗号。
②语句结束加上分号。
③table后面中括号里的数字是从0开始的,对应后面大括号里的第1个元素。
以程序3.8.1为例
P1=table[0];
相当于P1=0x7f;
4.查表法驱动LED
for(i=0;i《16;i++)//查表可以简单的显示各种花样
{
delay(40000);
P1=table[i];
}