MEGA16游戏开发板驱动

发布者:SunshineHope最新更新时间:2015-11-18 来源: eefocus关键字:MEGA16 手机看文章 扫描二维码
随时随地手机看文章
#include
#include
#define uchar unsigned char
#define uint unsigned int
#pragma interrupt_handler power_off:2
#define EN_ PORTB&=~BIT(2)
#define EN PORTB|=BIT(2)
#define LE PORTB|=BIT(3) //高电平选通573
#define LE_ PORTB&=~BIT(3) //低电平锁存573
#define LEDEN PORTB|=BIT(4) //高电平选通led10
#define LEDEN_ PORTB&=~BIT(4)//低电平禁止led10
#define RONCS PORTB|=BIT(5) //高电平选通rom
#define ROMCS_ PORTB&=~BIT(5) //低电平禁止rom
#define KEYEN DDRD|=BIT(7) //高电平选通导航键盘
#define KEYEN_ DDRD&=~BIT(7) //低电平禁止导航键盘
#define MAC_ PORTD&=~BIT(0)//开启蜂鸣器
#define MAC PORTD|=BIT(0) //关闭蜂鸣器
#define CE PORTD|=BIT(1)
#define CE_ PORTD&=~BIT(1)
#define IO PORTD|=BIT(2)
#define IO_ PORTD&=~BIT(2)
#define SCLK PORTD|=BIT(3)
#define SCLK_ PORTD&=~BIT(3)
#define DATC PORTC
extern dat[]={1,9,3,7};
uchar tab1[4][4][16]={
{{"选项一:涂鸦板 "},{"选项二:摇奖机 "},{"选项四:贪吃蛇 "},{"选项三:退出游戏"}},
{{"涂鸦板使用规则—"},{"移动使用导航键 "},{"提放笔:按'ok'键"},{"返回请按:'B' 键"}},
{{"摇奖机使用规则—"},{" 'ok'键开始 "},{" 'ok'键停止 "},{"得分为最终停止值"}},
{{"贪吃蛇使用规则—"},{"移动使用导航键 "},{"结束游戏按:'B'键"},{"吃闪动的点会变长"}},
};

extern png[5][8]={
{0x00,0x40,0x42,0x7E,0x7E,0x42,0x40,0x00},
{0x0C,0x12,0x22,0x44,0x44,0x22,0x12,0x0C},
{0x02,0x3E,0x42,0x40,0x40,0x42,0x3E,0x02},
{0x00,0x04,0x02,0xA2,0x12,0x0C,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
};
const xy[]={0x80,0x90,0x88,0x98};
const xy3[]={0x83,0x93,0x8b,0x9b};
const tuan[]={0x05,0x00,0x0e,0x0f};
const tab_f[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xD8,0x80,0x90};
const wela_f[]={0x01,0X02,0X04,0X08};
uchar dat_yj=0,dat_yj1=99,ten_f=0;
extern dat_d[]={2,0,1,1,10,1,1,10,1,9};
extern time[]={1,2,10,0,0,10,0,0};
extern tem[]={0,0,0,0};
extern lum[]={0,0,0,0,0};
extern vol[]={0,0,0,0};
uchar dat_f=0x00,ILU=0,ILU1=0,tyx=0x00,tyy=0x00,tyb=0,yj_f=0,yj_y=0,yj_y1=0;
uchar flag=0x00,flag_right=0x00,dat_k=0x00,sleep=0;//flag=0,主菜单,1涂鸦,2摇奖机,3音乐4电子书9关机
void delay(uint zip)
{
zip=zip*10;
while(zip--);
}
void delayms(uint zip)
{
uint rar;
for(;zip>0;zip--)
for(rar=600;rar>0;rar--);
}
void reset()//任何子程序退出处理
{
PORTA=0X00;
DDRC=0X00;
LE_;
ROMCS_;
LEDEN_;
KEYEN_;
PORTD|=BIT(7);
}
void dat_san()
{
dat[0]=dat_yj0/10;
dat[1]=dat_yj;
dat[2]=dat_yj10/10;
dat[3]=dat_yj1;
}
void dat_show()
{
uchar i;
DDRB=0XFF;LE;DDRC=0Xff;DDRA=0XFF;
dat_san();
for(i=0;i<4;i++)
{
LE;
PORTA=wela_f[i];
LE_;
PORTA=0X00;
PORTC=tab_f[dat[i]];
delay(100);
DATC=0Xff;
}
reset();
}
void write_com(uchar com)
{
PORTB&=~BIT(0);
PORTB&=~BIT(1);
LE;
PORTA=com;
LE_;
PORTA=0X00;
PORTB|=BIT(2);
delay(1);
PORTB&=~BIT(2);
delay(3);
}

void write_dat(uchar dat)
{
PORTB|=BIT(0);
PORTB&=~BIT(1);
LE;
PORTA=dat;
LE_;
PORTA=0X00;
PORTB|=BIT(2);
delay(1);
PORTB&=~BIT(2);
delay(3);
}
void init()
{
LE;
write_com(0X38);//设置16*2显示,5*7点阵,8位数据口
delay(5);
write_com(0X0c);//0000 1(100),开显示,不显光标,不闪光标
delay(5);
write_com(0X06);//0000 01(10),指针加1,整屏不移
delay(5);
}
void choose_flag()
{
uchar i;
for(i=0;i<4;i++)
{
write_com(xy3[i]);
delay(4);
if(flag==i)write_dat(0x12);
else write_dat(0x20);
delay(5);
}
}
void printf(uchar ovi)
{
uchar ovm,ovp;
init();
for(ovm=0;ovm<4;ovm++)
{
write_com(xy[ovm]);
delay(5);
for(ovp=0;ovp<16;ovp++)
{
write_dat(tab1[ovi][ovm][ovp]);
delay(5);
}
}
if(flag_right==0)choose_flag();
reset();
}
void clean()
{
uchar pp,qq;
init();
for(pp=0;pp<4;pp++)
{
write_com(xy[pp]);
delay(10);
for(qq=0;qq<17;qq++)
{
write_dat(0x20);
delay(6);
}
}
delay(20);
reset();
}
void init_128()
{
write_com(0x30);//基本指令集
write_com(0x0f);//0000,1100 后两位为设置光标
}
void write_1302(uchar add,uchar dat)
{
uchar i;

}
uchar read_1302(uchar add)
{
uchar i,temp;

return temp;
}

void init_130()
{
write_1302(0x84,0x00);
write_1302(0x80,0x00);
write_1302(0x90,0xa0);
}
void brush()
{
time[7]=read_1302(0x81);
time[6]=read_1302(0x81)/16;
time[4]=read_1302(0x83);
time[3]=read_1302(0x83)/16;
time[1]=read_1302(0x85);
time[0]=read_1302(0x85)/16;
dat_d[9]=read_1302(0x87)/16;
dat_d[8]=read_1302(0x87);
dat_d[6]=read_1302(0x89)/16;
dat_d[5]=read_1302(0x89);
dat_d[3]=read_1302(0x8d)/16;
dat_d[2]=read_1302(0x8d);
}
void sends(uchar addxy,uchar *str)
{
uchar temp;
init();
write_com(xy[addxy-1]);
temp=*str;
while(temp!=0x00)
{
write_dat(temp);
temp=*(++str);
delay(4);
}
reset();
}
void ten_led(uchar t_f)
{
LE;
DDRD&=~BIT(7);
if(t_f>0)if(ten_f>9)ten_f=0;
if(t_f<1)if(ten_f<1)ten_f=10;
if(t_f<1)ten_f--;
if(ten_f<8)PORTA=BIT(ten_f);
DDRC=0XFF;
if(ten_f==8)PORTC|=BIT(0);
if(ten_f==9)PORTC|=BIT(1);
PORTB|=BIT(4);
if(t_f>0)ten_f++;

delay(100);
reset();
}
void png_show()
{
uchar i;
const tab[]={0xfe,0xfd,0xfb,0xF7,0xef,0xdf,0xbf,0x7F};
PORTC=0XFF;
for(i=0;i<8;i++)
{
PORTB|=BIT(3);
PORTA=tab[i];
PORTB&=~BIT(3);
PORTA=png[ILU][i];
delay(250);
PORTA=0X00;
}
if(flag_right==0)ILU1++;
if(ILU1==400){ILU1=0;ILU++;}
if(ILU>4)ILU=0;
reset();
}
void printf1()
{
uchar i;
LE;
init_128();
sends(0x80,"DATA:");
for(i=0;i<10;i++)
{
write_dat(dat[i]+0x30);
}
sends(0x90,"TIME:");
for(i=0;i<8;i++)
{
write_dat(time[i]+0x30);
}
sends(0x88,"LUMEN:");
for(i=0;i<5;i++)
{
write_dat(lum[i]+0x30);
}
sends(0," lm");
sends(0x98,"");
for(i=0;i<4;i++)
{
write_dat(tem[i]+0x30);
if(i==1)sends(0,".");
}
sends(0," ℃");
for(i=0;i<4;i++)
{
write_dat(vol[i]+0x30);
if(i==1)sends(0,".");
}
sends(0," V");
reset();

}
void key_init()
{
LE;
PORTA=0X00;
LE_;
KEYEN;
PORTD&=~BIT(7);
DDRC=0X00;
PORTC=0XFF;
}
uchar diskey()
{
key_init();
if(PINC==0XFF);
else
{
MAC_;
dat_k=PINC;
while(PINC!=0XFF){{dat_show();png_show();};MAC;DDRC=0X00;key_init();};
}
reset();
return dat_k;
}
void power_down()
{
delay(100);
clean();
sends(2," Good_bye!");
sends(3,"Made_from_CuAuAl");
PORTD|=BIT(5);
OCR1A=90000;
OCR1B=50;
delayms(6000);
PORTD&=~BIT(5);
clean();
asm("sleep");
}[page]
void deal_keym()//主菜单处理
{
if(dat_k==247){if(flag<1)flag=3;else flag--;dat_k=0;printf(flag_right);}
if(dat_k==127){if(flag>2)flag=0;else flag++;dat_k=0;printf(flag_right);}
if(dat_k==223){if(flag==3)power_down();{flag_right=flag+1;dat_k=0;printf(flag_right);}}
if(dat_k==191){flag_right=10;flag=10;dat_k=0;};
if(dat_k==239){flag_right=0;flag=0;dat_k=0;};
}
void if_back()//是否返回
{
DDRD&=~BIT(6);
PORTD|=BIT(6);
if(!(PIND&0X40))flag_right=0;
}
void tuya()
{
ILU=4;
if(tyb)png[ILU][tyx]|=BIT(tyy);
if(!tyb)png[ILU][tyx]&=~BIT(tyy);
if(dat_k==191){if(tyx<7)tyx++;dat_k=0;}
if(dat_k==239){if(tyx>0)tyx--;dat_k=0;}
if(dat_k==127){if(tyy<7)tyy++;dat_k=0;}
if(dat_k==247){if(tyy>0)tyy--;dat_k=0;}
if(dat_k==223){tyb=!tyb;dat_k=0;}
if(tyb)ten_led(1);
if(!tyb)ten_led(0);

}
void yj()
{
if(dat_k==223){yj_f++;dat_k=0;if(yj_f==2){yj_y=0;yj_y1=0;}}
if(yj_f>2)yj_f=0;
if(yj_f==0)dat_yj=0;
if(yj_f==1){dat_yj++;dat_yj++;dat_yj1--;dat_yj1--;dat_yj1--;}
if(dat_yj>98)dat_yj=0;
if(dat_yj1<6)dat_yj1=99;
if(yj_f==2)if(yj_y1<1)
{
yj_y1=yj_y++;
dat_yj++;dat_yj++;
dat_yj1--;dat_yj1--;
}
if(yj_f==2)if(yj_y<16)if(yj_y1>0)yj_y1--;
if(yj_f==2)ten_led(0);
if(yj_f==1)ten_led(1);

}
void dis_show()
{
uchar i=50;
if(!tyb&flag_right==1){png[ILU][tyx]|=BIT(tyy);}
printf(flag_right);
while(i--)
{
dat_show();
png_show();
if_back();
dat_f=diskey();
if(flag_right==0)deal_keym();
if(flag_right==1)tuya();
if(i<30)if(!tyb&flag_right==1){png[ILU][tyx]|=BIT(tyy);}
if(flag_right==2)yj();
MAC;
if(flag_right==10)printf1();
}
}
void power_off()
{
clean();
sends(2," Welcome");
sends(3," Hi_The_Boy!");
PORTD|=BIT(5);
delayms(5000);
//clean();
// PORTD&=~BIT(5);
WDTCR=0X18;
}
void main()
{
MCUCSR|=BIT(7);
MCUCSR|=BIT(7);
/////////////////
DDRB=0X3F;
DDRD|=BIT(4)|BIT(5)|BIT(7);
DDRD&=~BIT(2);
PORTD|=BIT(2);
//////////////////
TCCR1A=0X23;
TCCR1B=0X1d;
OCR1A=6000;
OCR1B=100;
/////////////////
EN;ROMCS_;LEDEN_;LE;
/////////////////*
MCUCR&=0X20;
GICR|=BIT(6);
SREG|=BIT(7);
///////////////
PORTD|=BIT(5);
//////////////////
DDRD|=BIT(0);
PORTD|=BIT(0);
printf(0);
while(1)
{
MCUCR|=BIT(6);
dis_show();
brush();
}
}MEGA16游戏开发板驱动

MEGA16游戏开发板驱动

MEGA16游戏开发板驱动

MEGA16游戏开发板驱动


关键字:MEGA16 引用地址:MEGA16游戏开发板驱动

上一篇:ARM·微处理器的编程模型
下一篇:AVR单片机中的中断嵌套

推荐阅读最新更新时间:2024-03-16 14:40

STSPIN模块为MikroElektronika的开发板加入高性能电机驱动
意法半导体(ST)与ST授权合作伙伴MikroElektronika合作,开发出四款Click board™开发板,将STSPIN电机驱动器的优势扩展到STM32开发板以外的开发平台,让使用MikroElektronika原型板以及其它板载mikroBUS™插座的系统的用户也能享受STSPIN电机驱动器的各种好处。 意法半导体的STSPIN IC在极小的封装内集成先进的控制功能、受保护的输出级和无耗散功耗的过流保护等电气安全功能,可以简化电机控制设计。该电机驱动器安装在新的即插即用的Click板上,无需任何硬件配置即可使用。此外,意法半导体还积极支持MikroSDK软件库和代码示例的创建项目,与MikroElektron
[嵌入式]
STSPIN模块为MikroElektronika的<font color='red'>开发板</font>加入高性能电机<font color='red'>驱动</font>器
iTOP-4412开发板驱动lcd显卡以及linux开机log的修改方法
iTOP-4412 开发板 LCD 的屏幕驱动,iTOP-4412 开发板支持 4.3寸,7 寸,9.7 寸的 lcd 显示屏。其中 4.3 寸屏是用的 cpu 直接出来的 RGB 信号,7 寸屏和 9.7寸屏是用的 LVDS 信号,硬件上使用了一个 RGB 转 LVDS 的芯片实现的。我们来看下显示驱动,显示驱动在内核的“drivers/video/samsung”目录下面,这个驱动是三星提供好的,我们这支只讲下我们需要修改的几个文件。 首先是关于屏幕的分辨率的修改, 因为不同的屏幕分辨率, 频率以及其他一些硬件参数是不同的,所以我们需要根据这些参数去配置 cpu 的显示控制器,关于这些参数是在“driversvideo/s
[单片机]
迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解
视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.com/s/1kTlGkcR 总线_设备_驱动注册流程详解 • 注册流程图 • 设备一般都需要先注册,才能注册驱动 – 现在越来越多的热拔插设备,反过来了。先注册驱动,设备来了再注册 设备 • 本节使用的命令 – 查看总线的命令#ls /sys/bus/ – 查看设备号的命令#cat /proc/devices • 设备都有主设备号和次设备号,否则255个设备号不够用 – 查看杂项设备号的命令#cat /proc/misc 设备注册 关于注册设备的一点说明 • 早先的Linux
[单片机]
迅为4412<font color='red'>开发板</font>Linux<font color='red'>驱动</font>教程——总线_设备_<font color='red'>驱动</font>注册流程详解
AVR Mega16 PAL/NTSC制式 B/W 信号模拟
资料参考 http://www.rickard.gunee.com/projects/video/pic/howto.php http://tinyvga.com/avr-sdram-vga http://www.serasidis.gr/circuits/colour_bar_gen/colour_bar_gen.htm http://belogic.com/uzebox/index.asp 以下引用自 http://eyetap.org/ece385/lab5.htm SEQUENCE: Horizontal sync (hsync) pulse: Start each scanline with
[单片机]
AVR <font color='red'>Mega16</font> PAL/NTSC制式 B/W 信号模拟
如何设定的AVR Mega16 片内RC振荡器工作频率
AVR片内RC 振荡器提供了固定的1.0、2.0、4.0 或8.0 MHz 的时钟。这些频率都是5V、25 C 下的标称数值。这个时钟也可以作为系统时钟,只要按照Table 9 对熔丝位CKSEL进行编程即可。 片内标定的RC 振荡器工作模式 CKSEL3 CKSEL2 CKSEL1 CKSEL0 标称频率(MHz) 0 0 0 1 1.0 0 0 1 0 2.0 0 0 1 1 4.0 0 1 0 0
[单片机]
iTOP-4412开发板-驱动-mmc升级驱动修改
mmc 升级之后,用户如果使用老的镜像(201805 月之前的代码),会打印 mmc 的错 误,并无法启动。这是因为在默认的 mmc 驱动源码中有几行判断 mmc 版本的代码,随着时间流逝,mmc 硬件版本一直在升级,导致超出了预留的 mmc 版本号,其实 mmc 硬件驱动是一模一样的,只需要注释掉 mmc 驱动中版本判断的代码即可。 本文档适用于 iTOP-4412 精英版/全能版,iTOP-4418/6818 全能版,iTOP- IMX6Q/D/UL 全能版。 1 mmc 驱动修改 mmc 驱动要修改的文件为内核源码“/drivers/mmc/core/”下的 mmc.c 驱动文件。 在该驱动文件下找到函数“mmc_rea
[单片机]
iTOP-4412<font color='red'>开发板</font>-<font color='red'>驱动</font>-mmc升级<font color='red'>驱动</font>修改
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved