📄 a__.c
字号:
/*---------------------------------*/
/*
星期日 2004年9月19日
电启动
CPU:atmel mage64 ,8m内置RC,定时器10msS中断一次
字库用熊政,字模提取程序,v5.44,排序方式,编码3,垂直翻转,0显示
*/
/*---------------------------------*/
//头文件
#include <mega64.h>
//
//IO方向
#define cprotb 0b1111110
#define cprotc 0b0011111
#define cportd 0x0
//清0和置1
#define set_0 0b00000001
#define set_1 0b00000010
#define set_2 0b00000100
#define set_3 0b00001000
#define set_4 0b00010000
#define set_5 0b00100000
#define set_6 0b01000000
#define set_7 0b10000000
#define clr_0 0b11111110
#define clr_1 0b11111101
#define clr_2 0b11111011
#define clr_3 0b11110111
#define clr_4 0b11101111
#define clr_5 0b11011111
#define clr_6 0b10111111
#define clr_7 0b01111111
void timer0_init(void);
void xtsz();
void clrwdt();
unsigned char X_ADDR @0b0100000000000000;
unsigned char Y_ADDR @0b0101000000000000;
unsigned char CMD @0b0110000000000000;
unsigned char DAT @0b0111000000000000;
unsigned char gg = 0;
main()
{
unsigned char x, y,b;
SPH = 0XF;
SPL = 0XFF;
timer0_init();
xtsz();
CMD = 0x04;//0000_0100
//inc_dir=0: X加1
// /dispoff=1:正常显示
//p_wr=0;p_disp=0;读写与显示都为页0
for ( y=0; y<=240; y++ )
{
X_ADDR = 0;
Y_ADDR = y;
clrwdt();
for( x= 0; x<=39; x++)
{
DAT = 0;
}
}
while(1)
{
xtsz();
clrwdt();
gg = 0;
CMD = 0x04;//0000_0100
for ( y=0; y<=240; y++ )
{
X_ADDR = 0;
Y_ADDR = y;
clrwdt();
for( x= 0; x<=39; x++)
{
b = DAT;
switch(b)
{
case 0:
b = 0x80;
break;
case 0x80:
b = 0xc0;
break;
case 0xc0:
b = 0xe0;
break;
case 0xe0:
b = 0xf0;
break;
case 0xf0:
b = 0xf8;
break;
case 0xf8:
b = 0xfc;
break;
case 0xfc:
b = 0xfe;
break;
case 0xfe:
b = 0xff;
break;
case 0xff:
b = 0x0;
break;
default:b = 0;
break;
}
X_ADDR = x;
Y_ADDR = y;
DAT = b;
}
}
}
}
void xtsz()
{
MCUCR = 0x80;
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x01; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
#asm("sei");
}
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0xB2; //set count
OCR0 = 0x4E;
TCCR0 = 0x05; //start timer
}
unsigned int ff;
interrupt [TIM0_OVF] void TIM0_OVF_overflow() //定时器1 捕获处理
{
TCNT0 = 0xB2; //reload counter value
++gg;
if(ff == 0)
{
ff= 1000;
DDRB = 0X00000001;
PORTB.0 = ~PORTB.0;
}
else
{
--ff;
}
}
/*
清看门狗
*/
/*---------------------------------*/
void clrwdt()
{
#asm("wdr");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -