游客
主题
帖子
积分31
阅读权限1
注册时间2012-2-23
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2012-2-23 22:10
|
显示全部楼层
在ourdev搜索到r的一个GCC程序:
#include <avr/io.h>
#include <stdio.h>
#include <avr/pgmspace.h>
#include<util/delay.h>
#define uint unsigned int
#define uchar unsigned char
#define NOP _nop_()
#define screen_size 4
#define hanzi_size_S 25
uchar disrow;
int col=0 ;
uchar word=0,zishu=0;
uchar BUFF[10];
#define OE1 PORTD|=(1<<7) //显示允许控制信号端口,为低电平可以显示
#define DR1 PORTB|=(1<<1) //串行数据输入R
#define ST1 PORTC|=(1<<0) //输出锁存器控制脉冲
#define SK1 PORTC|=(1<<1) //移位时钟脉冲
#define OE0 PORTD&=~(1<<7) //显示允许控制信号端口,为低电平可以显示
#define DR0 PORTB&=~(1<<1) //串行数据输入R
#define ST0 PORTC&=~(1<<0) //输出锁存器控制脉冲
#define SK0 PORTC&=~(1<<1) //移位时钟脉冲
unsigned char const HZ[ ]=
{
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 床 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x00,0x00,0x80,0x3F,0xFE,0x20,0x80,0x20,0x80,0x20,0x80,0x3F,0xFC,0x21,0x80,
0x21,0xC0,0x22,0xA0,0x22,0x90,0x24,0x88,0x24,0x86,0x48,0x84,0x50,0x80,0x80,0x80,
/*-- 文字: 前 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x10,0x06,0x18,0x04,0x20,0xFF,0xFE,0x00,0x00,0x3E,0x08,0x22,0x48,0x3E,0x48,
0x22,0x48,0x22,0x48,0x3E,0x48,0x22,0x48,0x22,0x48,0x2A,0x08,0x24,0x28,0x00,0x10,
/*-- 文字: 明 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFC,0x7C,0x84,0x44,0x84,0x44,0x84,0x44,0xFC,0x7C,0x84,0x44,0x84,0x44,0x84,
0x44,0xFC,0x7C,0x84,0x00,0x84,0x01,0x04,0x01,0x04,0x02,0x04,0x04,0x14,0x00,0x08,
/*-- 文字: 月 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,
0x07,0xF0,0x04,0x10,0x08,0x10,0x08,0x10,0x10,0x10,0x20,0x50,0x40,0x20,0x00,0x00,
/*-- 文字: 光 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x00,0x21,0x10,0x19,0x18,0x0D,0x10,0x09,0x20,0x01,0x04,0x7F,0xFE,0x04,0x40,
0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x42,0x08,0x42,0x10,0x42,0x20,0x3E,0x40,0x00,
/*-- 文字: 疑 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x00,0x2D,0xFC,0x30,0x08,0x22,0x50,0x22,0x20,0x1D,0xFE,0x40,0x22,0x7E,0x24,
0x48,0xA0,0x88,0xBC,0xFE,0xA0,0x18,0xA0,0x15,0x60,0x21,0x30,0x42,0x0E,0x84,0x04,
/*-- 文字: 是 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x0F,0xF0,0x08,0x10,0x0F,0xF0,0x08,0x10,0x0F,0xF0,0x00,0x00,0xFF,0xFE,
0x01,0x00,0x09,0x00,0x09,0xF8,0x09,0x00,0x15,0x00,0x23,0x00,0x40,0xFE,0x00,0x00,
/*-- 文字: 地 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x11,0x20,0x11,0x20,0x11,0x24,0xFD,0x3E,0x11,0xE4,0x17,0x24,0x11,0x24,
0x11,0x24,0x11,0x34,0x11,0x28,0x1D,0x20,0x31,0x02,0xC1,0x02,0x00,0xFE,0x00,0x00,
/*-- 文字: 上 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0x7F,0xFE,0x00,0x00,
/*-- 文字: 霜 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x1F,0xF8,0x01,0x00,0x7F,0xFE,0x41,0x04,0x1D,0x70,0x01,0x00,0x1D,0x70,0x08,0x00,
0x08,0xF8,0x7E,0x88,0x1C,0xF8,0x2A,0x88,0x28,0xF8,0x48,0x88,0x08,0xF8,0x08,0x88,
/*-- 文字: 。 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x48,0x00,0x30,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 举 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x24,0x10,0x12,0x18,0x09,0x10,0x09,0x20,0xFF,0xFE,0x04,0x40,0x09,0x20,0x11,0x10,
0x2F,0xE8,0x41,0x06,0x81,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
/*-- 文字: 头 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x10,0x80,0x0C,0x80,0x04,0x80,0x10,0x80,0x0C,0x80,0x08,0x80,0x00,0x80,
0xFF,0xFE,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x30,0x08,0x18,0x10,0x0C,0x20,0x08,
/*-- 文字: 望 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x00,0x08,0xFC,0xFE,0x84,0x20,0xFC,0x20,0x84,0x24,0xFC,0x28,0x84,0x31,0x1C,
0x00,0x00,0x3F,0xFC,0x01,0x00,0x1F,0xF8,0x01,0x00,0x01,0x00,0x7F,0xFE,0x00,0x00,
/*-- 文字: 明 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFC,0x7C,0x84,0x44,0x84,0x44,0x84,0x44,0xFC,0x7C,0x84,0x44,0x84,0x44,0x84,
0x44,0xFC,0x7C,0x84,0x00,0x84,0x01,0x04,0x01,0x04,0x02,0x04,0x04,0x14,0x00,0x08,
/*-- 文字: 月 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,
0x07,0xF0,0x04,0x10,0x08,0x10,0x08,0x10,0x10,0x10,0x20,0x50,0x40,0x20,0x00,0x00,
/*-- 文字: , --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x10,0x00,0x20,0x00,0x00,0x00,
/*-- 文字: 低 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x18,0x0C,0x7C,0x1B,0xA0,0x12,0x20,0x22,0x20,0x62,0x20,0xA3,0xFE,0x22,0x20,
0x22,0x20,0x22,0x20,0x22,0x10,0x22,0x52,0x22,0x8A,0x23,0x46,0x22,0x22,0x00,0x00,
/*-- 文字: 头 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x10,0x80,0x0C,0x80,0x04,0x80,0x10,0x80,0x0C,0x80,0x08,0x80,0x00,0x80,
0xFF,0xFE,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x30,0x08,0x18,0x10,0x0C,0x20,0x08,
/*-- 文字: 思 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x1F,0xF8,0x11,0x08,0x11,0x08,0x1F,0xF8,0x11,0x08,0x11,0x08,0x1F,0xF8,
0x00,0x00,0x01,0x00,0x08,0x88,0x48,0x84,0x48,0x16,0xC8,0x12,0x07,0xF0,0x00,0x00,
/*-- 文字: 故 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x40,0x10,0x60,0x10,0x40,0x10,0x40,0xFE,0xFE,0x10,0x88,0x10,0x88,0x7D,0x88,
0x46,0x50,0x44,0x50,0x44,0x20,0x44,0x20,0x7C,0x50,0x41,0x8E,0x06,0x04,0x00,0x00,
/*-- 文字: 乡 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x00,0x01,0x80,0x03,0x10,0x06,0x18,0x08,0x30,0x1F,0xE0,0x00,0x88,0x03,0x0C,
0x0C,0x78,0x1F,0x90,0x08,0x10,0x00,0x20,0x00,0xC0,0x07,0x00,0x78,0x00,0x00,0x00,
/*-- 文字: 。 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x48,0x00,0x30,0x00,0x00,0x00,0x00,0x00,
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
//延时
int InIt (void )
{
DDRD|=0XFC;//端口D3-7设置为输出
PORTD|=0Xff;
DDRB|=0X02;//端口B1设置为输出
PORTB|=0Xff;
DDRC|=0X03;//端口C01设置为输出
PORTC|=0Xff;
return (0);
}
void DelayMS (uint x)
{
uchar i;
while(x--)
{
for(i=0;i<2;i++);
}
}
//行显控制
void HC138_scan(uchar temp)
{
PORTD=(temp<<3); //选行
ST0 ; //置数
//_nop();
ST1;
OE1; //开行
DelayMS (10000); //消隐
OE0;ST0;
}
uchar BUFF_1[screen_size*2+2]; //缓存
uchar disrow; //disrow 为16行变量
uchar temp_up;
uchar Move_up;
uchar temp_up;
uint zimo_up;
#define HC595_data1_H() PORTB|=(1<<1) ;
#define HC595_data1_L() PORTB&=~(1<<1) ;
#define HC595_clk_H PORTC|=(1<<1) ;
#define HC595_clk_L PORTC&=~(1<<1) ;
#define HC595_lock_H PORTC|=(1<<0) ;
#define HC595_lock_L PORTC&=~(1<<0) ;
/********************************************************
* 函数说明:595发送一个字节数据 *
********************************************************/
void HC595_send_2byte(uchar byte)
{
uchar i;
HC595_lock_L;
for (i=0;i<8;i++)
{
if(byte&0x80)
{HC595_data1_L();}
else
{HC595_data1_H();}
HC595_clk_H;
HC595_clk_L;
byte1<<=1;
}
}
/*********************************************************
函数名:void Move_Up(const uchar *p,uint f)
功能:上半屏缓存数据 左移
输入:
输出:
/*********************************************************/
void Move_Up(const uchar *p,uint f)
{
signed char s;
for(s=0;s<=screen_size;s++)
{
BUFF_1[2*s]=p[f+32*s+2*disrow];
BUFF_1[2*s+1]=p[f+1+32*s+2*disrow];
}
}
/*********************************************************
函数名:void display(void)
功能:显示刷新
输入:
输出:
/*********************************************************/
void display(void)
{
uchar i = Move_up;
uchar s;
uchar inc,tempyid,temp;
if(i<8)
inc=0;
else
inc=1;
for(s=0+inc;s<screen_size*2+inc;s++) //发送16字节数据
{
if(i<8)
tempyid=i;
else
tempyid=i-8;
temp=((BUFF_1[s]<<tempyid)|(BUFF_1[s+1]>>(8-tempyid)));
HC595_send_2byte(temp); //发送数据
}
}
void Speed_up(speed)
{
if(temp_up++>=speed)
{
temp_up=0 ;
if(Move_up++>=15)
{
Move_up=0; //16列移位计数器清零
zimo_up=zimo_up+32; //取字模计数器加32,准备下一个字
if(zimo_up>=(hanzi_size_S*32)) //字模是否到最后来。
zimo_up=0;
}
}
}
void main(void)
{
InIt();
while(1) //重复循环显示
{
for(disrow=0;disrow<16;disrow++)
{
Move_Up(HZ,zimo_up); //上屏移断允?
display(); //刷新显示数据
PORTD=(disrow<<3); //输出行信号
HC595_lock_H; //锁存为高,595锁存信号
HC595_lock_L;
DelayMS(200);
}
Speed_up(4); //移动速度控制
}
} |
|