
LED的阳极接电源正,阴极接P1口,IO某位低电平时,就点亮相应位的LED。P1=0xff,灯全灭。P1=0xfe时点亮P10灯,延时500ms 。P1=0xfd,点亮P11灯。。。。
for(;;)
{} 这条就是程序在大括号里无限循环,就是灯从1~8点亮后再从1~8,一直反复循环,没必要 退出。
P37 连接按键,P1 外接 LED。
没有使用中断。
8个led的点亮方式用数组保存。
--3种不同的点亮方式。
--点亮方式仅仅是一个数字(0、1、2)而已,还用数组保存?
--用变量 mode 保存即可。
#include<reg51h>
#include<intrinsh>
sbit key = P3^7;
unsigned char kc, kb, kz, mode = 2, aa = 0xff;
void delay10ms(void)
{
unsigned int i, j;
for (i = 0; i < 60; i++) for (j = 0; j < 20; j++);
kc = ~key;
kz = kc ^ kb;
kb = kc;
if (kz & kb) {
mode++;
mode %= 3;
if (mode == 0) aa = 0x7f; //3种方式
if (mode == 1) aa = 0x3f;
if (mode == 2) aa = 0x1f;
}
}
main()
{
char i;
while(1) {
for (i = 0; i < 50; i++) {
delay10ms();
if (kz & kb) break;
}
P1 = aa;
aa = _cror_(aa, 1);
}
}
本程序给出的三种方式,显得简陋了一些。
试试看吧。
ORG000H\x0d\LJMPMAIN\x0d\ORG000BH;定时器0中断入口\x0d\LJMPLOOP1\x0d\ORG0100H\x0d\MAIN:\x0d\MOVTMOD,#01H;设置定时器工作模式\x0d\MOVTL0,#0EFH;设置定时器初值\x0d\MOVTH0,#0D8H\x0d\SETBEA;打开总中断\x0d\SETBET0;打开定时器0中断\x0d\SETBTR0;启动定时器0\x0d\MOVP0,#0FFH\x0d\MOVR0,#200;延时参数\x0d\LOOP:\x0d\CJNER0,#0,LOOP;延时\x0d\MOVA,#0EFH\x0d\NEXT:\x0d\MOVP0,A;送值\x0d\MOVR0,#50;延时参数\x0d\EXIT:\x0d\CJNER0,#00H,EXIT;延时一会儿\x0d\RLA;A循环左移根据程序分许,该程序完成流水灯功能\x0d\LJMPNEXT\x0d\\x0d\LOOP1:;定时器0中断函数\x0d\MOVTL0,#0EFH;定时器初值\x0d\MOVTH0,#0D8H;定时器初值\x0d\DECR0;\x0d\RETI;中断返回\x0d\END\x0d\有疑问可以追问。
以上就是关于单片机中流水灯的程序全部的内容,包括:单片机中流水灯的程序、求一单片机流水灯程序,C编写的。、单片机流水灯汇编程序是怎样的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)