|
楼主 |
发表于 2007-10-9 19:05:41
|
显示全部楼层
第4个实验:例6.7 8*8点阵LED显示控制设计 的补充
个人水平太烂,今天花了一天的时间,初步解决了马老师提出的每一列的亮度的问题。
虽然运行实现了,但感觉有些别扭。
以下是源代码:
/*********************************************
writer:
file name : jintian_liangdu.c
Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
功能:实现“今天”右移。
此程序解决了jintian.c中LED有些列亮,有些列暗的问题,
线路连接如下:
JE1 - 8 PA0 (M16)
JE1 - 7 PA1 (M16)
JE1 - 6 PA2 (M16)
JE1 - 5 PA3 (M16)
JE1 - 4 PA4 (M16)
JE1 - 3 PA5 (M16)
JE1 - 2 PA6 (M16)
JE1 - 1 PA7 (M16)
JE2 - 1 PC0 (M16)
JE2 - 2 PC1 (M16)
JE2 - 3 PC2 (M16)
JE2 - 4 PC3 (M16)
JE2 - 5 PC4 (M16)
JE2 - 6 PC5 (M16)
JE2 - 7 PC6 (M16)
JE2 - 8 PC7 (M16)
*********************************************/
#include <mega16.h>
#include <delay.h>
/* 码值表 0x10,0x18,0x34,0x4b,0xbc,0x08,0x08,0x10, //今
0x00,0x3e,0x08,0x7f,0x08,0x14,0x22,0x41 //天*/
flash int rowcode[]= {0x0010,0x3e18,0x0834,0x7f4b,0x08bc,0x1408,0x2208,0x4110};
void display(char col)
{
char i;
for (i=0;i<=7;i++)
{
PORTA = rowcode>>col;
PORTC = ~(1<<i); //行扫描
delay_ms(2);
PORTC = 0xFF;
}
PORTC = 0xFF;
}
void main(void)
{
char time_counter,i = 0;
PORTA=0x00;
DDRA=0xFF;
PORTC=0x00;
DDRC=0xff;
while (1)
{
display(i);
delay_ms(9);
if (++time_counter >= 4)
{
time_counter = 0;
if(++i >= 16) i=0;
}
};
} |
|