AVR单片机程序3458.docx
/* 文件名 : 闪烁灯.c * 杜邦线接法:用单条杜邦线把PD.0和J38的1端相连接。*/#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee LED11 PORTDD|=0XXFE /LED=1 LLED不亮#definee LED00 PORTDD&=0XFFE /LED=0 LLED发光int maiin(voiid) DDRRD = 0x01; /PD0定定义为输出,PPD的其他端端口为输入。while(1)LED1; _delaay_ms(500);LED0; _delaay_ms(500);/* 文件名 : 闪烁灯灯2.c* 创建人 : 东流,2012年2月10日* 版本号 : 1.00* 杜邦线接法法:用8针杜杜邦线把PDD和J38的的1-8连连接(PD00对应J388的1端)。 用杜杜邦线把PBB0对应J338的9端。 用杜杜邦线把PBB1对应J338的10端端。 用杜杜邦线把PBB2对应J338的11端端。 用杜杜邦线把PBB3对应J338的12端端。*/#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>int maiin(voiid) DDRD = 0xfff;DDRB = 0x00f; while(1)/*北面的的三个LEDD亮*/PORTDD = 0xxf8;PORTBB = 0xxff; _delaay_ms(300);/*东面的的三个LEDD亮*/PORTDD = 0xxc7;PORTBB = 0xxff; _delaay_ms(300);/*南面的的三个LEDD亮*/PORTDD = 0xx3f;PORTBB = 0xxfe;_delaay_ms(300);/*西面的的三个LEDD亮*/PORTDD = 0xxff;PORTBB = 0xxf1;_delaay_ms(300);/*北面的的两个LEDD亮,中间一一个不亮*/PORTDD = 0xxfa;PORTBB = 0xxff;_delaay_ms(300);/*东面的的两个LEDD亮,中间一一个不亮*/PORTDD = 0xxd7;PORTBB = 0xxff;_delaay_ms(300);/*南面的的两个LEDD亮,中间一一个不亮*/PORTDD = 0xxbf;PORTBB = 0xxfe;_delaay_ms(300);/*西面的的两个LEDD亮,中间一一个不亮*/PORTDD = 0xxff;PORTBB = 0xxf5;_delaay_ms(300);/*12个个LED全亮亮*/PORTDD = 0xx00;PORTBB = 0xxf0;_delaay_ms(200);/*12个个LED全灭灭*/PORTDD = 0xxff;PORTBB = 0xxff;_delaay_ms(200);/*12个个LED全亮亮*/PORTDD = 0xx00;PORTBB = 0xxf0;_delaay_ms(200);/*12个个LED全灭灭*/PORTDD = 0xxff;PORTBB = 0xxff;_delaay_ms(200);_delaay_ms(500); /延延时0.5秒秒/* 文件名 : 闪烁灯灯2.c* 描述 : 在在LED上根根据要求,进进行不同的显显示。 * 杜邦线接法法:用8针杜杜邦线把PDD和J38的的1-8连连接(PD00对应J388的1端)。 用杜杜邦线把PBB0对应J338的9端。 用杜杜邦线把PBB1对应J338的10端端。 用杜杜邦线把PBB2对应J338的11端端。 用杜杜邦线把PBB3对应J338的12端端。*/#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee uchaar unssignedd charrint maiin(voiid)uchar i, teemp;DDRD = 0xfff;DDRB = 0x00f;PORTB = 0xfff;PORTD = 0xfff;while(1)temp = 0xff7;for(ii=0; ii<4; ii+)PORTTB = ttemp;/把值赋赋给P2口_dellay_mss(100);/延时(10毫秒 * j)秒秒tempp = teemp >>> 1;/值右移移一位tempp = teemp | 0x08;PORTBB = 0xxff;temp = 0x77f;for(ii=0; ii<8; ii+)PORTTD = ttemp;/把值赋赋给P1口_dellay_mss(100);/延时(10毫秒 * j)秒秒tempp = teemp >>> 1;/值右移移一位tempp = teemp | 0x80;PORTDD=0xfff;/* 文件名 : 闪烁灯灯2.c * 杜邦线接法法:用8针杜杜邦线把PDD和J38的的1-8连连接(PD00对应J388的1端)。用杜邦线把PPB0对应JJ38的9端端。用杜邦线线把PB1对对应J38的的10端。用杜邦线把PPB2对应JJ38的111端。用杜邦邦线把PB33对应J388的12端。*/#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee uchaar unssignedd charr/定义北面的的三个灯的两两灭#definee LED11L PORTTD&=0XXFE /LEDD1=0 LED11红灯发光#definee LED22L PORTTD&=0XXFD /LEDD2=0 LED22黄灯发光#definee LED33L PORTTD&=0XXFB /LEDD3=0 LED33绿灯发光#definee LED11M PORTTD|=00XFE /LEDD1=1 LED红红灯不亮#definee LED22M PORTTD|=00XFD /LEDD2=1 LED黄黄灯不亮#definee LED33M PORTTD|=00XFB /LEDD3=1 LED绿绿灯不亮/定义东面的的三个灯的两两灭#definee LED44L PORTTD&=0XXF7 /LEDD4=0 LED44红灯发光#definee LED55L PORTTD&=0XXEF /LEDD5=0 LED55黄灯发光#definee LED66L PORTTD&=0XXDF /LEDD6=0 LED66绿灯发光#definee LED44M PORTTD|=00XF7 /LEDD4=1 LED红红灯不亮#definee LED55M PORTTD|=00XEF /LEDD5=1 LED黄黄灯不亮#definee LED66M PORTTD|=00XDF /LEDD6=1 LED绿绿灯不亮/定义南面的的三个灯的两两灭#definee LED77L PORTTD&=0XXBF /LEDD7=0 LED77红灯发光#definee LED88L PORTTD&=0XX7F /LEDD8=0 LED88黄灯发光#definee LED99L PORTTB&=0XXFE /LEDD9=0 LED99绿灯发光#definee LED77M PORTTD|=00XBF /LEDD7=1 LED红红灯不亮#definee LED88M PORTTD|=00X7F /LEDD8=1 LED黄黄灯不亮#definee LED99M PORTTB|=00XFE /LEDD9=1 LED绿绿灯不亮/定义西面的的三个灯的两两#definee LED110L PORTTB&=0XXFD /LEDD10=0 LED110红灯发光光#definee LED111L PORTTB&=0XXFB /LEDD11=0 LED111黄灯发光光#definee LED112L PORTTB&=0XXF7 /LEDD12=0 LED112绿灯发光光#definee LED110M PORTTB|=00XFD /LEDD10=1 LED红红灯不亮#definee LED111M PORTTB|=00XFB /LEDD11=1 LED黄黄灯不亮#definee LED112M PORTTB|=00XF7 /LEDD12=1 LED绿绿灯不亮int maiin(voiid) unssignedd charr i;DDRD = 0xfff;/PD口口定义为输出出DDRB = 0x00f;/PB口口定义为输出出PORTD = 0xfff;/PD口口赋值高电平平PORTB = 0x00f;/PB口口赋值高电平平while(1) /*南北红灯亮亮、东西绿灯灯亮、持续时时20秒*/LED1LL; LED2MM;LED3MM;LED4MM;LED5MM;LED6LL;LED7LL;LED8MM;LED9MM;LED100M;LED111M;LED122L;/*这里,我我们调用_ddelay_ms()函函数的时候,参参数不要过大大,最好不要要超过10000,怕引起起溢出*/for(ii=0;i<<20;i+)_dellay_mss(10000);/延时220个1秒,总共时间220秒/*南北红红灯亮、东西西黄灯亮、持持续时间5秒秒*/LED1LL;LED2MM;LED3MM;LED4M;LED5LL;LED6MM;LED7L;LED8MM;LED9MM;LED10M;LED111L;LED122M;for(ii=0;i<<5;i+)_dellay_mss(10000);/*南北绿绿灯亮、东西西红灯亮、持持续时间200秒*/LED1MM;LED2MM;LED3LL;LED4L;LED5MM;LED6MM;LED7M;LED8MM;LED9LL;LED10L;LED111M;LED122M;for(ii=0;i<<20;i+)_dellay_mss(10000);/*南北黄黄灯亮、东西西红灯亮、持持续时间5秒秒*/LED1MM;LED2LL;LED3MM;LED4L;LED5MM;LED6MM;LED10L;LED111M;LED122M;for(ii=0;i<<5;i+)_dellay_mss(10000);/* 文件名 : 数码码管显示.cc * 杜邦线接法法:用8针排排线把PD口口和J12的的1-8连接接(PD.00接J12的的1端)。 用88针排线把PPB口和J113的1-88连接(PBB.7接J113的1端)。 */#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee uchaar unssignedd charr#definee uintt unssignedd int/数码管的段段码编码uchar ttable16 = 0x33f,0x006,0x55b,0x44f,0x666,0x66d,0x77d,0x007,0x77f,0x66f,0x777,0x77c,0x339,0x55e,0x779,0x771;/下一行的数数组可以显示示数值外,还还可以显示数数码管的点uchar ttable_d16 = 00xbf,00x86,00xdb,00xcf,00xe6,00xed,00xfd,00x87,00xff,00xef,00xf7,00xfc,00xb9,00xde,00xf9,00xf1;int maiin(voiid) uchar i=0;DDRB = 0xfff; DDRRD = 0xff; PORTB = 0x000; /P22口控制的数数码管的位选选,当P2口口的某一位为为低电平时,点点亮。顾客可可以修改这里里的值。 /比如如改为0xffe,就是最最后一位数码码管亮。比如如改为0x77f,就是最最高一位数码码管点亮。while(1)PORTDD = taableii % 166; /在这里取取 i 的个个位数,不带带点显示i+;_delaay_ms(1000); /延时0.5秒后显示示下一个数 /* 文件名 : 数码码管显示.cc * 杜邦线接法法:用8针排排线把PD口口和J12的的1-8连接接(PD.00接J12的的1端)。 用88针排线把PPB口和J113的1-88连接(PBB.7接J113的1端)。 */#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee uchaar unssignedd charr#definee uintt unssignedd int/数码管的段段码编码uchar ttable16 = 0x33f,0x006,0x55b,0x44f,0x666,0x66d,0x77d,0x007,0x77f,0x66f,0x777,0x77c,0x339,0x55e,0x779,0x771;/下一行的数数组可以显示示数值外,还还可以显示数数码管的点uchar ttable_d16 = 00xbf,00x86,00xdb,00xcf,00xe6,00xed,00xfd,00x87,00xff,00xef,00xf7,00xfc,00xb9,00xde,00xf9,00xf1;int maiin(voiid) uchar i,j;DDRB = 0xfff; DDRRD = 0xff; while(1)for(jj=0;j<<100;jj+)PORTTD = ttable(i / 10) % 10; /在这里取取 i 的个个位数,不带带点显示PORTTB = 00xfd;_dellay_mss(5); /延时0.5秒后显示示下一个数PORTTD = ttablei % 110; /在这里取取 i 的个个位数,不带带点显示PORTTB = 00xfe;_dellay_mss(5);i+;/* 文件名 : 数码码管显示.cc * 杜邦线接法法:用8针排排线把PD口口和J12的的1-8连接接(PD.00接J12的的1端)。 用88针排线把PPB口和J113的1-88连接(PBB.7接J113的1端)。 */#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee uchaar unssignedd charr#definee uintt unssignedd int/数码管的段段码编码uchar ttable16 = 0x33f,0x006,0x55b,0x44f,0x666,0x66d,0x77d,0x007,0x77f,0x66f,0x777,0x77c,0x339,0x55e,0x779,0x771;/下一行的数数组可以显示示数值外,还还可以显示数数码管的点uchar ttable_d16 = 00xbf,00x86,00xdb,00xcf,00xe6,00xed,00xfd,00x87,00xff,00xef,00xf7,00xfc,00xb9,00xde,00xf9,00xf1;int maiin(voiid) uchar i=0;DDRB = 0xfff; DDRRD = 0xff; PORTB = 0xffe;PORTD = tabble6;while(1);/* 文件名 : 数码码管显示.cc * 杜邦线接法法:用8针排排线把PD口口和J12的的1-8连接接(PD.00接J12的的1端)。 用88针排线把PPB口和J113的1-88连接(PBB.7接J113的1端)。 */#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee uchaar unssignedd charr#definee uintt unssignedd int/数码管的段段码编码uchar ttable16 = 0x33f,0x006,0x55b,0x44f,0x666,0x66d,0x77d,0x007,0x77f,0x66f,0x777,0x77c,0x339,0x55e,0x779,0x771;/下一行的数数组可以显示示数值外,还还可以显示数数码管的点uchar ttable_d16 = 00xbf,00x86,00xdb,00xcf,00xe6,00xed,00xfd,00x87,00xff,00xef,00xf7,00xfc,00xb9,00xde,00xf9,00xf1;int maiin(voiid) uchar i;DDRB = 0xfff; DDRRD = 0xff; while(1)PORTBB = 0xxfe;for(ii=0;i<<8;i+)PORTTD = ttablei; /在这里取取 i 的个个位数,不带带点显示_dellay_mss(3); /延时0.5秒后显示示下一个数PORTTB = (PORTBB << 11)|0x001;i+;/* 文件名 : 数码码管显示.cc * 杜邦线接法法:用8针排排线把PD口口和J12的的1-8连接接(PD.00接J12的的1端)。 用88针排线把PPB口和J113的1-88连接(PBB.7接J113的1端)。 */#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee uchaar unssignedd charr#definee uintt unssignedd int/数码管的段段码编码uchar ttable16 = 0x33f,0x006,0x55b,0x44f,0x666,0x66d,0x77d,0x007,0x77f,0x66f,0x777,0x77c,0x339,0x55e,0x779,0x771;/下一行的数数组可以显示示数值外,还还可以显示数数码管的点uchar ttable_d16 = 00xbf,00x86,00xdb,00xcf,00xe6,00xed,00xfd,00x87,00xff,00xef,00xf7,00xfc,00xb9,00xde,00xf9,00xf1;int maiin(voiid) uchar i,j,LLED_teemp;DDRB = 0xfff; DDRRD = 0xff; while(1)for(jj=0;j<<40;j+)PORTTB = 00xfe;for(i=0;ii<8;i+)PORRTD = tablee(i + LED_temp) % 8; /数码管段段值/点亮亮某一位数码码管_deelay_mms(2);PORRTB = (PORTTB << 1)|0XX01;LED_ttemp +=1;/* 文件名 : 数码码管显示.cc * 杜邦线接法法:用8针排排线把J111口和J122的1-8连连接(J111的1端接JJ12的8端端)。用8针排线把把J13口和和J3的1-8连接(PPB7接J113的1端)。 /注注意这里是PP2.7PD0接J110的1端;PD1接JJ10的2端端;PD2接接J10的33端;PD33接J10的的4端。 */#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee uchaar unssignedd charr#definee uintt unssignedd int#definee X1644A0 PORTDD&=0XFFE #definee X1644A1 PORTDD|=0XXFE #definee X1644B0 PORTDD&=0XFFD #definee X1644B1 PORTDD|=0XXFD #definee X1644CLOCKK0 PPORTD&&=0XFBB #definee X1644CLOCKK1 PPORTD|=0XFFB #definee X1644CLEARR0 PPORTD&&=0XF77 #definee X1644CLEARR1 PPORTD|=0XFF7/数码管的段段码编码uchar ttable16 = 0x33f,0x006,0x55b,0x44f,0x666,0x66d,0x77d,0x007,0x77f,0x66f,0x777,0x77c,0x339,0x55e,0x779,0x771;/下一行的数数组可以显示示数值外,还还可以显示数数码管的点uchar ttable_d16 = 00xbf,00x86,00xdb,00xcf,00xe6,00xed,00xfd,00x87,00xff,00xef,00xf7,00xfc,00xb9,00xde,00xf9,00xf1;int maiin(voiid) uchhar i,j,temmp;DDRB = 0xxff;DDRD = 0xxff; while(11) foor(j=00;j<166;j+) XX164CLLEAR0;X164AA1;X164CCLEAR11;tempp=tabllej;for(i=0; i<8; i+)iff(temmp>>i) & 0xx01)X1164B1;elsseX1164B0;X1664CLOCCK0;X1664CLOCCK1;_dellay_mss(500);/* 文件名 : 数码码管显示.cc * 杜邦线接法法:用8针排排线把P0口口和J12的的1-8连接接(P0.00接J12的的1端)。用8针排线线把P2口和和J13的11-8连接(P2.7接接J13的11端)。 /注意这里里是P2.77* 杜邦线接法法:用8针排排线把J111口和J122的1-8连连接(J111的1端接JJ12的8端端)。用8针排线线把J13口口和J3的11-8连接(PB7接JJ13的1端端)。 /注意这里是是P2.7 PDD0接J9的的1端;PDD1接J9的的2端;PDD2接J9的的3端;PDD3接J9的的4端;PDD4接J9的的5端。 */#includde <avvr/io.h>#definee F_CPPU 80000000 /这里的值值是单片机工工作的相关晶晶振频率#includde <uttil/deelay.hh>#definee uchaar unssignedd charr#definee uintt unssignedd int#definee SER00 POORTD&=0XFE #definee SER11 POORTD|=0XFEE #definee SRCLLK0 PORTDD&=0XFFD #definee SRCLLK1 PORTDD|=0XXFD #definee SRCLLR0 PORTDD&=0XFFB #definee SRCLLR1 PORTDD|=0XXFB #definee RRCLLK0 PORTDD&=0XFF7 #definee RRCLLK1 PORTDD|=0XXF7#definee E0 PORTTD&=0XXEF #definee E1 PORTTD|=00XEFuchar ttable5595100 = 0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84;int maiin(voiid) uchhar i,j,temmp;DDRD = 0xxff;E1;asm("nnop"); E0;SRCLRR1;while(1) foor(j=00;j<100;j+)temmp=tabble5955j;for(i=0;ii<8;i+) temp=temp << 1;