atmega16_点阵屏设计

合集下载

ATmage16点阵与proteus仿真

ATmage16点阵与proteus仿真

ATmage16 16X32点阵与proteus仿真基于A Tmage16单片机16x32点阵显示,主要有四部分构成,16x32点阵屏,74ls595(串转并)移位寄存器,74hc154四线—16线译码器,A Tmage16单片机。

一:电路搭建二:程序编写1:主函数#include "delay .h"#include <iom16v .h>#include <macros.h>#define st0 PORTD &=~BIT(0)#define st1 PORTD |=BIT(0)#define ds0 PORTD &=~BIT(1)#define ds1 PORTD |=BIT(1)#define sh0 PORTD &=~BIT(2)#define sh1 PORTD |=BIT(2)unsigned char t,temp;unsigned char i;unsigned char tab1[]={0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f, 0xff};//74HC154译码unsigned char tab[]={0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x11,0x10,0x11,0x08,0x11,0 x04,0x21,0x04,0x21,0x02,0x41,0x02,0x81,0x02,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0 x00,};//显示“小"unsigned char tab2[]= {0x00,0x80,0x00,0x80,0x79,0x00,0x49,0xFE,0x4A,0x00,0x4C,0x00,0x49,0xF8,0x48, 0x08,0x48,0x10,0x48,0x60,0x78,0x80,0x49,0x00,0x02,0x02,0x02,0x02,0x01,0xFE,0x00,0 x00};//显示“,吃”void write0(unsigned char a)//74ls595串转并{unsigned char i;st0;for (i=0;i<8;i++){if (a&0x01)ds1;elseds0;sh1;sh0;a>>=1;}}void delay1_595() //打开锁相器时间不能太长几个微妙{st0; delay8RC_us(1); st1;}void init (){DDRB=0xff;PORTB=0xff;DDRA=0xff;PORTA=0xff;DDRC=0xff;PORTC=0xff;DDRD=0xff;PORTD=0xff;}void main (){init ();//初始化write0(0);//清屏write0(0);write0(0);write0(0);while(1){for(i=0;i<16;i++){ write0(0);//关闭显示,防从影write0(0);write0(0);write0(0);write0(tab2[2*i+1]); write0(tab2[2*i]);write0(tab[2*i+1]); write0(tab[2*i]);PORTC=tab1[i];delay1_595();delay8RC_us(10); //延时不能太长几个毫秒}}}2:延时函数(.C文件)#include"delay.h"void delay8RC_us(unsigned int time){do{time--;}while(time>1);}void delay8RC_ms(unsigned int time ){while(time!=0){delay8RC_us(1000);time--;}}3:(.H文件)#ifndef __DELAY_H__#define __DELAY_H__void delay8RC_us(unsigned int time);void delay8RC_ms(unsigned int time );#endif。

Atmega16多功能示波器 毕业设计

Atmega16多功能示波器 毕业设计

一、开展本课题的意义及工作内容:课题意义:数字存储示波器是集数据采集和模拟示波器优点于一身的一种精密测量设备,可以将其看作带有显示功能的数据采集系统,亦可将其看作是具有量化存储功能的模拟示波器。

与数据采集系统比,它一般有很多优点:如(1)更宽的输入频带;(2)更高的采样速率;(3)更深的存储深度,并有着数据采集系统所不具备的:直观屏幕显示功能;等效采样等等。

工作内容:利用单片机设计数字存储示波器。

用软件和硬件相结合快速把模拟信号转换为数字量,核心是用avr 单片机内带的10位AD 的转换器技术。

其模拟量通过示波器显示出来。

包括:数据采集模块,数据存储模块,数据输出模块。

二、课题预期达到的效果:(1)要求单边输入,不需要加入前级,可测0-5V 20K 以下任意波形。

双边输入,需要接入前级电路。

+ - 5V 范围。

(2)要求仪器的输入阻抗大于100k,垂直分辨率为12级/div ,水平分辨率为12点/div ;设示波器显示屏水平刻度为7div ,垂直刻度为4div 。

(3)要求设置2s/div 、0.2ms/div 二档扫描速度,仪器的频率范围为DC~500hz ,误差≤5%,。

(4)要求设置1.0V/div 、1.2V/div 二挡垂直灵敏度,误差≤5%。

(5)观测波形无明显失真。

二、文献综述(1) 前言示波器是最常用的一种电子测量仪器,能够直接有效地将被测信号显示出来,方便观察和测试被测信号的各种参数,完成其它测量仪器达不到的目的,是电子工程师完成电路设计、调试的有利工具。

主要研究内容目标特色 数字存储示波器是随着数字集成电路技术的发展而出现的新型智能化示波器,已经成为电子测量领域的基础测试仪器。

随着新技术、新器件的发展,它正在向宽带化、模块化、多功能和网络化的方向发展。

数字存储示波器的优势是可以实现高带宽及强大的分析功能.现在高端数字存储示波器的实时带宽已达到20GHZ ,可以广泛应用于各种千兆以太网、光通讯等测试领域。

LED1616点阵显示课程设计

LED1616点阵显示课程设计

16*16LED点阵滚动显示屏课程设计专业:班级:姓名:学号:指导教师:题目LED16*16点阵显示系统设计一、任务设计一款基于AT89C51单片机的汉字LED16*16点阵显示块,实现汉字循环左移。

二、设计要求[1] 通过对AT89C51单片机的编程,实现点阵循环左移显示“测控技术与仪器”7个汉字。

[3] 写出详细的设计报告。

[4] 给出全部电路和源程序。

三、参考资料[1]李忠国.单片机应用技能实训[M] .北京:人民邮电出版社,2006.[2]康华光.电子技术基础数字部分[M] .北京:清华大学出版社,2005.[3]张义和.例说51单片机[M] .北京:人民邮电出版社,2008.[4]王让定.汇编语言与接口技术[M] .北京:清华大学出版社, 2005.[5]蒋芳芳.单片机智能数字设计[J].计算机教育,2001,(6).[6]孙玉艳.实现PC机与单片机通信与控制 [J].电站设备自动化,2002 ,(4).[7]李海涛.关于如何提高单片机系统可靠性的探讨 [J].宁夏机械,2003 ,(2)目录第1章绪论 (3)1.1 LED电子显示屏简介 (3)1.2 LED显示屏的发展趋势 (4)1.3设计任务 (5)第2 章总体方案论证与设计 (6)2.1 LED驱动模块 (6)2.2 数据存储模块 (6)2.3 总体硬件组成框图 (7)第3章系统硬件设计 (8)3.1 LED动态显示原理 (8)3.2 AT89C51单片机 (9)3.3 驱动电路的设计 (10)3.4 数据存储电路设计 (11)第4章系统的软件设计 (12)4.1 程序流程图 (12)4.2 驱动显示子程序设计 (13)第5章系统调试与测试结果分析 (14)5.1 使用的仪器仪表 (14)5.2 系统调试 (14)5.3 测试结果 (14)结论 (15)参考文献 (16)附录1 程序 (17)附录2 仿真效果图 (20)第1章绪论LED是发光二极管英文Light Emitting Diode的简称,是六十年代末发展起来的一种半导体显示器件,七十年代,随着半导体材料合成技术、单晶制造技术和P-N结形成技术的研究进展,发光二极管在发光颜色、亮度等性能得以提高并迅速进入批量化和实用化。

1616点阵汉字显示设计

1616点阵汉字显示设计

单片机原理及接口技术设计报告设计的重点和难点重点和难点一、单片机I/O口或以扩展锁存器的方式控制点阵显示。

单片机I/O口和扩展锁存器相结合的方式控制16×16点阵显示汉字。

I/O口分别提供字形代码(列码)、扫描信号(行码),凡字形代码位为“1”、行扫描信号为“1”点亮该点,否则熄灭;通过逐行扫描循环点亮字形或曲线。

二、单片机与16×16点阵块之间接口电路设计及编程。

16×16点阵块共阳的接法:把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起。

点阵显示汉字的编程需要查表指令,也就是MOVC A,@A+DPTR指令,DPTR作为基址寄存器时,其值为16位。

编写查表程序时,首先把字模的首址送入DPTR中,再将要查找的数据序号送入A中,然后就可以使用该指令进行查表操作,并将结果送累加器A中。

使点阵显示器显示“绥化学院”四个字。

三、LED点阵显示系统显示汉字的取模。

一个字需要拆分为2个部分。

一般我们把它拆分为上部和下部,上部由8×16点阵组成,下部也由8×16点阵组成。

首先显示的是左上角的第一列的上半部分,亮的点为“1”,不亮的点为“0”由上往下排列组成了8位二进制数,将其转换为16进制。

上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,仍设计成由上往下扫描。

然后单片机转向上半部第二列。

这一列完成后继续进行下半部分的扫描。

依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出32个16进制数就是汉字字模。

2.设计工作原理16×16点阵显示的工作原理要显示文字或图形,控制与组成这些文字或图形的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。

16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。

ATmega16单片机端口讲解新

ATmega16单片机端口讲解新
为常用的硬件去抖,由于需要增加硬件设备,增大了系 统的复杂性,所以硬件消抖一般不常用。
软件消抖 如果按键较多,常用软件方法去抖,即检测出键闭
合后执行一个延时程序,5ms~10ms的延时,让前沿抖动 消失后再一次检测键的状态,如果仍保持闭合状态电平, 则确认为真正有键按下。
图2-13 按键消抖
3、软件算法设计——查询法
2 U9
74HC164
8
dp g f e d c b a
13 12 11 10 6 5 4 3 1
2 U10
74HC164
8
L4 R45~52
dp g f e d c b a
13 12 11 10 6 5 4 3 1
2 U11
74HC164
8
GND GND 168 GND 28 GND 39
图2-12 硬件设计
数码管的字型码——共阴极:
7பைடு நூலகம்ls164引脚图和真值 表:
A1 A2 QA QB QC QD GND
1
14
2
13
3
12
4
11
5
10
6
9
7
8
2-9 引脚图
VCC QH QG QF QE RESET CLOCK
2-10 真值表
TTL电平和CMOS电平的区 别:
TTL CMOS
VOH ≥2.4V VOL ≤0.4V
按键消抖程序:
if(!AJ1) {
__delay_cycles(80000);//延时10ms消抖 if(!AJ1) //确认有键按下
{ while(!AJ1);//等待按键释放
}
}
ATmega16的中断源:

1616点阵显示原理

1616点阵显示原理

1616点阵显示原理
1616点阵显示原理是一种常见的显示技术,它采用了16列16行的点阵来显示图像或文字。

点阵显示屏由许多微小的LED
灯组成,每个LED都代表着一个像素点。

LED有两种状态,
即亮和灭,通过控制LED的亮灭状态,可以在点阵上显示出
所需的图像或文字。

点阵显示屏的控制是通过驱动芯片来实现的。

驱动芯片负责接收来自控制电路的指令,然后根据指令控制LED的亮灭状态。

在1616点阵显示屏中,驱动芯片通常会有16个输出引脚,对应着16列LED。

通过控制这些引脚的电平,可以控制LED
的亮灭状态。

在显示过程中,控制电路会向驱动芯片发送逐行扫描的指令。

逐行扫描是指逐行控制LED的亮灭状态,从而逐行显示图像
或文字。

具体来说,控制电路会通过驱动芯片的输出引脚,依次控制点阵每行的LED。

当需要点亮某个像素时,控制电路
会向对应的输出引脚提供电平信号,使LED亮起;当需要熄
灭某个像素时,则不向对应引脚提供信号,LED灭掉。

通过不断逐行扫描,并控制LED的亮灭状态,可以在点阵显
示屏上显示出完整的图像或文字。

当显示内容需要更新时,控制电路会重新发送指令,从而改变LED的亮灭状态,实现内
容的更新。

1616点阵显示屏广泛应用于各种电子产品中,如计算器、电
子表格、时钟等。

它具有低功耗、显示效果好等优点,因此被
广泛使用。

同时,点阵显示技术也在不断发展,出现了更高分辨率和更多功能的点阵显示屏。

基于单片机的1616点阵滚动显示的设计

基于单片机的1616点阵滚动显示的设计

2.2 16*16点阵组成及显示原理
所谓16*16点阵,就是行列各为16个长度的 点阵,现实中我们可以通过4个8*8点阵进行 拼凑来实现一个16*16的点阵。
如图,16*16点阵由U6,U7,U8,U9四个单点阵 组成,所有的行(X0-X7)都通过排阻接到单 片机的P0口上,所有的列(Y00-Y07、Y10Y17、Y20-Y27、Y30-Y37)接到不同的 74ls138(U2,U3,U4,U5)上,U2控制U6, U3控制U7,U4控制U8,U5控制U9。
2.1 单个点阵显示基本原理
单个点阵接线图:
观察二极管正负极,我们可以很容 易发现,如果赋予P0=0xff; P2=0x00;那么所有的发光二极管 将被点亮,从而点阵就可以实现全 亮。类似的,如果需要实现某一列 或者某一行全亮,也可以进行类似 的赋值。比如,我们要实现第一列 全亮,第一列全亮就要求P20=0;其 他为1,则代码为P0=0xff;P2=0xfe
淮北师范大学2010届学士毕业论文
谢谢!
offset=0; n=0; } }
4.软件仿真结果
4.1 点阵显示字符的PROTEUS仿真结果
图1 点阵显示“欢” 字
图2 点阵显示“迎”字
图3 点阵显示“您”字
图4 点阵显示在两个字之间
结论
本次设计的基于单片机的16*16点阵的滚 动显示经测试仿真结果良好,能清楚的看 到字符的滚动显示,画面比较稳定,流畅。 有时会出现字符显示不完整的现象,我认 为这是程序在时间的控制上做的不够好。 但程序思想还是很正确的,学生可以很容 易就读懂程序,电路也很容易就看明白了。
2.2.1 16*16点阵显示原理
显示原理:这里需要先把代码写入U6,短暂延时后写入 U7,直到U9。时间段控制合理的话,我们就可以看到显 示屏上将显示稳定的字符。所谓滚动显示,即字符是从 屏幕右端慢慢往左边移动,像是一个拉幕的效果,那么 滚动显示在程序上如何实现呢?这里我们就要用到单片 机的定时中断,中断一次,字符往左移动一次,如此循 环,即实现了字符的滚动显示。

单片机ATMega16-的1602液晶显示两行字母

单片机ATMega16-的1602液晶显示两行字母

#include "iom16v.h" //ICC AVR环境下的ATmega16库函数定义了所有的寄存器及其位的标号#include "macros.h"#define LCM_RS_1 PORTB|=(1<<7) //RS为1,定义为PB口的第7位#define LCM_RS_0 PORTB&=(~(1<<7)) //RS为0,定义为PB口的第7位#define LCM_RW_1 PORTB|=(1<<6) //RW为1,定义为PB口的6位#define LCM_RW_0 PORTB&=(~(1<<6)) //RW为0,定义为PB口的6位#define LCM_E_1 PORTB|=(1<<5) //E为1,定义为PB口的第5位#define LCM_E_0 PORTB&=(~(1<<5)) //E为1,定义为PB口的第5位const unsigned char LCM_Dis_String[]="hello hcit";const unsigned char LCM_Dis_WJ[]="welcome to txx";/****************************************************************************** 函数功能:延时1us(4M晶振,0.25微秒的指令执行周期)入口参数:无函数说明:4*0.25=1(微秒)******************************************************************************/ void Delay_1_us(void){NOP();NOP();NOP();NOP();}/****************************************************************************** ********函数功能:延时若干微秒*********************************************************************入口参数:n_us******************/void Delay_n_us(unsigned int n_us){unsigned int cnt_i;for(cnt_i=0;cnt_i<n_us;cnt_i++){Delay_1_us();}}/****************************************************************************** ********函数功能:延时1ms(4M晶振,0.25微秒的指令执行周期)入口参数:无函数说明:(3×cnt_j+2)×cnt_i=(3×33+2)×40*0.25=1010(微秒),可以近似认为是1毫秒******************************************************************************* ********/void Delay_1_ms(void){unsigned char cnt_i,cnt_j;for(cnt_i=0;cnt_i<40;cnt_i++){for(cnt_j=0;cnt_j<33;cnt_j++){}}}/****************************************************************************** ********函数功能:延时若干毫秒入口参数:n_ms******************************************************************************* ********/void Delay_n_ms(unsigned int n_ms){unsigned int cnt_i;for(cnt_i=0;cnt_i<n_ms;cnt_i++){Delay_1_ms();}}/****************************************************************************** ********函数功能:读取忙标志和AC的值入口参数:无******************************************************************************* ********/unsigned char LCM_Re_BAC(){unsigned char status;//LCM_Dat为输入DDRA=0x00;//选择命令通道LCM_RS_0;//选择读操作LCM_RW_1;//使能线置1LCM_E_1;//等待信号线稳定Delay_n_us(1);//读入status=PINA;//使能线置0LCM_E_0;return status;}/****************************************************************************** ********函数功能:写入命令入口参数:命令代码******************************************************************************* ********/void LCM_Wr_CMD(unsigned char cmd_dat){//判忙while(LCM_Re_BAC()>=0x80);//LCM_Dat为输出DDRA=0xFF;//选择命令通道LCM_RS_0;//选择写操作LCM_RW_0;//使能线置1LCM_E_1;//设置命令数据PORTA=cmd_dat;//等待信号线稳定Delay_n_us(1);//送命令数据LCM_E_0;}/****************************************************************************** ********函数功能:写入数据入口参数:数据代码******************************************************************************* ********/void LCM_Wr_DAT(unsigned char dis_dat){//判忙while(LCM_Re_BAC()>=0x80);//LCM_Dat为输出DDRA=0xFF;//选择数据通道LCM_RS_1;//选择写操作LCM_RW_0;//使能线置1LCM_E_1;//设置数据数据PORTA=dis_dat;//等待信号线稳定Delay_n_us(1);//送数据数据LCM_E_0;Delay_n_us(40);}/****************************************************************************** ********函数功能:初始化入口参数:无******************************************************************************* ********/void LCM_1602_Init(void){LCM_Wr_CMD(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口Delay_n_ms(5); //延时5msLCM_Wr_CMD(0x38);Delay_n_ms(5);LCM_Wr_CMD(0x38);Delay_n_ms(5);LCM_Wr_CMD(0x0f); //显示模式设置:显示开,无光标,光标无闪烁Delay_n_ms(5);LCM_Wr_CMD(0x06); //显示模式设置:光标右移,字符不移Delay_n_ms(5);LCM_Wr_CMD(0x01); //清屏幕指令,将以前的显示内容清除Delay_n_ms(5);}unsigned char Get_Key_Val(){unsigned char Key_Val;Key_Val=PINC;switch(Key_Val){case 0xfe:Key_Val=1;break;case 0xfd:Key_Val=2;break;case 0xfb:Key_Val=3;break;default:Key_Val=0;break;}while(PINC==0xFF);return Key_Val;}void main(void){unsigned char cnt_temp,Key_Val;DDRB=0xFF;DDRA=0xFF;DDRC=0x00;PORTC=0xFF;while(1){LCM_1602_Init();Key_Val=Get_Key_Val();switch(Key_Val){case 1:{cnt_temp=0;LCM_Wr_CMD(0x80);while(LCM_Dis_String[cnt_temp]!='\0'){LCM_Wr_DAT(LCM_Dis_String[cnt_temp++]);Delay_n_ms(100);}break;}case 2:{cnt_temp=0;LCM_Wr_CMD(0xC0);while(LCM_Dis_WJ[cnt_temp]!='\0'){LCM_Wr_DAT(LCM_Dis_WJ[cnt_temp++]);Delay_n_ms(100);}break;}case 3:{cnt_temp=0;LCM_Wr_CMD(0x80);while(LCM_Dis_String[cnt_temp]!='\0'){LCM_Wr_DAT(LCM_Dis_String[cnt_temp++]);Delay_n_ms(100);}cnt_temp=0;LCM_Wr_CMD(0xC0);while(LCM_Dis_WJ[cnt_temp]!='\0'){LCM_Wr_DAT(LCM_Dis_WJ[cnt_temp++]);Delay_n_ms(100);}break;}}}}。

智能调控婴儿床的设计与实现

智能调控婴儿床的设计与实现

智能调控婴儿床的设计与实现谢斌盛;邝维威【摘要】为了提高宝宝的睡眠质量,减轻父母的负担,以 ATmega16芯片为核心,设计并实现一种智能型婴儿床。

通过语音识别、温湿度检测等电路随时检测监控婴儿的睡眠环境。

主要讨论了该婴儿床的硬件和软件部分的设计思想及实现方法,并提供了测试实验数据,试验验证了方案的可行性和合理性,并具有一定的实用性。

%An intelligent babycrib with ATmega16 as the core is designed and realized to improve the sleep quality and re⁃duce burdens of parents. By using speech recognition and temperature and humidity dectection circuits,baby′s sleeping environ⁃ment is tested and monitored at any time. The paper discusses the design idea and method of the c rib′s hardwareand software, and provides test data. The experiment verifies the feasibility and rationality of the design scheme and the intelligent crib has very strong practicality.【期刊名称】《现代电子技术》【年(卷),期】2013(000)005【总页数】3页(P125-127)【关键词】ATmega16芯片;智能型婴儿床;语音识别;温湿度检测【作者】谢斌盛;邝维威【作者单位】广州大学实验中心,广东广州 510006;章和电气设备有限公司,广东广州 510507【正文语种】中文【中图分类】TN911.7-340 引言随着智能家居的逐步实现,一种新型的婴儿床跃入了新生家庭的眼球,受到越来越多人的关注。

基于ATmega16的TFTLCD显示系统设计

基于ATmega16的TFTLCD显示系统设计

基于ATmega16的TFTLCD显示系统设计摘要介绍320 ×240的点阵式液晶作为屏显输出的系统设计,以ATmega16单片机为控制核心,HX8347D作为LCD驱动芯片的硬件连接,以及显示方法的设计与软件的编写。

关键词ATmega16;TFTLCD;HX8347D0引言LCD(Liquid Crystal Display)也就是我们俗称的液晶显示器,近年来,由于TFTLCD显示的图像清晰度高,彩色纯正艳丽,无闪烁及动态拖尾等众多优点,使其得到了迅猛的发展。

从可视电话、门铃、各种监视器,便携式彩电、随身看到摄像机、彩投、笔记本电脑等等,无所不用。

很快便成为彩色液晶图像显示的主流。

1TFTLCD驱动芯片常用的带图形显存TFTLCD驱动芯片有ILI9320、ILI9325、HX8347、SSD1289等,不带图形显存的如LQ043等。

本系统采用的是SHENZHEN DISPLAYSUN OPTECH TECHNOLOGY CO.LTD公司的DST1072A 320×240TFTLCD,内部集成驱动芯片HX8347D。

HX8347D是一款非常好用的驱动芯片,通过对内部寄存器的配置可以实现很多的显示功能,比如设置显示区域、显示反转、显示镜像对称等。

由于在HX8347D的Datasheet有详细的介绍,这里就不再详细介绍。

2TFTLCD与ATmega16的硬件接口TFTLCD的接口有数据接口、控制借口、背光控制接口以及电源端口。

本系统使用的TFTLCD有16个数据口DB0-15,我们把DB0-15分别接到ATmega16的PA、PC口上,对与控制接口我们把他们接到PB口上,PB0-4依次接LCD控制端口的复位端口LCD_RESET、读端口RD、写端口WR、命令数据控制端口RS、LCD片选端口CS。

对于本光控制端口我们直接把他接到5V电源上。

3软件设计3.1底层读写函数设计对TFTLCD的寄存器、显存的写数据是整个系统最底层的。

基于ATmega16单片机的电子时钟设计_毕业设计

基于ATmega16单片机的电子时钟设计_毕业设计

如表 2 所示。
表 2 控制命令表
序号
指令
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
1
清屏
0
0
0
0
0
0
0
0
01
2
光标返回
0
0
0
0
0
0
0
0
1*
3
输入方式
0
0
0
0
0
0
0
1 I/D S
4
显示开关
0
0
0
0
0
0
1
D
CB
5
移位
0
0
0
0
0
1 S/C R/L * *
6
功能设置
0
0
0
0
1 DL N
F
B:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标 指令 6:功能设置命令
DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵字符 指令 7:字符发生器 RAM 地址设置 指令 8:DDRAM 地址设置 指令 9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接 收命令或者数据,如果为低电平表示不忙。 指令 10:写数据 指令 11:读数据 3.3 162 液晶显示屏的时序 在操作液晶屏,我们应该对它的工作时序非常熟悉,这里介绍了 162 液晶显 示屏的两个写时序:写指令和写入数据。 写指令,即设置 162 液晶显示屏的工作方式:需要把 RS 置为低电平,RW 置 为低电平,然后将数据送到数据口 D0~D7,最后 E 引脚一个高脉冲将数据写入。 写数据,即在液晶屏上实现显示时:需要把 RS 置为高电平,RW 置为低电平, 然后将数据送到 D0~D7,最后 E 引脚一个高脉冲将数据写入。

ATmega16最小系统板硬件电路设计与分析

ATmega16最小系统板硬件电路设计与分析

ATmega16最小系统板硬件电路设计与分析1、复位线路的设计Mega16已经内置了上电复位设计。

并且在熔丝位里,可以控制复位时的额外时间,故AVR外部的复位线路在上电时,可以设计得很简单:直接拉一只10K的电阻到VCC即可(R0)。

为了可靠,再加上一只0.1uF的电容(C0)以消除干扰、杂波。

D3(1N4148)的作用有两个:作用一是将复位输入的最高电压钳在Vcc+0.5V 左右,另一作用是系统断电时,将R0(10K)电阻短路,让C0快速放电,让下一次来电时,能产生有效的复位。

当AVR在工作时,按下S0开关时,复位脚变成低电平,触发AVR芯片复位。

重要说明:实际应用时,如果你不需要复位按钮,复位脚可以不接任何的零件,AVR芯片也能稳定工作。

即这部分不需要任何的外围零件。

2、晶振电路的设计Mega16已经内置RC振荡线路,可以产生1M、2M、4M、8M的振荡频率。

不过,内置的毕竟是RC振荡,在一些要求较高的场合,比如要与RS232通信需要比较精确的波特率时,建议使用外部的晶振线路。

早期的90S系列,晶振两端均需要接22pF左右的电容。

Mega系列实际使用时,这两只小电容不接也能正常工作。

不过为了线路的规范化,我们仍建议接上。

重要说明:实际应用时,如果你不需要太高精度的频率,可以使用内部RC振荡。

即这部分不需要任何的外围零件。

3、AD转换滤波线路的设计为减小AD转换的电源干扰,Mega16芯片有独立的AD电源供电。

官方文档推荐在VCC串上一只10uH的电感(L1),然后接一只0.1uF的电容到地(C3)。

Mega16内带2.56V标准参考电压。

也可以从外面输入参考电压,比如在外面使用TL431基准电压源。

不过一般的应用使用内部自带的参考电压已经足够。

习惯上在AREF脚接一只0.1uF的电容到地(C4)。

重要说明:实际应用时,如果你想简化线路,可以将AVCC直接接到VCC,AREF悬空。

即这部分不需要任何的外围零件。

基于ATMRGA16单片机16x16LED点阵显示汉字系统设计实验报告

基于ATMRGA16单片机16x16LED点阵显示汉字系统设计实验报告

《单片机原理与应用》课程设计基于ATMRGA16单片机16x16LED点阵显示汉字系统设计报告所属系部:电子与通信工程所属班级:20XXXX20XX年 6 月15 日1 绪论1.1 选题背景及研究意义LED的点阵图文显示目前被广泛应用于各个方面,尤其当LED点阵图文显示与功能强大且价格低廉的单片机,其化学效应异常剧烈,单片机不仅丰富了LED点阵图文显示的应用范围,也增强了其实用性。

1.2 系统实现目标在取模软件中输入汉字,通过编码及下载,汉字可在LED点阵显示屏上流动显示汉字“北京XXXX学院”。

在汉字流动显示时,用户可通过按键1控制汉字在LED显示屏上的加速移动;通过按键2控制汉字在LED显示屏上的减速移动;通过按键3控制汉字在LED显示屏上恢复原移动速度;在汉字流动显示处于加速或减速状态时,用户可通过串口助手发送信号使汉字在LED显示屏上恢复原移动速度。

1.3 小组成员及分工XXX 负责检验调整单片机功能实现;XXX 负责制作答辩PPT;XXX 负责完成实验报告;代码由三位成员共同编写。

2 系统设计原理2.1总体设计方案本次课程设计针对ATMega16单片机作为驱动LED的图文显示控制的芯片,将课堂上所学的单片机的硬件结构、工作原理及方式,与自己查阅资料学习LED的工作方式及原理以及相关软件的运行相结合研究单片机对LED点阵显示屏的控制技术。

在以上理论为基础的前提下,本小组设计了搭建基于单片机的16*16LED点阵显示汉字控制的电路,利用相关的元器件,以焊接的形式,实现了单片机对LED点阵显示屏的图文控制,最终达到预期设计要求。

点阵显示屏的控制系统是由主控系统、行驱动模块、列驱动模块和点阵显示模块4个部分组成。

其中,主控系统选择ATMega16单片机,它是使用比较普遍的一种单片机,具有低功耗、低价格的优点,性能好。

行列驱动模块的作用是接收单片机发出的信息,然后输出给点阵显示屏的行列端。

本设计的点阵显示屏有16行列,所以这里选择4个74HC595芯片作为驱动器。

基于ATmega16单片机的电子时钟设计20130504综述

基于ATmega16单片机的电子时钟设计20130504综述

基于ATmega16单片机的电子时钟设计物理与电子工程学院电子信息科学与技术专业(职教)2009级罗德龙指导教师宋培森摘要:随着科学技术的发展电子时钟在日常的生活中应用的相当的多。

本文介绍了一款基于ATmega16单片机为主控芯片的数字电子时钟设计。

其中主要包括ATmega16单片机、独立键盘、DS1302芯片、LCD1602液晶显示、以及相关外围电路并在PROTUES仿真平台上运行。

关键词:ATmega16单片机;DS1302芯片;独立键盘;LCD1602Abstract:With the development of science and technology electronic clock in the daily life of the application is quite long. This paper introduces a single chip processor as the main control chip based on ATmega16 digital electronic clock design. Include ATmega16 microcontroller, independent keyboard, DS1302 chip LCD1602, liquid crystal display (LCD), and related peripheral circuit and in PROTUES simulation platform operation.Key words:ATmega16 microcontroller;DS1302 chip;Independent keyboard;LCD1602 1 前言液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧等许多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。

本文中详细介绍了基于ATmega16单片机控制下的162液晶屏显示设计,此设计基于ds1302的时钟电路方便实用,电路设计简单。

ATMEGA16单片机LED点阵显示汉字

ATMEGA16单片机LED点阵显示汉字

ATMEGA16单片机16*16led点阵显示汉字On ATMEGA16 and led Application王志斐(中色东方集团有限公司计量室)摘要: 结合ATMEGA16的系统的设计讨论了LED点阵的应用。

简要介绍了ATMEGA16的主要特性以及系统的实现, 着重给出了点陈显示的硬件及其软件流程。

关键词: ATMEGA16 ; SD41588LED(8*8)点阵; 74ls138AVR (Advanced RISC) 单片机是ATMEL公司继AT89 系列之后推的全新配置的精简指令集RISC 的高性能8 位单片机。

设计上采用低功耗的CMOS 技术, 而且在软件上支持C 高级语言及汇编语言。

其中, ATMEGA16是该系列中比较有代表性的一种,文中对其在基ATMEGA16的汉字显示系统中的应用进行详实地说明。

1 ATMEGA16 简介ATMEGA16 硬件应用Harward 结构,具有预取指令功能,使得指令可以在一个时钟周期内执行;具有120 条功能强大的指令,大多数执行为单周期,每MHz可实现IMIPS 的处理能力, 芯片外封装(PDIP)如图1 所示。

其主要特点如下:• 高性能、低功耗的 8位AVR®微处理器• 先进的RISC结构–131条指令–大多数指令执行时间为单个时钟周期–32个8位通用工作寄存器–全静态工作–工作于16 MHz 时性能高达16 MIPS–只需两个时钟周期的硬件乘法器• 非易失性程序和数据存储器–16K 字节的系统内可编程Flash擦写寿命: 10,000 次–具有独立锁定位的可选Boot 代码区通过片上Boot 程序实现系统内编程真正的同时读写操作–512 字节的EEPROM擦写寿命: 100,000 次–1K字节的片内SRAM–可以对锁定位进行编程以实现用户程序的加密• J TAG 接口( 与IEEE 1149.1 标准兼容)–符合JTAG 标准的边界扫描功能–支持扩展的片内调试功能–通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程• 外设特点–两个具有独立预分频器和比较器功能的8 位定时器/ 计数器–一个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器–具有独立振荡器的实时计数器RTC–四通道PWM– 8路10 位ADC8 个单端通道TQFP 封装的7 个差分通道2 个具有可编程增益(1x, 10x, 或200x)的差分通道–面向字节的两线接口–两个可编程的串行USART–可工作于主机/ 从机模式的SPI 串行接口–具有独立片内振荡器的可编程看门狗定时器–片内模拟比较器• 特殊的处理器特点–上电复位以及可编程的掉电检测–片内经过标定的RC 振荡器–片内/ 片外中断源–6种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及扩展的Standby 模式• I/O 和封装–32 个可编程的I/O 口–40引脚PDIP 封装, 44 引脚TQFP 封装, 与44 引脚MLF 封装• 工作电压:–ATmega16L:2.7 - 5.5V–ATmega16:4.5 - 5.5V• 速度等级–0 - 8 MHz ATmega16L– 0 - 16 MHz ATmega16图一 ATmega16 的引脚2 LED显示汉字的设计2.1 硬件设计汉字显示用四块SD41588的8*8点阵显示模块,组成一个16*16的显示屏用于显示一个16*16大小的汉字,汉字字模用汉字取模软件得到,显示汉字的段码由ATmega16的PB口和PD口组出,由于LED点阵的电压限置,在PB口、PD口输出段码信号后进入LED时每一路加一个大小为1K电阻以起到限流的作用,以免电流过大损坏LED显示屏,位码由ATmega16 的PA口给也,PA口给的是四位二进制码,通过两片74LS138译码器组成的4—16译码器来扫描16*16点阵的位,便可以显示汉字,具体显示内容由软件控制,至此LED显示汉字的设计的硬件设计完成。

ATmega16单片机中文技术资料

ATmega16单片机中文技术资料

ATmega16单片机中文技术资料一、概述ATmega16是一款高性能、低功耗的8位微控制器,由Atmel公司推出。

它基于AVR增强型RISC结构,拥有丰富的外设资源和灵活的编程特性,广泛应用于工业控制、消费电子、通信设备等领域。

二、主要特性1. 内核:AVR增强型RISC结构,最高工作频率为16MHz。

2. 存储:16KB的程序存储器(Flash)、512B的EEPROM和1KB 的SRAM。

3. 外设接口:32个通用I/O口、8个通道的10位ADC、2个8位定时器/计数器、1个16位定时器/计数器、1个串行通信接口(USART)、1个串行外设接口(SPI)和1个两线接口(TWI)。

4. 工作电压:2.7V至5.5V,支持低功耗模式。

5. 封装:采用TQFP和PDIP封装,便于嵌入式系统设计。

三、引脚功能1. VCC:电源正极,接2.7V至5.5V电压。

2. GND:电源负极,接地。

3. PA0PA7:端口A,具有通用I/O、模拟输入和外围设备功能。

4. PB0PB7:端口B,具有通用I/O、JTAG接口和外围设备功能。

5. PC0PC7:端口C,具有通用I/O、模拟输入和外围设备功能。

6. PD0PD7:端口D,具有通用I/O和外围设备功能。

7. XTAL1/XTAL2:晶振输入/输出,用于外部晶振或陶瓷谐振器。

8. AVCC:模拟电源,为ADC和模拟电路提供电源。

10.RESET:复位输入,低电平有效。

四、编程与开发1. 编程语言:支持C语言和汇编语言编程。

2. 开发工具:可使用Atmel Studio、AVR Studio等集成开发环境进行程序编写、编译和调试。

3. 烧录方式:通过ISP、JTAG、HVPP等接口进行程序烧录。

本文档旨在为您提供ATmega16单片机的中文技术资料,帮助您更好地了解这款微控制器,为您的项目开发提供支持。

后续内容将详细介绍ATmega16的外设功能、编程方法及应用实例。

基于51单片机16LED点阵的设计综述

基于51单片机16LED点阵的设计综述

南华大学《单片机》设计报告16×16点阵显示屏的设计姓名:王佳杰学号:20114400218 专业班级:通信1102班指导老师:朱卫华所在学院:电气工程学院2014年6月15 日摘要本设计使用简单单片机AT98C52作为主控制模块,利用简单的外围电路来驱动16×16的点阵LED显示屏。

在本设计中主要用两个74HC595来驱动16×16点阵显示屏的列,用一个74HC154来驱动16×16点阵显示屏的行,可以最终实现字符的上下左右移动。

也就是说,硬件电路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路三部分。

从而可以实现一个室内用的16×16点阵LED图文显示屏,在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰,图形或文字显示有静止、移入移出等显示方式。

最后,利用烧录器可以很方便的实现单片机与PC机等外围存储设备的数据传输,并能利用软件方便的进行显示内容的多样变化,另一方面,LED 点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成。

LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等。

文章给出了一种基于MCS-51单片机的16×16 点阵LED显示屏的设计方案。

包括系统具体的硬件设计方案,软件流程图和部分C语言程序等方面。

在负载范围内, 只需通过简单的级联就可以对显示屏进行扩展,是一种成本低廉的图文显示方案。

目录摘要 (2)1 概述 (4)1.1LED及LED显示屏 (4)1.2功能要求 (4)1.3方案论证 (4)1.4LED点阵的选取 (5)1.5LED点阵引脚说明 (6)1.6LED点阵拼接方式 (6)2 系统总体方案及硬件设计 (7)2.1显示屏总体设计方案 (7)2.2列驱动电路 (7)2.2.174HC595引脚图 (7)2.2.274HC595管脚说明 (7)2.2.374HC595在电路中的连接 (7)2.3行驱动电路 (9)2.3.174HC154概述 (9)2.3.274HC154引脚图 (10)2.3.374HC154管脚说明 (10)2.3.474HC154在电路中的连接 (10)2.4点阵恒流驱动电路 (11)2.5单片机系统及外围电路 (11)3 软件设计 (12)3.1显示驱动程序 (12)3.2系统主程序 (13)4 PROTEUS软件仿真 (14)4.1P ROTEUS软件简介 (14)4.1 PROTEUS仿真过程 (15)4.3 PROTEUS仿真效果图 (15)5 课程设计体会 (16)参考文献 (17)附1 源程序代码 (18)附2 系统原理图 (27)附3 实物图 (28)1 概述1.1 LED及LED显示屏LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。

基于AVR单片机ATmega16的8种LED闪烁灯控制

基于AVR单片机ATmega16的8种LED闪烁灯控制

基于AVR单片机ATmega16的8种LED闪烁灯控制#include <iom16v.h>#include <macros.h>#define uchar unsigned char#define uint unsigned intvoid Delay() //延时函数{uchar a, b, c;for (a = 1; a; a++)for (b = 1; b; b++)for (c = 0; c<10; c++) //循环次数=255*255*10;}void DelayMs(uint i) //1ms延时,准确性较Delay();高{while(i--){uint j;for(j=1;j<=613;j++);}}void LED_on() //打开所有LED{PORTB =0X00;Delay();}void LED_off() //关闭所有LED{PORTB = 0xFF;Delay();}void LED_01(int i) //LED亮灭控制{PORTB = ~BIT(i); //输出低电平DelayMs(100); //调用延时程序}void LED_02(int i) //间隔点亮{PORTB=~(BIT(i)|BIT(i-2));DelayMs(100);}void LED_03(int i) //相临点亮{PORTB=~(BIT(i)|BIT(i-1)); //~后内容需用括号括起来 DelayMs(100);}void LED_04(int i) //发散聚集点亮{switch(i){case 0:PORTB=0xE7;DelayMs(100);break; //延时100ms case 1:PORTB=0xDB;DelayMs(100);break;case 2:PORTB=0xBD;DelayMs(100);break;case 3:PORTB=0x7E;DelayMs(100);break;default:break;}}void LED_05(int i) //00,0F,F0,FF方式显示{switch(i){case 0:PORTB=0x00;DelayMs(100);break; //延时100ms case 1:PORTB=0x0F;DelayMs(100);break;case 2:PORTB=0xF0;DelayMs(100);break;case 3:PORTB=0xFF;DelayMs(100);break;default:break;}}void LED_06(int i){switch(i){case 0:PORTB=0XAA;DelayMs(100);break;case 1:PORTB=0X55;DelayMs(100);break;}}void main(){int l,m,n,o,p,q,r,s,i,j;DDRA =0X00; //端口上拉输入PORTA=0XFF;DDRB =0xFF; //端口输出PORTB="0xFF"; //输出高电平,LED熄灭 DDRC =0X00;PORTC=0XFF;DDRD =0X00;PORTD=0XFF;for (r=0;r<5;r++){for(l=0;l<5;l++) //模式1:顺序点亮{for (i = 0; i < 8; i++) //顺序单个点亮LEDLED_01(i);for (i = 6; i > 0; i--) //逆序单个点亮LEDLED_01(i);}LED_off();for(m=0;m<5;m++) //模式2:顺序单个间隔点亮{for (i = 0; i < 8; i += 2) //顺序间隔点亮LEDLED_01(i);for (i = 7; i > 0; i -= 2) //逆序间隔点亮LEDLED_01(i);}LED_off();for(n=0;n<5;n++) //模式3:间隔点亮{for (i = 2; i < 8; i++) //间隔顺序同时点亮LED_02(i);for (i = 6; i > 2; i--) //间隔逆序同时点亮LED_02(i);}LED_off();for(o=0;o<5;o++) //模式4:相临点亮{for (i = 1; i < 8; i++) //相临顺序同时点亮LED_03(i);for (i = 6; i > 1; i--) //相临逆序同时点亮LED_03(i);}LED_off();for(p=0;p<5;p++) //模式5:发散聚集点亮{for(i=0;i<4;i++) //发散点亮LED_04(i);for(i=2;i>0;i--) //聚集点亮LED_04(i);}LED_off();for(q=0;q<5;q++) //模式6:四四点亮{for(i=0;i<4;i++) //四四顺序点亮LED_05(i);for(i=2;i>0;i--) //四四逆序点亮LED_05(i);}LED_off();for(s=0;s<5;s++) //模式7:四四点亮{for(i=0;i<2;i++) //四四顺序点亮LED_06(i);}LED_off();for(j=0;j<10;j++) //模式8:全部点亮熄灭{LED_on();LED_off();}}//MCUCR=0x40; //空闲模式,CPU占用100%//MCUCR=0x50; //ADC噪声抑制模式,CPU占用100% //MCUCR=0x60; //掉电模式,CPU占用80%//MCUCR=0x70; //省电模式,CPU占用4%//MCUCR=0xE0; //Standby模式,CPU占用80% MCUCR=0xF0; //扩展Standby模式,CPU占用4% asm("sleep"); //CPU休眠指令}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

* dianzhenping.c** Created: 2015/5/8 14:17:44* Author: LOVE*//************************************************************************/ /* 常用头文件及宏定义*/ /************************************************************************/#include <avr/io.h>#include <util/delay.h> //延时文件#include <avr/sleep.h> //睡眠文件#include <avr/interrupt.h> //中断文件#include <avr/eeprom.h> //eeprom#define BIT(x) (1<<x)#define uchar unsigned char#define uint unsigned intuchar mima_0[6]={1,2,3,4,5,6},daiji=0,mode=1;/************************************************************************/ /* eeprom程序*/ /************************************************************************/void eeprom_write(uint dizhi,uchar shuju)//eeprom写{while (EECR&BIT(EEWE)); //等待写结束EEAR=dizhi; //准备好地址EEDR=shuju; //准备好数据EECR|=BIT(EEMWE); //主机写使能EECR|=BIT(EEWE); //写使能}uchar eeprom_read(uint dizhi)//eeprom读{while (EECR&BIT(EEWE)); //等待写结束EEAR=dizhi; //地址EECR|=BIT(EERE); //读使能return EEDR; //返回读到的数据}void chushihua_eeprom()//初始化eeprom,对0x00,0x01写'o''k'uchar eep_0,eep_1,i,j;eep_0=eeprom_read(0x00);eep_1=eeprom_read(0x01);if (eep_0=='o'&&eep_1=='k'){mode=eeprom_read(0x20);j=0x03;for (i=0;i<6;i++){mima_0[i]=eeprom_read(j);j++;}}else{while(!(eep_0=='o'&&eep_1=='k')){eeprom_write(0x00,'o');eeprom_write(0x01,'k');j=0x03;for (i=0;i<6;i++){eeprom_write(j,mima_0[i]);j++;}eeprom_write(0x20,mode);eep_0=eeprom_read(0x00);eep_1=eeprom_read(0x01);}}}/************************************************************************/ /* 矩阵键盘积木块*/ /************************************************************************//* 引脚说明*/ /* 键盘PC0~PC3行*/ /* 键盘PC4~PC7列*//* 键盘宏定义*/#define DDR_JIANPAN DDRC#define PORT_JIANPAN PORTC#define PIN_JIANPAN PINCvoid chushihua_jianpan() //键盘初始化函数{DDR_JIANPAN=0xf0; //行扫描//0~3输入态//4~7输出态PORT_JIANPAN=0x0f; //0~3启用上拉电阻//4~7输出低电平}uchar jiance() //检测函数//行扫描{if (((PIN_JIANPAN|0xf0)==0xff))//屏蔽高四位//读取低四位状态{return 0;}else{return 1;}}uchar shibie_hang() //行识别状态(与检测函数扫描一致,不用切换状态){switch(PIN_JIANPAN|0xf0){case 0xfe:return 1;break;case 0xfd:return 2;break;case 0xfb:return 3;break;case 0xf7:return 4;break;default:return 0;}}uchar shibie_lie() //列识别状态,需要切换扫描状态{uchar i;DDR_JIANPAN=0x0f; //行扫描//0~3输出态//4~7输入态PORT_JIANPAN=0xf0; //0~3输出低电平//4~7启用上拉电阻_delay_ms(1);switch(PIN_JIANPAN|0x0f) //屏蔽低四位//读取高四位状态{case 0xef:i=1;break;case 0xdf:i=2;break;case 0xbf:i=3;break;case 0x7f:i=4;break;default:i=0;}DDR_JIANPAN=0xf0; //行扫描//0~3输入态//4~7输出态PORT_JIANPAN=0x0f; //0~3启用上拉电阻//4~7输出低电平return i;}/************************************************************************/ /* 74HC595 */ /************************************************************************/ // RCK PA 0// 行_1 PD 7 SI PD 6 SCK// 列_1 PD 5 SI PD 4 SCK#define DDR_595_1 DDRD#define PORT_595_1 PORTD#define RCK PORT_595_2|=BIT(2),PORT_595_2&=~BIT(2)#define SI_HANG_1_H PORT_595_1|=BIT(7)#define SI_HANG_1_L PORT_595_1&=~BIT(7)#define SCK_HANG_1 PORT_595_1|=BIT(6),PORT_595_1&=~BIT(6)#define SI_LIE_1_H PORT_595_1|=BIT(5)#define SI_LIE_1_L PORT_595_1&=~BIT(5)#define SCK_LIE PORT_595_1|=BIT(4),PORT_595_1&=~BIT(4)#define DDR_ZHISHI DDRA#define PORT_ZHISHI PORTA#define DAIJI_ON PORT_ZHISHI|=BIT(1)#define DAIJI_OFF PORT_ZHISHI&=~BIT(1)#define DIANYUAN_ON PORT_ZHISHI|=BIT(0)#define DIANYUAN_OFF PORT_ZHISHI&=~BIT(0)#define HONG_ON PORT_ZHISHI|=BIT(2)#define HONG_OFF PORT_ZHISHI&=~BIT(2)#define LU_ON PORT_ZHISHI|=BIT(3)#define LU_OFF PORT_ZHISHI&=~BIT(3)#define LAN_ON PORT_ZHISHI|=BIT(4)#define LAN_OFF PORT_ZHISHI&=~BIT(4)void hang_1(uchar shuju1,uchar shuju2,uchar shuju3,uchar shuju4){int i;for (i=7;i>=0;i--){if (shuju4&BIT(i)){SI_HANG_1_L;}else{SI_HANG_1_H;}SCK_HANG_1;}for (i=7;i>=0;i--){if (shuju3&BIT(i)){SI_HANG_1_L;}else{SI_HANG_1_H;}SCK_HANG_1;}for (i=7;i>=0;i--){if (shuju2&BIT(i)){SI_HANG_1_L;}else{SI_HANG_1_H;}SCK_HANG_1;}for (i=7;i>=0;i--){if (shuju1&BIT(i)){SI_HANG_1_L;}else{SI_HANG_1_H;}SCK_HANG_1;}}// 行_2 PD 3 SI PD 2 SCK// 列_2 PD 1 SI#define SI_HANG_2_H PORT_595_1|=BIT(3)#define SI_HANG_2_L PORT_595_1&=~BIT(3)#define SCK_HANG_2 PORT_595_1|=BIT(2),PORT_595_1&=~BIT(2) #define SI_LIE_2_H PORT_595_1|=BIT(1)#define SI_LIE_2_L PORT_595_1&=~BIT(1)void hang_2(uchar shuju1,uchar shuju2,uchar shuju3,uchar shuju4){int i;for (i=7;i>=0;i--){if (shuju4&BIT(i)){SI_HANG_2_L;}else{SI_HANG_2_H;}SCK_HANG_2;}for (i=7;i>=0;i--){if (shuju3&BIT(i)){SI_HANG_2_L;}else{SI_HANG_2_H;}SCK_HANG_2;}for (i=7;i>=0;i--){if (shuju2&BIT(i)){SI_HANG_2_L;}else{SI_HANG_2_H;}SCK_HANG_2;}for (i=7;i>=0;i--){if (shuju1&BIT(i)){SI_HANG_2_L;}else{SI_HANG_2_H;}SCK_HANG_2;}}// 行_3 PD 0 SI PB 7 SCK// 列_3 PB 6 SI#define DDR_595_2 DDRB#define PORT_595_2 PORTB#define SI_HANG_3_H PORT_595_1|=BIT(0)#define SI_HANG_3_L PORT_595_1&=~BIT(0)#define SCK_HANG_3 PORT_595_2|=BIT(7),PORT_595_2&=~BIT(7) #define SI_LIE_3_H PORT_595_2|=BIT(6)#define SI_LIE_3_L PORT_595_2&=~BIT(6)void hang_3(uchar shuju1,uchar shuju2,uchar shuju3,uchar shuju4){int i;for (i=7;i>=0;i--){if (shuju4&BIT(i)){SI_HANG_3_L;}else{SI_HANG_3_H;}SCK_HANG_3;}for (i=7;i>=0;i--){if (shuju3&BIT(i)){SI_HANG_3_L;}else{SI_HANG_3_H;}SCK_HANG_3;}for (i=7;i>=0;i--){if (shuju2&BIT(i)){SI_HANG_3_L;}else{SI_HANG_3_H;}SCK_HANG_3;}for (i=7;i>=0;i--){if (shuju1&BIT(i)){SI_HANG_3_L;}else{SI_HANG_3_H;}SCK_HANG_3;}}// 行_4 PB 5 SI PB 4 SCK // 列_4 PB 3 SI#define SI_HANG_4_H PORT_595_2|=BIT(5)#define SI_HANG_4_L PORT_595_2&=~BIT(5)#define SCK_HANG_4 PORT_595_2|=BIT(4),PORT_595_2&=~BIT(4) #define SI_LIE_4_H PORT_595_2|=BIT(3)#define SI_LIE_4_L PORT_595_2&=~BIT(3)void hang_4(uchar shuju1,uchar shuju2,uchar shuju3,uchar shuju4){int i;for (i=7;i>=0;i--){if (shuju4&BIT(i)){SI_HANG_4_L;}else{SI_HANG_4_H;}SCK_HANG_4;}for (i=7;i>=0;i--){if (shuju3&BIT(i)){SI_HANG_4_L;}else{SI_HANG_4_H;}SCK_HANG_4;}for (i=7;i>=0;i--){if (shuju2&BIT(i)){SI_HANG_4_L;}else{SI_HANG_4_H;}SCK_HANG_4;}for (i=7;i>=0;i--){if (shuju1&BIT(i)){SI_HANG_4_L;}else{SI_HANG_4_H;}SCK_HANG_4;}}void lie(uchar shuju){int i;if (shuju>15){shuju-=16;for (i=15;i>=0;i--){if (i==shuju){SI_LIE_1_H;SI_LIE_2_H;SI_LIE_3_H;SI_LIE_4_H;}else{SI_LIE_1_L;SI_LIE_2_L;SI_LIE_3_L;SI_LIE_4_L;}SCK_LIE;}for (i=15;i>=0;i--){SI_LIE_1_L;SI_LIE_2_L;SI_LIE_3_L;SI_LIE_4_L;SCK_LIE;}}else{for (i=15;i>=0;i--){SI_LIE_1_L;SI_LIE_2_L;SI_LIE_3_L;SI_LIE_4_L;SCK_LIE;}for (i=15;i>=0;i--){if (i==shuju){SI_LIE_1_H;SI_LIE_2_H;SI_LIE_3_H;SI_LIE_4_H;}else{SI_LIE_1_L;SI_LIE_2_L;SI_LIE_3_L;SI_LIE_4_L;}SCK_LIE;}}}#define QINGPING hang_1(0,0,0,0),hang_2(0,0,0,0),hang_3(0,0,0,0),hang_4(0,0,0,0),RCK uchar anjian(uchar a[],uchar b[],uchar c[],uchar d[],uchar k) //计算按键标号函数{uchar jianma=0,i;if (jiance()){QINGPING;_delay_ms(10);if (jiance()){jianma=(shibie_hang()-1)*4+shibie_lie(); //计算按键标号while(jiance()){for (i=0;i<32;i++){if (k){hang_1(a[i],b[i],c[i],d[i]);hang_2(a[i+32],b[i+32],c[i+32],d[i+32]);if (k==1){hang_3(0,0,0,0);hang_4(0,0,0,0);}else{hang_3(a[i+64],b[i+64],c[i+64],d[i+64]);hang_4(a[i+96],b[i+96],c[i+96],d[i+96]);}}else{hang_1(0,0,0,0);hang_2(0,0,0,0);hang_3(0,0,0,0);hang_4(0,0,0,0);}lie(i);RCK;}}}}return jianma;}uchar mimayanzheng(uchar o){uchar i,key=1,jianma;uchar a[129]={0x40,0x42,0xCC,0x00,0x00,0x44,0x54,0x54,0x54,0x7F,0x54,0x54,0x54,0x44,0x40,0x00,0x88,0x68,0x1F,0xC8,0x08,0x10,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0xF8,0x07,0x10,0x90,0x10,0x11,0x16,0x10,0x10,0xD0,0x10,0x00,0x00,0x90,0x52,0x34,0x10,0xFF,0x10,0x34,0x52,0x80,0x70,0x8F,0x08,0x08,0xF8,0x08,0x00,0x10,0x8C,0x44,0x04,0xE4,0x04,0x95,0xA6,0x44,0x24,0x14,0x84,0x44,0x94,0x0C,0x00,0x04,0x84,0xE4,0x5C,0x44,0xC4,0x00,0x02,0xF2,0x82,0x82,0x82,0xFE,0x80,0x80,0x00, },b[129]={0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x15,0x15,0x15,0x55,0x95,0x7F,0x00,0x00,0x00, 0x09,0x19,0x09,0xFF,0x05,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00, 0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x80,0x00, 0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x00,0x00,0xFF,0x40,0x40,0x41,0x5E,0x40,0x40,0x70,0x4E,0x41,0x40,0x40,0x00, 0x82,0x9A,0x56,0x63,0x22,0x52,0x8E,0x00,0x80,0x40,0x33,0x0C,0x33,0x40,0x80,0x00, 0x02,0x02,0x7A,0x41,0x41,0x43,0x42,0x7E,0x42,0x42,0x42,0x43,0xF8,0x00,0x00,0x00, 0x02,0x01,0x7F,0x10,0x10,0x3F,0x00,0x08,0x08,0x08,0x08,0x48,0x88,0x40,0x3F,0x00, },c[129]={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, 0x40,0xC0,0x40,0x40,0x40,0x60,0x1C,0x03,0x1C,0x60,0x40,0x40,0x40,0xC0,0x40,0x00, },d[129]={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, 0x00,0x00,0x41,0x39,0x26,0x10,0x10,0x08,0x08,0x10,0x26,0x39,0x41,0x00,0x00,0x00, };uchar n=0,mima_2[6]={0},queren=0;uchar shu_c[10][8]={{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00},{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00},{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00},{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00},{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00},{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00},{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00},{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00},{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00},{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00}},shu_d[10][8]={{0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},{0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},{0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},{0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},{0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},{0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},{0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},{0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},{0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},{0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}};while(key){for (i=0;i<32;i++){hang_1(a[i],b[i],c[i],d[i]);hang_2(a[i+32],b[i+32],c[i+32],d[i+32]);hang_3(a[i+64],b[i+64],c[i+64],d[i+64]);hang_4(a[i+96],b[i+96],c[i+96],d[i+96]);lie(i);RCK;}jianma=anjian(a,b,c,d,2);switch(jianma){case 1:case 2:case 3:{if (n!=6){n++;}mima_2[n-1]=jianma;for (i=0;i<8;i++){c[i+48+(n-1)*8]=shu_c[mima_2[n-1]][i];d[i+48+(n-1)*8]=shu_d[mima_2[n-1]][i];}}break;case 5:case 6:case 7:{if (n!=6){n++;}mima_2[n-1]=jianma-1;for (i=0;i<8;i++){c[i+48+(n-1)*8]=shu_c[mima_2[n-1]][i];d[i+48+(n-1)*8]=shu_d[mima_2[n-1]][i];}}break;case 9:case 10:case 11:{if (n!=6){n++;}mima_2[n-1]=jianma-2;for (i=0;i<8;i++){c[i+48+(n-1)*8]=shu_c[mima_2[n-1]][i];d[i+48+(n-1)*8]=shu_d[mima_2[n-1]][i];}}break;case 14:{if (n!=6){n++;}mima_2[n-1]=0;for (i=0;i<8;i++){c[i+48+(n-1)*8]=shu_c[mima_2[n-1]][i];d[i+48+(n-1)*8]=shu_d[mima_2[n-1]][i];}}break;case 4:{daiji=1;hang_1(0,0,0,0);hang_2(0,0,0,0);hang_3(0,0,0,0);hang_4(0,0,0,0);return 10;}break;case 13:{queren=1;}break;case 16:{if (o){if (n){for (i=0;i<64;i++){c[i+48]=0;d[i+48]=0;}n=0;}else{return 0;}}else{for (i=0;i<64;i++){c[i+48]=0;d[i+48]=0;}n=0;}}break;default:;}jianma=0;if (queren){for (i=0;i<6;i++){if (mima_0[i]==mima_2[i]){key=0;}else{key=1;queren=0;break;}}}}return 1;}uchar xiugai(){uchar i,key=1,jianma;uchar a[129]={0x40,0x42,0xCC,0x00,0x00,0x44,0x54,0x54,0x54,0x7F,0x54,0x54,0x54,0x44,0x40,0x00,0x88,0x68,0x1F,0xC8,0x08,0x10,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0xF8,0x07,0x10,0x90,0x10,0x11,0x16,0x10,0x10,0xD0,0x10,0x00,0x00,0x40,0x44,0x54,0x65,0xC6,0x64,0x54,0x44,0x00,0xFC,0x44,0x44,0xC4,0x42,0x40,0x00,0x10,0x8C,0x44,0x04,0xE4,0x04,0x95,0xA6,0x44,0x24,0x14,0x84,0x44,0x94,0x0C,0x00,0x04,0x84,0xE4,0x5C,0x44,0xC4,0x00,0x02,0xF2,0x82,0x82,0x82,0xFE,0x80,0x80,0x00, },b[129]={0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x15,0x15,0x15,0x55,0x95,0x7F,0x00,0x00,0x00,0x09,0x19,0x09,0xFF,0x05,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x80,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xFF,0x40,0x40,0x41,0x5E,0x40,0x40,0x70,0x4E,0x41,0x40,0x40,0x00,0x20,0x12,0x4A,0x82,0x7F,0x02,0x0A,0x92,0x60,0x1F,0x00,0x00,0xFF,0x00,0x00,0x00,0x02,0x02,0x7A,0x41,0x41,0x43,0x42,0x7E,0x42,0x42,0x42,0x43,0xF8,0x00,0x00,0x00,0x02,0x01,0x7F,0x10,0x10,0x3F,0x00,0x08,0x08,0x08,0x08,0x48,0x88,0x40,0x3F,0x00, },c[129]={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,0x40,0xC0,0x40,0x40,0x40,0x60,0x1C,0x03,0x1C,0x60,0x40,0x40,0x40,0xC0,0x40,0x00, },d[129]={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,0x00,0x00,0x41,0x39,0x26,0x10,0x10,0x08,0x08,0x10,0x26,0x39,0x41,0x00,0x00,0x00, };uchar n=0,mima_2[6]={0},queren=0;uchar shu_c[10][8]={{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00},{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00},{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00},{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00},{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00},{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00},{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00},{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00},{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00},{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00}},shu_d[10][8]={{0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},{0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},{0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},{0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},{0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},{0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},{0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},{0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},{0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},{0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}};while(key){for (i=0;i<32;i++){hang_1(a[i],b[i],c[i],d[i]);hang_2(a[i+32],b[i+32],c[i+32],d[i+32]);hang_3(a[i+64],b[i+64],c[i+64],d[i+64]);hang_4(a[i+96],b[i+96],c[i+96],d[i+96]);lie(i);RCK;}jianma=anjian(a,b,c,d,2);switch(jianma){case 1:case 2:case 3:{if (n!=6){n++;}mima_2[n-1]=jianma;for (i=0;i<8;i++){c[i+48+(n-1)*8]=shu_c[mima_2[n-1]][i];d[i+48+(n-1)*8]=shu_d[mima_2[n-1]][i];}}break;case 5:case 6:case 7:{if (n!=6){n++;}mima_2[n-1]=jianma-1;for (i=0;i<8;i++){c[i+48+(n-1)*8]=shu_c[mima_2[n-1]][i];d[i+48+(n-1)*8]=shu_d[mima_2[n-1]][i];}}break;case 9:case 10:case 11:{if (n!=6){n++;}mima_2[n-1]=jianma-2;for (i=0;i<8;i++){c[i+48+(n-1)*8]=shu_c[mima_2[n-1]][i];d[i+48+(n-1)*8]=shu_d[mima_2[n-1]][i];}}break;case 14:{if (n!=6){n++;}mima_2[n-1]=0;for (i=0;i<8;i++){c[i+48+(n-1)*8]=shu_c[mima_2[n-1]][i];d[i+48+(n-1)*8]=shu_d[mima_2[n-1]][i];}}break;case 13:{if (n==6){queren=1;}}break;case 16:{if (n){for (i=0;i<64;i++){c[i+48]=0;d[i+48]=0;}n=0;}else{return 0;}}break;default:;}jianma=0;if (queren){n=0;uchar j;j=0x03;for (i=0;i<6;i++){mima_0[i]=mima_2[i];eeprom_write(j,mima_0[i]);j++;}key=0;}}return 1;}void chenggong(){uchar i,j;uchar a[129]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x8C,0x44,0x04,0xE4,0x04,0x95,0xA6,0x44,0x24,0x14,0x84,0x44,0x94,0x0C,0x00,0x04,0x84,0xE4,0x5C,0x44,0xC4,0x00,0x02,0xF2,0x82,0x82,0x82,0xFE,0x80,0x80,0x00,0x40,0x20,0xF8,0x07,0xF0,0xA0,0x90,0x4C,0x57,0x24,0xA4,0x54,0x4C,0x80,0x80,0x00,0x04,0x84,0x84,0x84,0x84,0xFC,0x40,0x30,0xCC,0x0B,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0x08,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x08,0x00,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00, },b[129]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x7A,0x41,0x41,0x43,0x42,0x7E,0x42,0x42,0x42,0x43,0xF8,0x00,0x00,0x00,0x02,0x01,0x7F,0x10,0x10,0x3F,0x00,0x08,0x08,0x08,0x08,0x48,0x88,0x40,0x3F,0x00,0x00,0x00,0xFF,0x00,0x1F,0x80,0x92,0x52,0x49,0x29,0x24,0x12,0x08,0x00,0x00,0x00,0x00,0x7F,0x20,0x10,0x10,0x08,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00,0x80,0x60,0x1F,0x00,0x10,0x20,0x1F,0x80,0x40,0x21,0x16,0x18,0x26,0x41,0xF8,0x00,0x10,0x30,0x10,0x1F,0x08,0x88,0x48,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00, };for (j=0;j<100;j++){for (i=0;i<32;i++){hang_1(a[i],b[i],0,0);hang_2(a[i+32],b[i+32],0,0);hang_3(a[i+64],b[i+64],0,0);hang_4(a[i+96],b[i+96],0,0);lie(i);RCK;}}QINGPING;}void gaimi(){uchar i;i=mimayanzheng(1);if (i==1){if (xiugai()){QINGPING;chenggong();}}}void huanying(){uchar i;uchar a[65]={0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,},b[65]={0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,};for (i=0;i<32;i++){hang_1(0,0,0,0);hang_2(a[i],b[i],0,0);hang_3(a[i+32],b[i+32],0,0);hang_4(0,0,0,0);lie(i);RCK;}}uchar xianshi(){uchar a[129]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00, 0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00, 0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, 0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0x3E,0x22,0x22,0x22,0x22,0x22,0x3E,0x00,0x00, 0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00, 0x00,0xFE,0x22,0x5A,0x86,0x10,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x14,0x0C,0x00, },b[129]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00, 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x08,0x06,0x01,0xFF,0x01,0x06,0x40,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x41,0x00, 0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00, 0x00,0xFF,0x04,0x08,0x07,0x80,0x41,0x31,0x0F,0x01,0x01,0x3F,0x41,0x41,0x71,0x00, },c[129]={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, 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x10,0x0C,0x04,0x84,0x14,0x64,0x05,0x06,0xF4,0x04,0x04,0x04,0x04,0x14,0x0C,0x00, 0x02,0xFA,0x82,0x82,0xFE,0x80,0x40,0x20,0x50,0x4C,0x43,0x4C,0x50,0x20,0x40,0x00, 0x10,0x0C,0x24,0x24,0xA4,0x64,0x25,0x26,0x24,0x24,0xA4,0x24,0x24,0x14,0x0C,0x00, },d[129]={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, 0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x04,0x84,0x84,0x44,0x47,0x24,0x14,0x0C,0x07,0x0C,0x14,0x24,0x44,0x84,0x04,0x00, 0x08,0x18,0x48,0x84,0x44,0x3F,0x40,0x44,0x58,0x41,0x4E,0x60,0x58,0x47,0x40,0x00, 0x40,0x40,0x48,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x40,0x00, };uchar i,j,k,n;switch(mode){case 1:{for (i=0;i<32;i++){hang_1(a[i],b[i],c[i],d[i]);hang_2(a[i+32],b[i+32],c[i+32],d[i+32]);hang_3(a[i+64],b[i+64],c[i+64],d[i+64]);hang_4(a[i+96],b[i+96],c[i+96],d[i+96]);lie(i);RCK;n=anjian(a,b,c,d,2);switch(n){case 4:{daiji=1;return 10;}break;case 8:{mode++;if (mode>3){mode=1;}switch(mode){case 1:{HONG_ON;LU_OFF;LAN_OFF;}break;case 2:{HONG_OFF;LU_ON;LAN_OFF;}break;case 3:{HONG_OFF;LU_OFF;LAN_ON;}break;default:;}eeprom_write(0x20,mode);QINGPING;return 0;}break;case 12:{QINGPING;return 1;}break;default:;}}}break;case 2:{for (j=0;j<128;j++){for (k=0;k<10;k++){for (i=0;i<32;i++){n=i+j;if (n>127){n-=128;}hang_1(a[n],b[n],c[n],d[n]);n=i+j+32;if (n>127){n-=128;}hang_2(a[n],b[n],c[n],d[n]);n=i+j+64;if (n>127){n-=128;}hang_3(a[n],b[n],c[n],d[n]);n=i+j+96;if (n>127){n-=128;}hang_4(a[n],b[n],c[n],d[n]);lie(i);RCK;n=anjian(a,b,c,d,2);switch(n){case 4:{daiji=1;return 10;}break;case 8:{mode++;if (mode>3){mode=1;}switch(mode){case 1:{HONG_ON;LU_OFF;LAN_OFF;}break;case 2:{HONG_OFF;LU_ON;LAN_OFF;}break;case 3:{HONG_OFF;LU_OFF;LAN_ON;}break;default:;}eeprom_write(0x20,mode);QINGPING;return 0;}break;case 12:{QINGPING;return 1;}break;default:;}}}}}break;case 3:{for (j=0;j<50;j++){for (i=0;i<32;i++){hang_1(a[i],b[i],c[i],d[i]);hang_2(a[i+32],b[i+32],c[i+32],d[i+32]);hang_3(a[i+64],b[i+64],c[i+64],d[i+64]);hang_4(a[i+96],b[i+96],c[i+96],d[i+96]);lie(i);RCK;n=anjian(a,b,c,d,2);switch(n){case 4:{daiji=1;return 10;}break;case 8:{mode++;if (mode>3){mode=1;}switch(mode){case 1:{HONG_ON;LU_OFF;LAN_OFF;}break;case 2:{HONG_OFF;LU_ON;LAN_OFF;}break;case 3:{HONG_OFF;LU_OFF;LAN_ON;}break;default:;}eeprom_write(0x20,mode);QINGPING;return 0;}break;case 12:{QINGPING;return 1;}break;default:;}}}for (j=0;j<50;j++){for (i=0;i<32;i++){QINGPING;n=anjian(a,b,c,d,2);switch(n){case 4:{daiji=1;return 10;}break;case 8:{mode++;if (mode>3){mode=1;}eeprom_write(0x20,mode);QINGPING;}break;case 12:{QINGPING;return 1;}break;default:;}}}}break;default:;}return 0;}void chushihua_595(){DIANYUAN_ON;DAIJI_OFF;PORT_595_1=0;DDR_595_1=0xff;PORT_595_2=0;DDR_595_2=0xff;QINGPING;RCK;_delay_ms(500);}/************************************************************************/ /* 主函数*/ /************************************************************************/int main(void){uchar i=0,key=1;chushihua_595();chushihua_eeprom();chushihua_jianpan();DDR_ZHISHI=0xff;while(daiji){if (key){DAIJI_ON;DIANYUAN_OFF;HONG_OFF;LU_OFF;LAN_OFF;QINGPING;key=0;}one: i=anjian(&i,&i,&i,&i,0);if (i==4){daiji=0;key=1;DIANYUAN_ON;DAIJI_OFF;}}switch(mode){case 1:{HONG_ON;LU_OFF;LAN_OFF;}break;case 2:{HONG_OFF;LU_ON;LAN_OFF;}break;case 3:{HONG_OFF;LU_OFF;LAN_ON;}break;default:;}QINGPING;i=mimayanzheng(0);if (i==10){goto one;}for (i=0;i<100;i++){huanying();}QINGPING;while(1){switch(xianshi()){case 1:{gaimi();}break;case 10:{goto one;}break;default:;}}}。

相关文档
最新文档