跑马灯程序(c语言)
单片机C语言跑马灯按键选择花样显示
按键选择花样显示#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器#include <intrins.h>//--定义要使用的IO口--//#define GPIO_KEY P1 //独立键盘用P1口#define GPIO_LED P0 //led使用P0口//--定义全局函数--//void Delay10ms(unsigned int c); //延时10msunsigned char Key_Scan();void LED1();void LED2();void LED3();void LED4();void LED5();void LED6();void LED7();void LED8();void main(void){unsigned char keyNum;GPIO_LED=0X00;while (1){keyNum = Key_Scan(); //扫描键盘switch (keyNum){case(0xFE) : //返回按键K1的数据LED1();break;case(0xFD) : //返回按键K2的数据LED2();break;case(0xFB) : //返回按键K3的数据LED3();break;case(0xF7) : //返回按键K4的数据LED4();break;case(0xEF) : //返回按键K5的数据LED5();break;case(0xDF) : //返回按键K6的数据LED6();break;case(0xBF) : //返回按键K7的数据LED7();break;case(0x7F) : //返回按键K8的数据LED8();break;default:break;}}}unsigned char Key_Scan(){unsigned char keyValue = 0 , i; //保存键值//--检测按键1--//if (GPIO_KEY != 0xFF) //检测按键K1是否按下{Delay10ms(1); //消除抖动if (GPIO_KEY != 0xFF) //再次检测按键是否按下{keyValue = GPIO_KEY;i = 0;while ((i<50) && (GPIO_KEY != 0xFF)) //检测按键是否松开{Delay10ms(1);i++;}}}return keyValue; //将读取到键值的值返回}void Delay10ms(unsigned int c) //误差0us {unsigned char a, b;for (;c>0;c--){for (b=38;b>0;b--){for (a=130;a>0;a--);}}}* 函数功能: LED左移闪烁两次void LED1(){unsigned char i;GPIO_LED = 0x01;for (i=0; i<16; i++){GPIO_LED = _crol_(GPIO_LED, 1);Delay10ms(5);}}* 函数功能: LED右移闪烁两次void LED2(){unsigned char i;GPIO_LED = 0x80;for (i=0; i<16; i++){GPIO_LED = _cror_(GPIO_LED, 1);Delay10ms(5);}}* 函数功能: LED交替闪烁void LED3(){GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);}* 函数功能: LED交替闪烁void LED4(){GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);}* 函数功能: LED交替闪烁void LED5(){GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);}* 函数功能: LED交替闪烁void LED6(){GPIO_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5);}* 函数功能: LED1到LED6来一遍void LED7(){LED1();LED2();LED3();LED4();LED5();LED6();}* 函数功能: 全灭void LED8(){GPIO_LED = 0x00;}。
跑马灯汇编程序
DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DA TAMOV DS,AXMOV AL,0FEHRECE:ROL AL,1MOV DX,1600HOUT DX,ALCALL DEL Y ;CALL指令(1)将程序当前执行的位置IP压入堆栈中。
(2)转移到调用的子程序。
JMP RECE ;无条件直接转移MOV AX,4C00HINT 21HDELY:MOV CX,65535;改变右边的数值即改变时间的快慢LOOP0:MOV BL,225;该句和下一句为空语句,改变其右边的数值不影响输出的结果。
ROL BL,1;LOOP LOOP0RET;CALL与RET结合使用,当CALL调用的子程序运行到RET命令时,压入堆栈的IP弹出,跳出子程序,开始执行CALL的下一条语句。
CODE ENDSEND STARTDATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DA TAMOV DS,AXMOV AL,0B2H ;亮灭灯控制,如0B2H=10110010,对应的1灭0亮的规律。
0FEH=11111110,只亮一个灯。
RECE:ROL AL,1;左移位数MOV DX,1600H ;该数经电路图推出,不可随意更改。
OUT DX,ALCALL DEL Y ;CALL指令(1)将程序当前执行的位置IP压入堆栈中。
(2)转移到调用的子程序。
JMP RECE ;无条件直接转移MOV AX,4C00HINT 21HDELY:MOV CX,65535;改变右边的数值即改变时间的快慢LOOP0:MOV BL,225;该句和下一句为空语句,改变其右边的数值不影响输出的结果。
ROL BL,1LOOP LOOP0RET; CALL与RET结合使用,当CALL调用的子程序运行到RET命令时,压入堆栈的IP弹出,跳出子程序,开始执行CALL的下一条语句。
跑马灯程序
InitSysCtrl();//初始化DSP运行时钟
while ( 1 )
{
for ( i=0;i<4;i++ )
{
LBDS=uLED[i];//正向顺序送控制字
Delay(256);//延时
}
for ( i=3;i>=0;i-- )
{
LBDS=uLED[i];//反向顺序送控制字
Delay(256);//延时
// No more.
//========================================
实验结果:
#define CTRLCDCMDR *(int *)0x108001
#define CTRKEY *(int *)0x108001
#define CTRLCDCR *(int *)0x108002
#define CTRCLKEY *(int *)0x108002
#define CTRLCDLCR *(int *)0x108003
CTRGR=0;//初始化ICETEK-CTR
CTRGR=0x80;
CTRGR=0;
CTRLR=0;//关闭东西方向的交通灯
CTRLR=0x40;//关闭南北方向的交通灯
uPort8000=CTRCLKEY;
while ( 1 )
{};
}
interrupt void cpu_timer0_isr(void)
跑马灯程序:
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
(原创)51单片机C语言程序设计--速学教程实例(入门篇)之流水灯(跑马灯)
/******************************************************************//*名称:流水灯(跑马灯)演示程序*//*作者:苏涛*//*时间:2011-01-11*//*单位:安徽建筑工业学院电子与信息工程学院*//*07级电子信息工程专业二班*//******************************************************************/#include<reg52.h>//头文件调用,写程序时都要加上#include<intrins.h>//cror以及crol函数被此头文件包含,需要加上#define uint unsigned int//宏定义,为了后面定义变量书写简便#define uchar unsigned char/******************************************************************//*名称:延时函数*//*功能:C语言中常用的for循环延时方法*//*延时长短可以通过变量初值来改变*//******************************************************************/void delay(void){uchar m,n,s;for(m=10;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);}/******************************************************************//*名称:主函数*//*功能:利用循环左移函数以及循环右移函数*//*对P1端口进行操作,低电平灯亮*//******************************************************************/void main(void){uchar i,mm;while(1){mm=0xfe;P1=mm;delay();for(i=0;i<3;i++){mm=_crol_(mm,1);P1=mm;delay();}for(i=0;i<3;i++){mm=_cror_(mm,1);P1=mm;delay();}for(i=0;i<4;i++){mm=_cror_(mm,1);P1=mm;delay();}for(i=0;i<4;i++){mm=_crol_(mm,1);P1=mm;delay();}for(i=0;i<15;i++){mm=_crol_(mm,1);P1=mm;delay();}for(i=0;i<15;i++){mm=_cror_(mm,1);P1=mm;delay();}for(i=0;i<8;i++){mm=_crol_(mm,2);P1=mm;delay();}for(i=0;i<8;i++){mm=_cror_(mm,2);P1=mm;delay();}P1=0x00;delay();P1=0xff;delay();P1=0x00;delay();P1=0xff;delay();}}。
音乐跑马灯设计程序
MOV P1,#0F8H
LCALL DELAY1
MOV P1,#0F0H
LCALL DELAY1
MOV P1,#0E0H
LCALL DELAY1
MOV P1,#0C0H
LCALL DELAY1
MOV P1,#80H
LCALL DELAY1
MOV P1,#0FFH
AJMP START
KEY3: RET
LED4:
MOV A,P3
ANL A,#1FH
CJNE A,#08H,KEY4
MOV P1,#0FEH
LCALL DELAY1
MOV P1,#0FCH
CLR A
MOVC A,@A+DPTR
MOV R0,A
ANL A,R1
CJNE A,#0FFH,START5
SJMP KEY5
START5 : MOV TH0,R1
MOV TL0,R0
SETB TR0
NEXT5: CLR A
INC DPTR
MOV TMOD,#01H
MOV IE,#82H
MOV DPTR,#TAB1
LOOP41: CLR A
MOVC A,@A+DPTR
MOV R1,A
INC DPTR
CLR A
MOVC A,@A+DPTR
ORG 0000H
SJMP START
ORG 000BH
LJMP ZHONGDUAN
START: MOV A,P3
ANL A,#1FH
MODE1: CJNE A,#01H,MODE2
依次逐个亮灯并且每次只能亮一个灯的跑马灯程序
依次逐个亮灯并且每次只能亮⼀个灯的跑马灯程序#include "REG52.H"#define const_time_level_01_08 200 //第1个⾄第8个LED跑马灯的速度延时时间void initial_myself();void initial_peripheral();void delay_short(unsigned int uiDelayShort);void delay_long(unsigned int uiDelayLong);void led_flicker_01_08(); //第1个⾄第8个LED跑马灯程序,逐个亮且每次只能亮⼀个void hc595_drive(unsigned char ucLedStatusTemp08_01);void led_updata(); //LED更新函数void T0_time(); //定时中断函数sbit hc595_sh_dr=P3^6; //上升沿时,数据寄存器数据移位sbit hc595_st_dr=P3^5; //上升沿时移位寄存器的数据进⼊数据寄存器,下降沿时数据不变。
当移位结束后,会产⽣⼀个正脉冲,⽤于更新显⽰数据。
sbit hc595_ds_dr=P3^4; //串⾏数据输⼊端,级联的话接上⼀级的Q7unsigned char ucLed_dr1=0; //代表8个灯的亮灭状态,0灭,1亮unsigned char ucLed_dr2=0;unsigned char ucLed_dr3=0;unsigned char ucLed_dr4=0;unsigned char ucLed_dr5=0;unsigned char ucLed_dr6=0;unsigned char ucLed_dr7=0;unsigned char ucLed_dr8=0;unsigned char ucLed_updata=0; //刷新变量。
c语言跑马灯与数字钟融合
c语言跑马灯与数字钟融合
最近,我学习了一下C语言中的跑马灯和数字钟。
它们都是C语
言中的经典例程。
跑马灯是一种灯光效果,它可以让一组灯光像跑一样闪烁,非常
漂亮。
在C语言中,我们可以通过不断改变控制灯光的代码来实现跑
马灯效果。
我们可以通过for循环来改变代码,使灯光不断地亮和灭。
数字钟是一种可以显示时间的时钟。
在C语言中,我们可以通过
调用系统时间函数,获取当前时间,并将其显示在屏幕上,以实现数
字钟效果。
我们还可以通过for循环和延时函数,让数字钟的时间不
断更新,实现动态显示数字钟的效果。
将跑马灯和数字钟融合起来,可以得到一个更加有趣的程序。
我
们可以让数字钟的时间不断更新,同时在屏幕上显示一组跑马灯效果。
这样可以让我们在忙碌的工作中,时时刻刻感受到美好的视觉享受,
提高工作效率。
总之,跑马灯和数字钟是C语言中的两个经典案例。
它们的结合
将可以带来更加丰富多彩的视觉效果,对于学习C语言的人来说,也
是一个非常有意义的实践项目。
跑马灯——代码
CLR LED1 ;LED1亮
CLR LED2 ;LED2亮
SETB LED3 ;LED3灭
SETB LED4 ;LED4灭
MOV DelayTimes_100MS,#10 ;设置需要延时多少个100MS
LCALL Delay100MS ;调用延时程序
SETB BEEP ;蜂鸣器响
CLR LED1 ;LED1亮
CLR LED2 ;LED2亮
CLR LED3 ;LED3亮
SETB LED4 ;LED4灭
MOV DelayTimes_100MS,#10 ;设置需要延时多少个100MS
LCALL Delay100MS ;调用延时程序
CLR BEEP ;蜂鸣器不响
CLR LED1 ;LED1亮
START1:
LCALL LEDRUN ;调用跑马灯程序
LJMP START1 ;跳转回START1,重新执行以上程序,相当于C语言中的while(1)
;以下为子程序
;延时程序,入口参数为DelayTimes_100MS
Delay100MS:
MOV R7,DelayTimes_100MS
Delay100MS_1: MOV R6,#10
附页——代码
LED1 BIT P2.4 ;将P2.4用伪指令命名为LED1
LED2 BIT P2.5 ;将P2.5用伪指令命名为LED2
LED3 BIT P2.6 ;将P2.6用伪指令命名为LED3
LED4 BIT P2.7 ;将P2.7用伪指令命名为LED4
BEEP BIT P1.0 ;将P1.0用伪指令命名为BEEP
CLR LED2 ;LED2亮
CLR LED3 ;LED3亮
跑马灯程序大全
LED 跑马灯(从右至左)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char #defi ne uint un sig ned int void DelayMS(ui nt x){uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0xfe;while(1){ if(P1==0xef)P1=0xfe; void main()elseP1=_crol_(P1,1);DelayMS(80);}}LED跑马灯(从左至右)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned intvoid DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}{P仁Oxef;while(1){ if(Pl==0x7f)P仁Oxef;elseP1=_cror_(P1,1); DelayMS(40);}}LED跑马灯(左右循环)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++); }}void mai n(){uchar i;P仁0xef;while(1){for(i=0;i<4;i++){P1=_cror_(P1,1);DelayMS(40); }P1=0xfe;DelayMS(40); for(i=0;i<3;i++){P1=_crol_(P1,1);DelayMS(40); } P仁}单个LED的闪烁#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int sbit LED = P1A0;void DelayMS(ui nt x) {uchar i;while(x--){for(i=120;i>0;i--);}}void mai n(){while(1){LED = ~LED;DelayMS(150);}}连绵灯#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0x0e;while(1){ if(P1==0xb1)P1=0x0e;elseP1=_crol_(P1,1); DelayMS(80);}}。
S3C2410 GPIO C语言跑马灯实验
实验2 S3C2410 GPIO C语言跑马灯实验一、实验目的掌握S3C2410 通用I/O口的特点,用法和C语言编程技巧,以及MDK GPIO的可视化配置方法,理解S3C2410启动代码中和GPIO有关的程序段。
二、实验预备知识熟悉UP-NETARM2410实验箱的结构,S3C2410的外设接口电路,熟悉MDK编程软件的使用方法,熟悉C语言程序设计的一般方法。
三、实验内容编写程序编译并下载到UP-NETARM2410实验箱S3C2410的Nand型Flash芯片K9F1208中,使得GPC5/GPC6/GPC7上所接的三个LED循环亮灭。
四、参考程序程序1(无S3C2410。
H)1 #define GPCDA T_ADDR (*(volatile unsigned int *)0x56000024)2 #define LED1_MASK 0x203 #define LED2_MASK 0x404 #define LED3_MASK 0x8056 void Delay(int n)7 {8 int i,j;9 for(i=0;i<n;i++)10 {11 for(j=0;j<n;j++)12 {13 }14 }15 }1617 int main()18 {19 int nLED;20 nLED = 0;21 while(1)22 {23 nLED = 0;24 nLED ^=(LED2_MASK | LED3_MASK);// LED1 light25 GPCDA T_ADDR = nLED;26 Delay(0x300);2728 nLED = 0;29nLED ^=(LED1_MASK | LED3_MASK);// LED2 light30 GPCDA T_ADDR = nLED;31 Delay(0x300);3233 nLED = 0;34 nLED ^=(LED1_MASK | LED2_MASK);// LED3 light35 GPCDA T_ADDR = nLED;36 Delay(0x300);3738 }3940 }建议用程序2程序2(有S3C2410。
实验2__C语言程序设计及_LED跑马灯实验
EQU (0x1)
EQU (0x2)
EQU (DW16)
EQU (DW16)
EQU (DW16)
EQU (DW32)
EQU (DW16)
EQU (DW32)
EQU (DW32)
EQU
0x3
EQU
0x3
EQU
0x7
EQU
0x3
EQU
0x3
EQU
0x1
EQU
0x0
EQU
0x3
EQU
0x1
EQU
0x1
EQU
DW32
EQU (0x2)
B1_BWSCON=0x1 B4_BWSCON=0x2
;单独定义BANK1~7的数据宽度BWSCON寄存器参数
B1_BWSCON
EQU (DW16)
; =0x01: 选择BANK1的数据宽度为16-bit
B2_BWSCON
EQU (DW16)
; =0x01: 选择BANK2的数据宽度为16-bit
初始值 0x0 0x0700 0x0700 0x0700 0x0700 0x0700 0x0700 0x18008 0x18008 0xac0000 0x0 xxx xxx
待设置的存储器参数表达方式
1、待设置的BWSCON寄存器参数表达
DW16 DW32 ; B1_BWSCON B2_BWSCON B3_BWSCON B4_BWSCON B5_BWSCON B6_BWSCON B7_BWSCON
B5_BWSCON
EQU (DW16)
; = 0000 0000 0000 0000 0000 0000 0000 0001
B6_BWSCON
EQU (DW32)