用原装MEGA8板点亮1664成功,美中不足的是最底下一行总有一些灯闪动。应该是与我的程序有关,特附上程序,请各位大师指点。
#include <mega8.h>
#include <delay.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int
#define RCK0 PORTD &= ~(1<<4) //PD4
#define RCK1 PORTD |= (1<<4)
#define SCK0 PORTD &= ~(1<<2) //PD2
#define SCK1 PORTD |= (1<<2)
#define SI_Rdata0 PORTC &= ~(1<<4) //PC4
#define SI_Rdata1 PORTC |= (1<<4)
#define SI_Gdata0 PORTD &= ~(1<<5) //PD5
#define SI_Gdata1 PORTD |= (1<<5)
#define EN0 PORTD &= ~(1<<3) //PD3
#define EN1 PORTD |= (1<<3)
void SendByteR(unsigned char);
//void SendByteG(unsigned char);
unsigned char font[][16]=
{ //阳码 顺向 列行 20121229 by he
{0xFF,0xEF,0xEF,0xEF,0xE0,0xEF,0xEF,0xEF,0xE0,0xEF,0xEF,0xEF,0xDF,0xDF,0xBF,0x7F},
{0xBF,0xBF,0xBF,0xBB,0x01,0xFF,0xFF,0xFF,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF},/*"片",0*/
{0xFF,0xEF,0xEF,0xEF,0xE0,0xEF,0xEF,0xEF,0xE0,0xEF,0xEF,0xEF,0xDF,0xDF,0xBF,0x7F},
{0xBF,0xBF,0xBF,0xBB,0x01,0xFF,0xFF,0xFF,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF},/*"片",1*/
{0xFF,0x80,0xBF,0xA0,0xBE,0xBE,0xBE,0xB0,0xBE,0xBE,0xBE,0xA0,0xBF,0xBF,0x80,0xBF},
{0xFF,0x03,0xFB,0x0B,0xFB,0xFB,0xFB,0x1B,0xBB,0xDB,0xDB,0x0B,0xFB,0xFB,0x03,0xFB},/*"国",2*/
{0xFF,0xFE,0xFE,0xFE,0xFE,0x80,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xFF,0xF7,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0x01,0xFF,0xFF},/*"土",3*/
};
void main(void)
{
unsigned char i,j;
// PORTD=0B01011100; //对于开始时不操作的IO口应根据实际硬件电路确定是置为H还是L,如我只要显示红灯,就要给绿灯信号线一个
// DDRD=0B01011111; //强制上拉置1,使绿灯不显示,否则绿灯也是亮
// DDRC=0B00001111;
PORTD=0XFF;
DDRD=0XFF;
PORTC=0XFF;
DDRC=0XFF ;
while(1)
{
for(i=0;i<16;i++)
{
EN1;
RCK0;
for(j=0;j<8;j++) //4M时250us
{
SendByteR(font[j]);
}
RCK1;
delay_us(1);
EN0;
PORTC=i; //注意检查此口连接
}
}
}
void SendByteR(unsigned char dat) //传1BYTE函数 红灯
{
unsigned char i,j=dat;
for(i=0;i<8;i++)
{
SI_Gdata1;
// EN1;
if(j&0x80)
SI_Rdata1;
else
SI_Rdata0;
SCK0;
SCK1;
// EN0;
j=j<<1;
}
}
|