ATMEGA16花样流水灯程序

合集下载

冰檐教程系列之ATMEGA16入门篇 (2)

冰檐教程系列之ATMEGA16入门篇 (2)

片内经过标定的 RC 振荡器 片内/片外中断源 6 种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及扩展的 Standby 模 式 u I/O 和封装 32 个可编程的 I/O 口 40 引脚 PDIP 封装, 44 引脚 TQFP 封装, 与 44 引脚 MLF 封装 大家有可能对上面特性和外设的某些概念不理解,不用着急,大家会在后面慢慢理解的,我会在后面详细介绍, 那现在正式踏入 ATMEGA16 的学习之旅!
然后我们按照需求和设计设置好熔丝表,将<只读>的勾去掉,点<写入>,此时熔丝就设置好了,为了防止以后 误操作,将<只读>打上勾。这样就可以烧录程序了。下面介绍熔丝的具体设置规则: BODLEVEL: BOD 电平选择 1:2.7V 电平; 0:4.0V 电平---------本开发板设置为 1 (未打勾) BODEN: BOD 功能控制 1:BOD 功能禁止;0:BOD 功能允许---------本开发板设置为 1 注:BOD(Brown-out Detection) 掉电检测电路,如果 BODEN 使能(打勾)启动掉电检测,检测电平由 BODLEVEL 决定,一旦 VCC 下降到触发电平(2.7v 或 4.0v)以下,MUC 复位。 JTAGEN: 1:JTAG 禁止; 0:JTAG 允许 ---------本开发板设置为 1 OCDEN: 1:OCD 功能禁止;0:OCD 允许---------本开发板设置为 1 注:OCDEN(On-chip Debug)片上调试使能位 JTAGEN:使能 JTAG 测试访问端口。 SPIEN: 1:SPI 下载禁止;0:SPI 下载使能---------本开发板设置为 0 CKOPT: CKOPT=0:高幅度振荡输出;CKOPT=1:低幅度振荡输出 ---------本开发板设置为 0 EEAVE: 烧录时 EEPROM 数据保留 1:不保留;0:保留---------本开发板设置为 0 BOOTRST: 复位入口选择 1:程序从 0x0000 地址开始 0:复位后从 BOOT 区执行(设置为 1) BOOTSZ1/0: 引导区程序大小及入口 00: 1024Word/0xc00; 01: 512Word/0xe00; 10: 256Word/0xf00; 11: 128Word/0xf80 本开发板设置为 00 SUT1/0: 和复位启动的一个延时有关,本开发板设置为 11 CKSEL3/0: 时钟源选择,本开发板使用的是外接 11.0592M 的晶体,所以设置为 1111 最后是锁定位,LB0 和 LB1,本开发板设置为 1,即未锁定,设置这两位需谨慎。 下面是时钟配置表:

16路流水灯8种流动方式程序

16路流水灯8种流动方式程序

基于AT89C52的16路流水灯代码#include <REG52.H>unsigned char RunMode;/**********************************SystemFuction*************************************************/void Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}unsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //0~70x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};void Display(unsigned char Value){P3 = LEDDisplayCode[Value];}void LEDFlash(unsigned char Count){unsigned char i;bit Flag;for(i = 0; i<Count;i++){Flag = !Flag;if(Flag)Display(RunMode);elseDisplay(0x10);Delay1ms(100);}Display(RunMode);}unsigned char GetKey(void){unsigned char KeyTemp,CheckV alue,Key = 0x00;CheckValue = P2&0x32;if(CheckValue==0x32)return 0x00;Delay1ms(10);KeyTemp = P2&0x32;if(KeyTemp==CheckValue)return 0x00;if(!(CheckValue&0x02))Key|=0x01;if(!(CheckValue&0x10))Key|=0x02;if(!(CheckValue&0x20))Key|=0x04;return Key;}unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;void InitialTimer2(void){T2CON = 0x00; //16 Bit Auto-Reload ModeTH2 = RCAP2H = 0xFC; //重装值,初始值TL2 = RCAP2L = 0x18;ET2=1; //定时器2 中断允许TR2 = 1; //定时器2 启动EA=1;}unsigned int code SpeedCode[]={ 1, 2, 3, 5, 8, 10, 14, 17, 20, 30,40, 50, 60, 70, 80, 90,100, 120, 140, 160,180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30void SetSpeed(unsigned char Speed){SystemSpeed =SpeedCode[Speed];}void LEDShow(unsigned int LEDStatus){P1 = ~(LEDStatus&0x00FF);P0 = ~((LEDStatus>>8)&0x00FF);}void InitialCPU(void){RunMode = 0x00;TimerCount = 0;SystemSpeedIndex = 10;P1 = 0x00;P0 = 0x00;P2 = 0xFF;P3 = 0x00;Delay1ms(500);P1 = 0xFF;P0 = 0xFF;P2 = 0xFF;P3 = 0xFF;SetSpeed(SystemSpeedIndex);Display(RunMode);}//Mode 0unsigned int LEDIndex = 0;bit LEDDirection = 1,LEDFlag = 1;void Mode_0(void){LEDShow(0x0001<<LEDIndex);LEDIndex = (LEDIndex+1)%16;}//Mode 1void Mode_1(void){LEDShow(0x8000>>LEDIndex);LEDIndex = (LEDIndex+1)%16;}//Mode 2void Mode_2(void){if(LEDDirection)LEDShow(0x0001<<LEDIndex);elseLEDShow(0x8000>>LEDIndex);if(LEDIndex==15)LEDDirection = !LEDDirection;LEDIndex = (LEDIndex+1)%16;}//Mode 3void Mode_3(void){ if(LEDDirection)LEDShow(~(0x0001<<LEDIndex));elseLEDShow(~(0x8000>>LEDIndex));if(LEDIndex==15)LEDDirection = !LEDDirection;LEDIndex = (LEDIndex+1)%16;}//Mode 4void Mode_4(void){if(LEDDirection){if(LEDFlag)LEDShow(0xFFFE<<LEDIndex);elseLEDShow(~(0x7FFF>>LEDIndex));}else{if(LEDFlag)LEDShow(0x7FFF>>LEDIndex);elseLEDShow(~(0xFFFE<<LEDIndex));}if(LEDIndex==15){LEDDirection = !LEDDirection;if(LEDDirection) LEDFlag = !LEDFlag;}LEDIndex = (LEDIndex+1)%16;}//Mode 5void Mode_5(void){if(LEDDirection)LEDShow(0x000F<<LEDIndex);elseLEDShow(0xF000>>LEDIndex);if(LEDIndex==15)LEDDirection = !LEDDirection;LEDIndex = (LEDIndex+1)%16;}//Mode 6void Mode_6(void){if(LEDDirection)LEDShow(~(0x000F<<LEDIndex));elseLEDShow(~(0xF000>>LEDIndex));if(LEDIndex==15)LEDDirection = !LEDDirection;LEDIndex = (LEDIndex+1)%16;}//Mode 7void Mode_7(void){if(LEDDirection)LEDShow(0x003F<<LEDIndex);elseLEDShow(0xFC00>>LEDIndex);if(LEDIndex==9)LEDDirection = !LEDDirection;LEDIndex = (LEDIndex+1)%10;}//Mode 8void Mode_8(void){LEDShow(++LEDIndex);}void TimerEventRun(void){if(RunMode==0x00){Mode_0();}else if(RunMode ==0x01){Mode_1();}else if(RunMode ==0x02){Mode_2();}else if(RunMode ==0x03){Mode_3();}else if(RunMode ==0x04){Mode_4();}else if(RunMode ==0x05){Mode_5();}else if(RunMode ==0x06){Mode_6();}else if(RunMode ==0x07){Mode_7();}else if(RunMode ==0x08){Mode_8();}}void Timer2(void) interrupt 5 using 3{TF2 = 0; //中断标志清除( Timer2 必须软件清标志!)if(++TimerCount>=SystemSpeed){TimerCount = 0;TimerEventRun();}}unsigned char MusicIndex = 0;void KeyDispose(unsigned char Key){if(Key&0x01){LEDDirection = 1;LEDIndex = 0;LEDFlag = 1;RunMode = (RunMode+1)%9;Display(RunMode);}if(Key&0x02){if(SystemSpeedIndex>0){--SystemSpeedIndex;SetSpeed(SystemSpeedIndex);}else{LEDFlash(6);}}if(Key&0x04){if(SystemSpeedIndex<28){++SystemSpeedIndex;SetSpeed(SystemSpeedIndex);}else{LEDFlash(6);}}}//***************************************************************************** ******main(){unsigned char Key;InitialCPU();InitialTimer2();while(1){Key = GetKey();if(Key!=0x00){KeyDispose(Key);}}}。

atmega16单片机c语言程序设计经典实例

atmega16单片机c语言程序设计经典实例

atmega16单片机c语言程序设计经典实例中括号在C语言中用于表示数组、结构体、联合体和枚举类型等的定义和使用。

在ATmega16单片机的C语言程序设计中,我们经常会用到数组和结构体,因此本文将以中括号为主题,详细介绍ATmega16单片机上C语言程序设计的经典实例,包括数组的定义和使用、结构体的定义和使用、联合体的定义和使用以及枚举类型的定义和使用。

一、数组的定义和使用数组是一种用于存储一组相同类型的数据项的集合。

在ATmega16单片机上,我们可以使用数组来存储和操作多个引脚的状态、多个传感器的数据等。

1. 数组的定义在C语言中,可以使用方括号来定义一个数组。

下面是一个例子,定义了一个长度为5的整型数组:int array[5];其中,int表示数组的元素类型,array为数组名,[5]表示数组的长度。

2. 数组的初始化数组可以在定义的同时进行初始化。

例如,可以使用大括号将数组的元素初始化为指定的值。

下面是一个例子,将数组的元素初始化为1、2、3、4、5:int array[5] = {1, 2, 3, 4, 5};3. 数组的访问可以使用下标(在中括号内)来访问数组的元素。

数组的下标从0开始,最大值为数组长度减1。

下面是一个例子,访问数组的第一个元素和最后一个元素:int firstElement = array[0];int lastElement = array[4];可以使用循环结构来遍历数组的所有元素:for (int i = 0; i < 5; i++) {访问数组的第i个元素int element = array[i];其他操作}二、结构体的定义和使用结构体是一种可以存储不同类型数据项的数据结构。

在ATmega16单片机上,结构体可以用于存储和操作多个相关的数据项,比如传感器的位置和数值等。

1. 结构体的定义在C语言中,可以使用关键字struct来定义结构体。

下面是一个例子,定义了一个包含姓名和年龄的结构体:struct Person {char name[20];int age;};其中,Person为结构体名,name和age为结构体的成员。

综合实验一——按键控制流水灯实验(查询方式)

综合实验一——按键控制流水灯实验(查询方式)

北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化1101_ ______________ 姓名:__廖文骏_ ________________学号:_ 20111002124 ____________ 指导教师:___ _____王粉花____________2013年12 月综合实验一按键控制流水灯实验(查询方式)实验学时:2学时一、实验目的1.掌握ATmega16 I/O口操作相关寄存器2.掌握CodeVision AVR软件的使用3. 复习C语言,总结单片机C语言的特点二、实验内容1. 设计一个简单控制程序,功能是8个LED逐一循环发光0.5s,构成“流水灯”。

2. 用两个按键K1和K2控制流水灯(中断方式):(1)当按下K1时,流水灯从左向右流动;(2)当按下K2时,流水灯从右向左流动。

三、实验所用仪表及设备硬件:PC机一台、AVR_StudyV1.1实验板软件:CodeVision AVR集成开发软件、SLISP下载软件四、实验原理ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。

所有这些I/O口都是双(有的为3)功能复用的。

其中第一功能均作为数字通用I/O接口使用,而复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。

这些I/O口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。

每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。

I/O口的工作方式和表现特征由这3个I/O口寄存器控制。

AVR通用I/O端口的引脚配置情况:I/O口引脚配置表表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。

基于ATmega16的流水灯设计

基于ATmega16的流水灯设计

#include <mega16.h>#include <delay.h>#define uchar unsigned char#define uint unsigned intvoid LED_on() //打开所有LED { DDRA =0XFF;PORTA =0X00;delay_ms(1000);}void LED_off() //关闭所有LED { DDRA =0XFF;PORTA = 0XFF;delay_ms(1000);}void LED_01(inti) //LED亮灭控制{PORTA =~i; //输出低电平delay_ms(100); //调用延时程序}void LED_02() //间隔点亮{PORTA=0XAA;delay_ms(100);}void LED_03() //相临点亮{PORTA=0X55; //~后内容需用括号括起来delay_ms(100);}void main(){into,i,j,k;DDRA =0XFF; //端口上拉输chu PORTA=0X00;delay_ms(100);while(1){k=1;//模式1:顺序点亮for (i = 0; i< 8; i++){LED_01(k);k=k<<1;} //顺序单个点亮LEDfor (i = 7; i>=0; i--){k=k>>1;LED_01(k);} //逆序单个点亮LED//模式2:顺序单个间隔点亮for (i = 0; i<4; i++) //顺序间隔点亮LED{k=k<<2;LED_01(k);}for (i = 4; i> 0; i --) //逆序间隔点亮LED{k=k>>2;LED_01(k);}k=k<<1;for (i = 0; i< 4; i++) //模式3:间隔点亮{k=k<<2;LED_01(k);} //间隔顺序同时点亮for (i = 4; i> 0; i--) //间隔逆序同时点亮{k=k>>2;LED_01(k);}for(o=0;o<2;o++) //模式4:相临点亮{ //相临顺序同时点亮LED_02();LED_03();}for(j=0;j<3;j++) //模式8:全部点亮熄灭{LED_on();LED_off();}}}。

Atmega16单片机实用程序

Atmega16单片机实用程序
{ for(y_address=y1;y_address
#define uint unsigned int #define SET_1(a,b) a|=bit(b) //將寄存器 a 的第 b 位置 1 #define CLR_0(a,b) a&=~bit(b) //將寄存器 a 的第 b 位清 0 #program date code:
const date[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0 X80,//共陽數據;
Atmega16 单片机实用程序
/************************************************ *********************
MCU: ATmega16 外部晶振: 8MHz 程序功能: 4*4 鍵盤識別,LED 七段數碼管顯示,密 碼功能模塊,直流電機正反轉控制
void delayms(int ms) { int i,j;
for(i=ms;i>0;i--) { for(j=1722;j>0;j 1722; }
/************************************************ ******************* 名稱:us 延時子程序 功能:延時指定的 us ************************************************* *******************/ void delayus(uchar us)
//interrupt process program void process()
{ int adcode=0; ADCSRA&=~BIT(ADIE); adcode=ADCL; adcode=(ADCH>3; y_address=y;

单片机流水灯花样程序

单片机流水灯花样程序
{
unsigned char i;
while( --d != 0)
{
for(i = 0; i < 2; i++);
}
}
void main()
{
unsigned int i,j,value,dec;
unsigned char a,c,b; //a控制延时长,b控制循环周期
TMOD=0X01;//定时器工作方式一
}
}
if(!P3_3)
while(P3_5)
{
delay(1);
value=254;
dec=1;
for(i=0;i<8;i++){
P1=value;
for(j=0;j<10;j++)
{
while(TF0!=1);
TH0=0X3C;
TL0=0XB0;
TF0=0;
}
value=value-dec;
dec=dec*2;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P3_2=P3^2;
sbit P3_3=P3^3;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
void delay (unsigned int d);
void delay (unsigned int d)
TH0=0X3C;
TL0=0XB0;
TR0=1;
while(1)
{
if(!P3_2)
while(P3_5) //当P3_5没按下时一直循环
{
delay(1);
P1_0=0;

花样流水灯程序

花样流水灯程序
}
}
{
time=0;
miao++;
miao=miao%10;//0-9
display();//数码管显示函数
}
}
void int_T0()//定时器T0初始化
{
EA=1;//打开总中断
ET0=1;//允许T1中断
TMOD=TMOD&0Xf0|0X01;//配置模式为定时模式(C/T=0),16位自动重装
TH0=(65536-500)/256;//50ms
TL0=(65536-500)%256;//从15536开始计数,到65536溢出,一共计50000个脉冲
TR0=1;//允许计数
}
void fuwu_int_T0(void) interrupt 1//定时器0的优先级比定时器1的优先级高
{//它先要执行完定时器0的服务程序,才能再去执行定时器1的服务程序
{
P0=a;
a=a>>1;
a=a|0x01;
delay_ms((num*100)+1);
}
for(i=0;i<2;i++)//8个led闪烁两次
{
P0=0Xff;//led全部消灭
delay_ms((num*100)+1);
P0=0x00;//led灯全部点亮
delay_ms((num*100)+1);
{
if(pwm1==1)
{
pwm1=1;
flag=0;
}
pwm1--;
}
}
if(num1>64)
{
num1=0;
}
if(num1<=pwm1)

ATmega16实验板使用说明书

ATmega16实验板使用说明书

Atmega16实验板说明书硬件资料介绍 (2)调试软件安装 (3)编译环境的使用 (8)建立新的工程 (15)资料和例程 (18)注意:使用时先把调试器和开发板用数据线连起来,再插上USB线;停止使用时应先断开USB线切断电源,才能拔下数据线,否则可能会损坏调试器。

硬件资料介绍实验套件共分3部分,开发板,调试器,数据线(1根usb线,1根串口线)。

开发板文件夹图片/原理图里面有开发板的原理图图片和protel dxp 原理图文件。

如果开发板是没有焊好的套件可以对照元器件参数表和已焊好的图片(图片文件夹里有)先把开发板焊接完成。

焊接完成后先用万用表测量一下5V 与GND 之间是否短路,确定没有短路之后,插上USB 线接到电脑上,弹上开关SW1电源指示灯D1亮,说明电源已接通。

调试器调试软件安装要实现开发调试需要安装三个软件:PL2303驱动,avr studio 4,WinAVR。

这三个软件都在软件这个文件夹里。

首先安装usb驱动PL2303,如图点下一步。

点完成就可以了。

然后把调试器和电脑通过USB线联机。

如图这时调试器上的电源指示灯和信号指示灯都亮,而且电脑开始发现新硬件,新硬件可以安装使用。

这说明已经建立起连接,然后右击我的电脑—>属性—>硬件—>设备管理器,打开设备管理器界面,点开端口(COM和LPT)的“+”如图。

其中的Prolific usb-to-Serial Comm Port(COMx)就是调试器的usb设备。

端口号是多少根据个人电脑情况可能有差异。

下面我们要修改端口号,因为调试器里只提供COM1-COM3的通讯。

双击Prolific usb-to-Serial Comm Port(COMx)选项,弹出端口设置对话框,如图然后选端口设置—>高级,在端口号中选一个没有被占用且3以内的COM口,我的电脑上没有串口,我选的是COM1,如图然后点确定,重新打开设备管理器再看一下端口情况。

个人总结的AVR的ATMEGA16L单片机程序

个人总结的AVR的ATMEGA16L单片机程序

ATMAGE 16 的C语言程序ATMAGE 16 的C语言程序 (1)一、PB0 口的PB0.1 LED 发光管闪烁的程序: (3)二、PA0、PB0、PC0口的LED 发光管闪烁的程序: (5)三、I/O口的输入与输出 (6)四、跑马灯 (8)五、数码管计数显示设计 (10)六、控制直流电机正反转 (16)七、单片机的定时器(T/C0)应用 (20)AVR原理图 (24)一、PB0 口的PB0.1 LED 发光管闪烁的程序:#include <avr/io.h>int main( void ){unsigned char i, j, k,led=0;DDRB=0xFF; /* all outputs */while (1){if(led)PORTB|=0X01; /* |使最后一位为1 */elsePORTB&=0XFE; /*&最后一位为0 */ led=!led;//延时for (i=0; i<255; i++)for(j=0; j<255;j++)k++;}}/////////////////////////////////////////////////////////////// #include <avr/io.h>int main( void ){unsigned char i, j, k,led=0;DDRB=0xFF; /* all outputs */while (1){if(led)PORTB=0Xfe;elsePORTB=0Xff;led=!led;for (i=0; i<255; i++) //延时for(j=0; j<255;j++)k++;}}二、PA0、PB0、PC0口的LED 发光管闪烁的程序:#include <avr/io.h>int main( void ){unsigned char i, j, k,led=0;DDRA=0xFF;//为输出DDRB=0xFF;DDRC=0XFF;while (1){if(led){PORTA|=0XFF;PORTB|=0XFF;PORTC|=0XFF;}else{PORTA&=0X00;PORTB&=0X00;PORTC&=0X00;}led=!led;//取反////////////延时////////////////for (i=0; i<255; i++)for(j=0; j<255;j++)k++;}}三、I/O口的输入与输出#include <avr/io.h>///////////////////延时us//////////////////void delay_us(int t){dot--;while(t>1);}///////////////////延时ms///////////////// void delay_ms(unsigned int t){while(t!=0){delay_us(1142);t--;}}///////////////////主程序/////////////////////int main(void){DDRA = 0xff; /* all outputs */ DDRB = 0xff; /* all outputs */ DDRC = 0xff; /* all outputs */PORTA=0XFF;PORTB=0XFF;PORTC=0XFF;while(1){//***IO口输出低电平有效,如:0X01为十六进制数,二进制表示为00000001B,再取反////////A口输出//////PORTA=~0X01; // ~表示取反delay_ms(100);//延时N秒PORTA=~0X02;delay_ms(100);PORTA=~0X04;delay_ms(100);PORTA=~0X08;delay_ms(100);PORTA=~0X10;delay_ms(100);PORTA=~0X20;delay_ms(100);PORTA=~0X40;delay_ms(100);PORTA=~0X80;delay_ms(100);PORTA=0X00;//循环结束全亮////////B口输出//////PORTB=~0X01;delay_ms(100);PORTB=~0X02;delay_ms(100);PORTB=~0X04;delay_ms(100);PORTB=~0X08;delay_ms(100);PORTB=~0X10;delay_ms(100);PORTB=~0X20;delay_ms(100);PORTB=~0X40;delay_ms(100);PORTB=~0X80;delay_ms(100);PORTB=0X00;////////C口输出//////PORTC=~0X01;delay_ms(100);PORTC=~0X02;delay_ms(100);PORTC=~0X04;delay_ms(100);PORTC=~0X08;delay_ms(100);PORTC=~0X10;delay_ms(100);PORTC=~0X20;delay_ms(100);PORTC=~0X40;delay_ms(100);PORTC=~0X80;delay_ms(100);PORTC=0X00;}}四、跑马灯#include <avr/io.h>#define uchar unsigned char#define uint unsigned intvoid delayms(uint i){uint j;for(;i!=0;i--){for(j=8000;j!=0;j--);}}void horse(uchar i){switch (i){case 1:PORTB=0X01;break; case 2:PORTB=0X03;break; case 3:PORTB=0X07;break; case 4:PORTB=0X0f;break; case 5:PORTB=0X1f;break;case 6:PORTB=0X3f;break; case 7:PORTB=0X7f;break; case 8:PORTB=0Xff;break; default:break;}}void main(void){uchar i;DDRB=0XFF;PORTB=0XFF;PORTB=0X00;delayms(10);while(1){for(i=1;i<9;i++){horse(i);delayms(10);}for(i=7;i!=0;i--){horse(i);delayms(10);}}五、数码管计数显示设计1、两个按键PB0和PB1分别控制加减。

单片机三个引脚控制16路流水灯

单片机三个引脚控制16路流水灯

单⽚机三个引脚控制16路流⽔灯我们先来看下最终的效果我们先⽤单⽚机按照74HC595⼿动分解的例⼦,来实现我们想要的结果。

⾸先,我们让16个LED灯交叉亮起来代码部分:int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);}// 我们先让16个灯交叉亮void loop(){while(1){digitalWrite(STCP_Pin, LOW);// 1digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 2digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 3digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 4digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 5digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 6digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 7digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 8digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 9digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 10digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 11digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 12digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 13digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 14digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);// 15digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);// 16digitalWrite(SHCP_Pin, LOW);digitalWrite(DS_Pin, HIGH);digitalWrite(SHCP_Pin, HIGH);digitalWrite(STCP_Pin, HIGH);}}运⾏效果然后我们再把代码简化⼀下,使其看起来更简洁,实⽤int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);digitalWrite(STCP_Pin, LOW);}void loop(){unsigned char LED_Data;while(1){LED_Data = 0xAA;// 第⼀个8位digitalWrite(STCP_Pin, LOW);for(int i=0; i<8; i++){if(LED_Data&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);LED_Data <<=1;}// 第⼆个8位LED_Data = 0xAA;for(int i=0; i<8; i++){if(LED_Data&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);LED_Data <<=1;}digitalWrite(STCP_Pin, HIGH);delay(1000);}}我们稍微改变下,让LED灯按照我们的意思⼯作,封装⼀下函数,然后让中间四个灯亮起来int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;void HC595_Write(unsigned char data1, unsigned char data2);void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);}void loop(){unsigned char LED_Data1 = 0x03;unsigned char LED_Data2 = 0xC0;while(1){HC595_Write(LED_Data1, LED_Data2);delay(1000);}}void HC595_Write(unsigned char data1, unsigned char data2) {// 第⼀个8位digitalWrite(STCP_Pin, LOW);for(int i=0; i<8; i++){if(data1&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);data1 <<=1;}// 第⼆个8位for(int i=0; i<8; i++){if(data2&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);data2 <<=1;}digitalWrite(STCP_Pin, HIGH);}中间四个LED灯亮的效果然后我们连贯起来搞个流⽔的灯玩玩int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;unsigned char LED_Data1[8] = { 0x01, 0x02, 0x04, 0x08,0x10, 0x20, 0x40, 0x80};unsigned char LED_Data2[8] = { 0x01, 0x02, 0x04, 0x08,0x10, 0x20, 0x40, 0x80};void HC595_Write(unsigned char data1, unsigned char data2); void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);}void loop(){while(1){for(int i=0; i<8; i++){HC595_Write(0x00, LED_Data1[i]);delay(1000);}for(int i=0; i<8; i++){HC595_Write( LED_Data2[i], 0x00);delay(1000);}}}void HC595_Write(unsigned char data1, unsigned char data2){// 第⼀个8位digitalWrite(STCP_Pin, LOW);for(int i=0; i<8; i++){if(data1&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);data1 <<=1;}// 第⼆个8位for(int i=0; i<8; i++){if(data2&0x80){ digitalWrite(DS_Pin, HIGH);}else { digitalWrite(DS_Pin, LOW); }digitalWrite(SHCP_Pin, LOW);digitalWrite(SHCP_Pin, HIGH);data2 <<=1;}digitalWrite(STCP_Pin, HIGH);}最终的流⽔灯实验效果当然arduino本⾝⾃带了移位函数,同样可以达到效果int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5;unsigned char LED_Data1[8] = { 0x01, 0x02, 0x04, 0x08,0x10, 0x20, 0x40, 0x80};unsigned char LED_Data2[8] = { 0x01, 0x02, 0x04, 0x08,0x10, 0x20, 0x40, 0x80};void setup (){pinMode(STCP_Pin,OUTPUT);pinMode(SHCP_Pin,OUTPUT);pinMode(DS_Pin,OUTPUT);}void loop(){for(int a=0; a<8; a++){digitalWrite(STCP_Pin,LOW);shiftOut(DS_Pin,SHCP_Pin,MSBFIRST,LED_Data1[a]);shiftOut(DS_Pin,SHCP_Pin,MSBFIRST,0x00);digitalWrite(STCP_Pin,HIGH);delay(500);}for(int a=0; a<8; a++){digitalWrite(STCP_Pin,LOW);shiftOut(DS_Pin,SHCP_Pin,MSBFIRST,0x00);shiftOut(DS_Pin,SHCP_Pin,MSBFIRST,LED_Data2[a]);digitalWrite(STCP_Pin,HIGH);delay(500);}}流⽔的延时500ms的效果总结:1、复杂的功能,深⼊分解后背后的原理其实还是挺简单的;2、我们绝⼤部分时候都在造“轮⼦“,殊不知更优秀的“轮⼦”已经造好了;知晓“轮⼦”的由来,然后造出更优秀的“轮⼦”给⾃⼰⽤也是单⽚机学习路上的⼀项重要技能。

花式流水灯c语言程序

花式流水灯c语言程序

delay(10000); //延时子程序调用
}
/*流水灯从右向左快速流动*/
for(i=7;i>0;i--) //for 语句判断条,i>0 成立时,执行大括号里面程序
{
P2=table[i]; //P2 口对应取值,八个灯的状态
delay(10000); //延时子程序调用
}
/*流水灯间隔闪亮*/
#include<reg52.h> 义
Байду номын сангаас
//52 单片机头文件,一般不要改动,里面包含特殊功能寄存器的定
#define uchar unsigned char //将 unsigned char 定义为 uchar,简化输写。提高编程速度 #define uint unsigned int //将 unsigned char 定义为 uint,简化输写。提高编程速度
/*主程序*/
void main()
{
uchar i;
//定义一个无符号字符变量。
while(1)
//做一个死循环,让程序永远在 while 下面的大括号里面运行。
{
/*流水灯从左向右快速流动*/
for(i=0;i<8;i++) //for 语句判断条,i<8 成立时,执行大括号里面程序
{
P2=table[i]; //P2 口对应取值,八个灯的状态
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//定义八个灯的工作状态。
/*延时子程序*/ void delay(uint time) {
while(--time); 句。 }

AVRmega16基本程序

AVRmega16基本程序

枯藤老树昏鸦,小桥流水人家,古道西风瘦马。

夕阳西下,断肠人在天涯。

/*********************************************************************MCU: ATmega16外部晶振:8MHz程序功能:4*4鍵盤識別,LED七段數碼管顯示,密碼功能模塊,直流電機正反轉控制AD轉換模塊, 模擬比較器,外部中斷應用,12864液晶,C/T0硬件設計:參考PROTUES硬件仿真電路調試:所有程序主要功能都軟硬件仿真通過,實際使用時要根據需要加入可靠性。

編譯環境:ICC AVRDesign by: wdw********************************************************************/#include<iom16v.h>#include<macros.h>#include<math.h>#define uchar unsigned char#define uint unsigned int#define SET_1(a,b) a|=bit(b) //將寄存器a的第b位置1#define CLR_0(a,b) a&=~bit(b) //將寄存器a的第b位清0#program date code:const date[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,//共陽數據;0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};#program duan code:const duan[]={0x20,0x10,0x08,0x04,0x02,0x01}; //段選;char adchannel;int dispbuf[]={0,0,0,0,0,0,}; //顯示緩存;uchar securbuf[]={0,0,0,0,0,}; //5位密碼緩存;/********************************************************************名稱:ms延時子函數功能:延時指定的ms*********************************************************************/void delayms(int ms){int i,j;for(i=ms;i>0;i--){for(j=1722;j>0;j--); //8M时改为1141;} //12M时为1722;}/*******************************************************************名稱:us延時子程序功能:延時指定的us********************************************************************/void delayus(uchar us){for(us;us<0;us--);{} //12M时单位T为1.45US}/********************************************************************单参数LED 显示硬件连接:数据PORTC-----D7~D0段选PORTD-----D7~D4*********************************************************************/void LEDShow(long int shownum){uchar i,tmp,curnum;long int tmpnum;tmp = 0xfb;tmpnum = shownum;for(i=0;i<6;i++) //显示的位数为5{curnum = tmpnum % 10;tmpnum = tmpnum / 10;PORTD = tmp;PORTC = date[curnum];delayus(1);tmp = (tmp << 1) + 0x01; //补上移位造成的最右位为0;}}/*******************************************************名稱:七段LED共陽數碼管,在指定数位上显示指定的数,双参数功能:在指定的位置上顯示制定的數;硬件連接:PC口複用控制段選和位選,有2片573進行數據鎖存;*******************************************************/void show(uchar dat,uchar num) //六位七段數碼管顯示程序OK;{PORTC=date[dat];PORTD|=BIT(0);PORTD&=~BIT(0); //送數據;delayus(2);PORTC=0X00;delayus(1);PORTC=duan[num];PORTD|=BIT(1);delayus(2);PORTD&=~BIT(1);delayus(2);} //送選通信號;/************************************************************名稱:MCU端口初始化功能:設置MCU端口初始方向為輸出初始狀態為低*************************************************************/ void Gpioinit0(){DDRA=0XFF;PORTA=0X00;DDRB=0XFF;PORTB=0X00;DDRC=0XFF;PORTC=0X00;DDRD=0XFF;PORTD=0X00;}/*********************************************************** 名稱:MCU端口初始化功能:設置MCU端口初始為輸出初始狀態為高************************************************************/ void Gpioinit1(){DDRA=0Xff;PORTA=0XFF;DDRB=0xff;PORTB=0XFF;DDRC=0xff;PORTC=0XFF;DDRD=0xff;PORTD=0XFF;}/**************************************************名稱:單端口測試輸入:測試PC的任意端口號0~7功能:週期改變一個端口的電平**************************************************/void IOtest(uchar num){DDRC|=BIT(num);// while(1)// {PORTC|=BIT(num);delayms(50);PORTC&=~BIT(num);delayms(50);// }}/*************************************************名稱:按鍵動作檢測子程序。

ATmega16计算机程序

ATmega16计算机程序

//log(10)运算
{sum=100000*log10(x);q=3;jieguo(sum);
suml=sum;liansuan=1;}/*当做log(10)时将其结果扩大100000倍,在显示时
将小数点向左移动5位,从而保留5位小数*/
}
if(m==45)
//减法运算
{if(p==1)
{if(x<=y)
{
unsigned char i,j,k,m=0xEF;
DDRA = 0xF0;
PORTA = 0xEF;
for (j=0;j<4;j++)
{ k = PINA&0x0f;
// 读行值,低4位
i=(m&0xf0)|k;
// 键码=列值(m的高4位)+ 行值
if (k!=0x0f) break;
// 若行值=0XFF, 无键按下
//(x的y次方)幂运算
{sum=1;
for(n=0;n<y;n++)
sum*=x;
jieguo(sum);
suml=sum;liansuan=1;}
}
if(m==43)
{if(p==1)
//加法运算
{sum=x+y;jieguo(sum);
suml=sum;liansuan=1;}
if(p==2)
lcd[5]=lcd[5]+0x80; //添加小数点
}
for(i=0;i<8;i++)
spi_xie(i+1,lcd[7-i]); //送显示数据到7219
}
/*键盘扫描函数, 读取当前键盘的状态, 有按键按下返回相应按键值

Atmega16的室内照明控制系统电路设计

Atmega16的室内照明控制系统电路设计

Atmega16的室内照明控制系统电路设计本文提出了一种改进的基于智能检测技术的室内照明系统设计方案,克服了传统照明系统的不足。

采用热释人体红外以及温度传感系统,将室内是否有人和周围环境光亮度是否充足相结合,利用Atmega16单片机进行信号的处理、分析和决策,使照明设备控制更加精确,具有操作简单、人性化强等特点。

经过试验验证,系统性能可靠、稳定。

照明是室内环境设计的重要组成部分,光照的作用,对人的视觉功能尤为重要。

而长期以来,将自然光与室内智能照明系统相结合的方式一直被设计者忽略,大部分的室内场所仍沿用单一的传统照明方式,在一些公用场所的照明设备长时间打开,不仅导致能源浪费,而且加速了设备老化。

1系统结构和工作原理1.1系统结构室内照明控制系统的设计主要采用Atmega16单片机作为MCU控制器,与LED显示技术、光感技术、按键采集与处理技术、红外线传感技术、延时技术等技术相结合,然后实现室内照明设备的智能控制,其系统结构如图1所示。

图1室内照明控制方案图1.2工作原理(1)单片机通过继电器对室内照明设备的开关进行控制。

(2)照明设备周围的光照检测电路对设备周边亮度进行检测,信号通过环境亮度传感模块到达单片机,如果亮度能够满足生活需要,单片机则通过继电器保持照明设备的关闭状态,如果亮度不够,则由单片机继续检测是否采集到人体热释电感信号。

(3)如果被动式热释电红外传感器检测到人体信号,单片机则立刻控制照明设备,将其打开;如果没有检测到人体信号,单片机则保持照明设备的关闭状态。

(4)在照明设备打开的情况下,如果单片机在某一时刻没有检测到人体信号,则延长一段时间后将照明设备关闭,如果延时期间检测到人体信号则结束延时,照明设备继续打开。

(5)可以根据应用照明设备场合以及使用人群的不同,将单片机PA0~PA3引脚设置为不同的延时时间值。

(6)在照明电路正常工作时,只要按下强制按钮,就可以对照明设备进行强制控制,通过该按钮也可以使电路切换到自动控制状态。

mage16实例遥控激光灯

mage16实例遥控激光灯

遥控激光灯设计制作摘要遥控激光灯设计制作是一个很有实际应用价值项目,用很小的激光灯为显示,ATmega16L单片机为控制核心,加以遥控器控制和电源电路以及其他电路构成。

遥控激光灯是一个很好的应用单片机技术的作品。

系统所用的单片机采用性能优秀的AVR单片机的ATMEGA16L芯片,由mega16通过IO口控制激光灯的亮与不亮来显示出不同的投影图;而不同的闪烁时通过遥控来控制。

自制了单片机电路板和程序下载ISP线,能够顺利完成激光灯的工作。

同时还可以扩展控制激光灯工作时的花样,可以改变程序文件来变激光灯闪烁的花样。

所完成的作品可以直接应用于单片机的教学之中,使自己的毕业设计有了实在的应用价值。

本作品今后可以向商品化方面进行开发,以使之有更大的价值。

关键词:激光灯;AVR单片机;遥控器THE DESIGN OF LASER LIGHT CONTROLLED BYTELECONTROLLERABSTRACTThe design of laser light controlled by telecontroller is a very practical application projects, using a small laser light for the display, ATmega16L microcontroller as the control center to remote control and power circuits and other circuits.Laser light is a good remote control application microcontroller technology works. System used in the SCM performance AVR microcontroller A TMEGA16L good chip, by the mega16 IO port to control laser light through the bright light and not to show a different projection; and different blinking through the remote control. Home of the microcontroller circuit board and program download ISP lines, to the successful completion of the work of laser light. Control also extends the work of the pattern of laser light, can change the program file to change the pattern of laser lights flashing. The completed work can be directly applied in the teaching of SCM, so that their graduates have a real design value. This works will be developing to the commercialization of the future and it could be developed to make greater value.Key words: Laser light; AVR microcontroller; Telecontroller目录1前言------------------------------------------ 错误!未定义书签。

基于atmega16的T1计时器交通灯设计

基于atmega16的T1计时器交通灯设计
/* tccr1计数器程序*/
/************************************************************************/
void chushihua_tccr1()
{
cli();
TCCR1B|=BIT(WGM12);//CTC模式
OCR1A=31250;
PORTD|=BIT(2);//上拉电阻
cli();//关闭全局中断
GICR|=BIT(INT0);//使能INT0中断
sei();//使能全局中断
}
SIGNAL(SIG_INTERRUPT0)//掉电模式
{
static int k=1;
if (k==1)
{
k=-1;
_delay_ms(1000);
/*常用头文件及宏定义*/
/************************************************************************/
#include <avr/io.h>
#include <util/delay.h>//延时文件
#include <avr/sleep.h>//睡眠文件
/*掉电模式积木块*/
/************************************************************************/
/*引脚说明*/
/*PD2 INT0中断*/
void chushihua_diaodian()//掉电模式初始化
{
DDRD&=~(BIT(2));//INT0输入
/*交通灯程序*/
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PORTC^=0X03;
PORTD^=0X03;
_delay_ms(T);
PORTA^=0X05;
PORTB^=0X05;
PORTC^=0X05;
PORTD^=0X05;
_delay_ms(T);
PORTA^=0X0A;
PORTB^=0X0A;
#include<avr/io.h>
#include<avr/delay.h>
main()
{
#define T 500
#define W 50
int i;
DDRA=0XFF;
DDRB=0XFF;
DDRC=0XFF;
DDRD=0XFF;
while(1)
{
for(i=1;i<3;i++)//左右闪烁
PORTC^=0X05;
PORTD^=0X05;
_delay_ms(T);
PORTA^=0X0A;
PORTB^=0X0A;
PORTC^=0X0A;
PORTD^=0X0A;
_delay_ms(T);
PORTA^=0X14;
PORTB^=0X14;
PORTC^=0X50;
PORTD^=0X50;
_delay_ms(T);
PORTA^=0XA0;
PORTB^=0XA0;
PORTC^=0XA0;
PORTD^=0XA0;
_delay_ms(T);//
PORTA^=0X03;
PORTB^=0X03;
PORTD^=0X0C;
_delay_ms(T);
PORTA^=0X18;
PORTB^=0X18;
PORTC^=0X18;
PORTD^=0X18;
_delay_ms(T);
PORTA^=0X30;
PORTB^=0X30;
PORTC^=0X30;
}
}
PORTC^=0X03;
PORTD^=0X03;
_delay_ms(T);
}
for(i=1;i<3;i++)
{
PORTA=0XFF;
PORTB=0x81;
PORTC=0x81;
PORTD=0XFF;
_delay_ms(T);
PORTD^=0X03;
_delay_ms(T);
PORTA^=0X06;
PORTB^=0X06;
PORTC^=0X06;
PORTD^=0X06;
_delay_ms(T);
PORTA^=0X0C;
PORTB^=0X0C;
PORTC^=0X0C;
PORTA&=~0x04;
PORTB|=0X08;
PORTB|=0x40;
_delay_ms(W);
PORTA&=~0x08;
PORTD|=0x08;
_delay_ms(W);
PORTB&=~0x08;
PORTD|=0X10;
_delay_ms(W);
PORTC^=0X0A;
PORTD^=0X0A;
_delay_ms(T);
PORTA^=0X14;
PORTB^=0X14;
PORTC^=0X14;
PORTD^=0X14;
_delay_ms(T);
PORTA^=0X28;
PORTB^=0X28;
PORTD^=0X30;
_delay_ms(T);
PORTA^=0X60;
PORTB^=0X60;
PORTC^=0X60;
PORTD^=0X60;
_delay_ms(T);
PORTA^=0XC0;
PORTB^=0XC0;
PORTC^=0XC0;
PORTC^=0X28;
PORTD^=0X28;
_delay_ms(T);//
PORTA^=0X03;
PORTB^=0X03;
PORTC^=0X03;
PORTD^=0X03;
_delay_ms(T);
PORTA^=0X05;
PORTB^=0X05;
}
for(i=1;i<3;i++)//向右单排走
{
PORTA=0X01;
PORTB=0X01;
PORTC=0X01;
PORTD=0X01;
_delay_ms(T);
PORTA^=0X03;
PORTB^=0X03;
PORTC^=0X03;
PORTC|=0x08;
_delay_ms(W);//
PORTB|=0x20;
PORTD&=~0x20;
_delay_ms(W);
PORTC|=0x20;
PORTD&=~0x40;
_delay_ms(W);
PORTC^=~0x50;
/////////////////
PORTD^=0XC0;
_delay_ms(T);
}
{//向右双排走并存档
PORTA=0X03;
PORTB=0X03;
PORTC=0X03;
PORTD=0X03;
_delay_ms(T);
PORTA^=0X05;
PORTB^=0X05;
PORTC&=~0x08;
PORTD|=0x20;
_delay_ms(W);
PORTD^=0x48;
_delay_ms(W);//
PORTC|=0X40;
PORTD&=~0x10;
_delay_ms(W);
PORTC|=0X40;
PORTD&=~0x10;
PORTC^=0X14;
PORTD^=0X14;
_delay_ms(T);
PORTA^=0X28;
PORTB^=0X28;
PORTC^=0X28;
PORTD^=0X28;
_delay_ms(T);
PORTA^=0X50;
PORTB^=0X50;
{
PORTA=0XAA;
PORTB=0XAA;
PORTC=0XAA;
PORTD=0XAA;
_delay_ms(T);
PORTA^=0XFF;
PORTB^=0XFF;
PORTC^=0XFF;
PORTD^=0XFF;
_delay_ms(T);
PORTC^=0X05;
PORTD^=0X05;
_delay_ms(T);
PORTA^=0X0A;
PORTB^=0X0A;
PORTC^=0X0A;
PORTD^=0X0A;
_delay_ms(T);//
PORTA^=0X03;
PORTB^=0X03;
PORTA|=0x03;
PORTC=0X08;
_delay_ms(W);
PORTA^=;
_delay_ms(W);
PORTA^=0x0A;
_delay_ms(W);
PORTA&=~0x04;
PORTB|=0X08;
_delay_ms(W);
PORTA&=0x00;
PORTB^=0xFF;
PORTC^=0xFF;
PORTD&=0x00;
_delay_ms(T);
}
PORTA=0X00;
PORTB=0X00;
PORTC=0X00;
PORTD=0X00;
_delay_ms(W);
相关文档
最新文档