LED左移和右移函数

合集下载

单片机课程设计例题8-独立式小键盘输入

单片机课程设计例题8-独立式小键盘输入

Vcc
P口
图4­37 独立式键盘结构图
4.程序设计
(1)流程图
开始 开始
键盘扫描函数 mark=01 ? Y mark=02 ? Y mark=03 ? Y LED点亮左移函数 点亮左移函数
有键按下? Y 延时 键释放? Y 置标志位 mark N LED闪烁函数 闪烁函数 结束 N
N
N
LED点亮右移函数 点亮右移函数
n n n n n n n n n n n n n n n n
void main(void) //主函数 { do { switch (key_scan()) { case 0: break; case 1:Led_left(); break; case 2:Led_right(); break; case 3:Led_flash(); break; } }while(1); //循环 }
n n n n n n n n n n n
void Led_right(void)//按键SW2,LED点亮右移函数 { unsigned char i,j=0x7F; for (i=0;i<8;i++) { P1=j ; delay() ; j=(j>>1); j=j|0x80; } }
n
void delay(void) //延时0.5s n { n unsigned int i,j; n for (i=0;i<500;i++) n for (j=0;j<120;j++); for (j=0;j<120;j++); n }
n
n n n n n n n n n n n n n n

广告灯的左移右移

广告灯的左移右移

用单片机实现广告灯的左移右移摘要广告灯,就是所谓的光影传媒,是能把任何图案以光的形式投影在广场或各种楼体上,投影的图案既有动态效果,也有静态效果,各种图案都可以订做,很容易吸引众人的眼光,关注率非常高。

广告灯是一种新生的传媒,成本低,投射方便,是各种广告公司的新宠。

广告灯还能在一些传统媒体无法投放的地方发生作用,并会有意想不到的效果,如地面,马路边上。

广告灯可运用色彩的对比手法,从而产生与众不同的色彩感觉与色彩组合,并有助于作品形象区别于周围事物与环境,形成色彩视觉冲击力,引发注意。

不同的色彩对比组合,可以营造鲜艳夺目、明亮活泼,也可以是庄重高雅、雍容华贵,在作品与消费者接触的一刹那中,打动消费者,增强注意的力度,在形成广告的第一印象时,色先夺人,并留下深刻的印象。

广告灯主要应用于广告牌、建筑泛光照明、网球场、停车场、体育馆、堆场及码头等。

本文中的广告灯采用来了AT89C52单片机进行控制。

关键词:AT89C52单片机,广告灯的左移右移目录第一章引言 (1)1.1 广告灯的概述 (1)第二章器件介绍 (2)2.1 AT89C52单片机及其引脚说明 (2)2.2 功能特性描述 (3)2.3 AT89C52各引脚功能及管脚电压 (4)2.4 AT89C52的引脚图 (6)第三章系统硬件设计 (7)3.1 设计要求 (7)3.2 系统硬件连线 (7)3.3 硬件原理图 (8)第四章软件设计 (9)4.1 程序设计内容 (9)4.2 软件程序流程图 (10)4.3 延时程序的设计 (10)4.4 软件使用说明 (11)4.4.1 Keil软件使用说明 (11)4.4.2 Proteus 6 Professional软件使用说明 (11)4.5 设计任务仿真结果 (12)4.5.1 设计任务一仿真图如图4.5.1所示 (12)4.5.2 设计任务二仿真图4.5.2所示 (13)4.6 结论及其心得体会 (14)参考文献 (15)致谢 (16)附录 (17)附录1 程序清单 (17)设计任务一的程序 (17)设计任务二的程序 (18)附录2 元器件清单表 (20)附录3 原理图 (20)第一章引言当代计算机是微电子技术与计算机数学相结合的产物。

点阵 左移 上移 右移 下移 下拉 等花样显示讲解学习

点阵 左移  上移 右移 下移 下拉 等花样显示讲解学习

点阵左移上移右移下移下拉等花样显示#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define sudu 20/***各种声明的声明*****/sbit LAT_port=P2^0;sbit CLK_port=P2^1;sbit DI_port=P2^2;sbit G_port=P2^3;sbit A_port=P2^4;sbit B_port=P2^5;sbit C_port=P2^6;sbit D_port=P2^7;uchar move; //上移下移用的全局变量uchar temp; //缓冲用的uchar han;uchar zi;uchar code ziku[]={0xFF,0xFF,0xC7,0xE3,0x83,0xC1,0x79,0x9E,0xFE,0x7F,0xFE,0x7F,0xFE,0x7 F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC,0x3F,0xF9,0x9F,0xE3,0xC7,0xC7,0xF1,0x1F,0xF C,0x7F,0xFE,/*"未命名文件",0*/0x7F,0xFF,0x7F,0xFF,0x01,0xC0,0x3F,0xFE,0x5F,0xFD,0x6F,0xFB,0x73,0xE 7,0x7C,0x9F,0x0F,0xF8,0xFF,0xFD,0xFF,0xFE,0x00,0x80,0x7F,0xFF,0x7F,0xFF,0x5F,0xF F,0xBF,0xFF,/*"李",0*/0xF7,0xF7,0x80,0x80,0xF7,0xF7,0xC1,0xC1,0xF7,0xF7,0x80,0x80,0xF7,0xF 7,0x03,0xE0,0xFF,0xEF,0x07,0xE0,0xFF,0xEF,0x03,0xE0,0x7F,0xFF,0xED,0xDE,0xED,0xB 7,0x1E,0xB0,/*"慧",1*/0xFF,0xFF,0x07,0xF0,0xF7,0xF7,0xF7,0xF7,0xB7,0xF7,0x77,0xF7,0x77,0xF 7,0xF7,0xF7,0x00,0x80,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFB,0xF7,0xFB,0xF7,0xFD,0xF 5,0xFE,0xFB,/*"丹",2*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,};uchar code ziku1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0xFF,0xFF,0x07,0xF0,0xF7,0xF7,0xF7,0xF7,0xB7,0xF7,0x77,0xF7,0x77,0xF 7,0xF7,0xF7,0x00,0x80,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFB,0xF7,0xFB,0xF7,0xFD,0xF 5,0xFE,0xFB,/*"丹",2*/0xF7,0xF7,0x80,0x80,0xF7,0xF7,0xC1,0xC1,0xF7,0xF7,0x80,0x80,0xF7,0xF 7,0x03,0xE0,0xFF,0xEF,0x07,0xE0,0xFF,0xEF,0x03,0xE0,0x7F,0xFF,0xED,0xDE,0xED,0xB 7,0x1E,0xB0,/*"慧",1*/0x7F,0xFF,0x7F,0xFF,0x01,0xC0,0x3F,0xFE,0x5F,0xFD,0x6F,0xFB,0x73,0xE 7,0x7C,0x9F,0x0F,0xF8,0xFF,0xFD,0xFF,0xFE,0x00,0x80,0x7F,0xFF,0x7F,0xFF,0x5F,0xF F,0xBF,0xFF,/*"李",0*/0xFF,0xFF,0xC7,0xE3,0x83,0xC1,0x79,0x9E,0xFE,0x7F,0xFE,0x7F,0xFE,0x7 F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC,0x3F,0xF9,0x9F,0xE3,0xC7,0xC7,0xF1,0x1F,0xF C,0x7F,0xFE,/*"未命名文件",0*/};uchar BUF[4];/***子函数申明****/void delay(uint t);void xie595(uchar dat);void hangxuan(uchar han);void huanchong();void zhuanhuanzuoyi();void zhuanhuanyouyi();/***延时****///void delay(uint t){while(t--) ;}/****595输入函数****///void xie595(uchar dat){uchar i;CLK_port=0;for(i=0;i<8;i++){if((dat&0x80)!=0)DI_port=1;elseDI_port=0;CLK_port=1; //上升沿输入数据CLK_port=0;dat<<=1;}}/*******行扫描程序*******///void hangxuan(uchar han){switch(han){case 0:A_port = 0; B_port = 0; C_port = 0;D_port = 0;break;case 1:A_port = 1; B_port = 0; C_port = 0;D_port = 0;break;case 2:A_port = 0; B_port = 1; C_port = 0;D_port = 0;break;case 3:A_port = 1; B_port = 1; C_port = 0;D_port = 0;break;case 4:A_port = 0; B_port = 0; C_port = 1;D_port = 0;break;case 5:A_port = 1; B_port = 0; C_port = 1;D_port = 0;break;case 6:A_port = 0; B_port = 1; C_port = 1;D_port = 0;break;case 7:A_port = 1; B_port = 1; C_port = 1;D_port = 0;break;case 8:A_port = 0; B_port = 0; C_port = 0;D_port = 1;break;case 9:A_port = 1; B_port = 0; C_port = 0;D_port = 1;break;case 10:A_port = 0; B_port = 1; C_port = 0;D_port = 1;break;case 11:A_port = 1; B_port = 1; C_port = 0;D_port = 1;break;case 12:A_port = 0; B_port = 0; C_port = 1;D_port = 1;break;case 13:A_port = 1; B_port = 0; C_port = 1;D_port = 1;break;case 14:A_port = 0; B_port = 1; C_port = 1;D_port = 1;break;case 15:A_port = 1; B_port = 1; C_port = 1;D_port = 1;break;}}/*****缓冲****************/void huanchong(){uchar i;for(i=0;i<2;i++){BUF[i*2+1]=ziku[zi*32+i*32+han*2+1]; //右半部分屏的数据BUF[i*2]=ziku[zi*32+i*32+han*2]; //左半部分屏数据}}/*********左右转换********/void zhuanhuanzuoyi() //向左子函数{uchar wy;if(move<8){wy=move;temp=((BUF[2]<<(8-wy))|(BUF[1]>>wy)); //右半屏的数据处理准备移动的屏左移(8-wy)位;看得见的右移wy位xie595(temp);temp=((BUF[1]<<(8-wy))|(BUF[0]>>wy)); //左半屏同上xie595(temp);}else{wy=(move-8);temp=((BUF[3]<<(8-wy))|(BUF[2]>>wy)); //同上xie595(temp);temp=((BUF[2]<<(8-wy))|(BUF[1]>>wy));xie595(temp);}}void zhuanhuanyouyi() //向右子函数统统同上方向改变{uchar wy;if(move<8){wy=move;temp=((BUF[0]>>(8-wy))|(BUF[1]<<wy));xie595(temp);temp=((BUF[3]>>(8-wy))|(BUF[0]<<wy));xie595(temp);}else{wy=(move-8);temp=((BUF[3]>>(8-wy))|(BUF[0]<<wy));xie595(temp);temp=((BUF[2]>>(8-wy))|(BUF[3]<<wy));xie595(temp);}}/***一般显示***********/void yiban(){zi=0;han=0;LAT_port=0; // 锁住595G_port=1; //138 不使能for(zi=0;zi<4;zi++) //多少个字循环多少次{uint i;for(i=0;i<2000;i++) //刷屏N 次{xie595(ziku[zi*32+han*2+1]);xie595(ziku[zi*32+han*2]);LAT_port=1;//上升沿595输出数据LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;//关屏han++;if(han==16)han=0;}}}/**********下拉******/void xiala(){uint i,j=0;uint k;zi=0;han=0;LAT_port=0;G_port=1;for(k=0;k<64;k++) //一个字要16 {for(i=0;i<sudu*15;i++) //{xie595(ziku[zi*32+han*2+1]); //先写高位xie595(ziku[zi*32+han*2]);LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;han++;if(han==16)han=0;if(han>j)han=0;}j++;if(j>15){G_port=1;j=0;delay(50000);zi++;if(zi==4)zi=0;}}}/*********上移***********/void shangyi(){uint i=0,j=0;uchar move=0;G_port=1;LAT_port=0;zi=0;han=0;for(j=0;j<(zi+1)*16;j++){for(i=0;i<(sudu*15);i++){xie595(ziku[zi*32+han*2+1+move*2]);//......xie595(ziku[zi*32+han*2+move*2]);LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;han++;if(han==16)han=0;}move++;if(move==16){move=0;zi++;if(zi==4)zi=0;}}}/*********下移***********/void xiayi(){uint i=0,j=0;uchar move=0;G_port=1;LAT_port=0;zi=4;han=0;for(j=0;j<(zi+2)*16;j++){for(i=0;i<(sudu*15);i++){xie595(ziku1[zi*32+han*2+1-move*2]);xie595(ziku1[zi*32+han*2-move*2]);LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;han++;if(han==16)han=0;}move++;if(move==16){move=0;zi--;if(zi<0)zi=4;}}}/*******左移***************/void zuoyi(){uchar i;LAT_port=0;G_port=1;zi=0;han=0;for(zi=0;zi<4;zi++){for(move=0;move<16;move++){for(i=0;i<sudu;i++){for(han=0;han<16;han++){huanchong();zhuanhuanzuoyi();LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;}}}}}/********右移**********/void youyi(){uchar i;LAT_port=0;G_port=1;zi=0;han=0;for(zi=0;zi<4;zi++){for(move=0;move<16;move++) //移动16次置0{for(i=0;i<sudu;i++){for(han=0;han<16;han++){huanchong();zhuanhuanyouyi();LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;}}}}}void main(){while(1){yiban();delay(30000);xiala();delay(30000);shangyi(); //各种调用delay(30000);xiayi();delay(30000);zuoyi();delay(30000);youyi();}}。

16×16点阵汉字设计-左移-右移-翻页-上移-下移-多种方式

16×16点阵汉字设计-左移-右移-翻页-上移-下移-多种方式

一、设计依据16x16点阵需要32个驱动,分别为16个列驱动及16个行驱动。

每个行与每个列可以选中一个发光管,共有256个发光管,采用动态驱动方式。

每次显示一行后再显示下一行。

本设计是利用实验仪上的16×16 LED点阵显示器,编写显示英文、汉字字符程序并进行显示,最好能移动显示。

要求在本设计过程中,通过设计合适的硬件电路及对应的软件,实现上述的控制过程,同时写出合格的课程设计说明书。

二、要求及主要内容1.硬件电路设计(1)完成89C51应用系统设计(晶振电路,上电复位电路等)(2)利用单片机I/O口或以扩展锁存器的方式控制点阵显示。

掌握单片机与16×16点阵块之间接口电路的设计方法。

2.程序设计掌握单片机与16×16点阵块之间接口电路的设计方法及编程要求完成主程序的设计及对应的子程序设计。

3.选芯片, 元件按设计连线4.完成子程序调试5.完成总调试三、途径和方法综合运用单片机和电子电路相关知识,实现本次设计。

进行程序设计时先画流程图再进行程序设计。

子程序调试按以下步骤进行:(1)实验板与PC机联机。

(2)利用实验系统16×16点阵实验单元,以两种方式控制点阵显示。

要求编制程序实现汉字点阵循环显示。

点阵时钟摘要LED点阵显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。

它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。

并广泛的应用于公交汽车,码头,商店,学校和银行等公共场合的信息发布和广告宣传。

LED显示屏经历了从单色,双色图文显示屏到现在的全彩色视频显示屏的发展过程,自20世纪八十年代开始,LED显示屏的应用领域已经遍布交通、电信、教育、证券、广告宣传等各方面。

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

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

8位 LED左移

8位 LED左移

8位 LED左移#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉void Delay(unsigned int t); //函数声明void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1Delay(50000);P1=0xfe; //赋初始值for(i=0;i<8;i++) //加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1<<=1;}while (1) //主循环{//主循环中添加其他需要一直工作的程序}}延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}led循环左移#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义/*-------------------------IO口定义----------------------------*/sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉void Delay(unsigned int t); //函数声明void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1Delay(50000);P1=0xfe; //赋初始值while (1) //主循环{for(i=0;i<8;i++) //加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1<<=1;P1=P1|0x01; //左移后,最右端自动赋值0,所以需要该语句赋值1}P1=0xfe; //重新赋初始值//主循环中添加其他需要一直工作的程序}}void Delay(unsigned int t){while(--t);}查表led显示#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉unsigned char code table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0x00,0x55,0x55,0xaa,0xaa};//rom允许情况可以无限添加void Delay(unsigned int t); //函数声明void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1while (1) //主循环{for(i=0;i<16;i++) //加入for循环,表明for循环大括号中的程序循环//执行16次,表明表格中有16个元素{P1=table[i];Delay(30000);}//主循环中添加其他需要一直工作的程序}}不同频率闪烁1个LED#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit LED0=P1^0;// 用sbit 关键字定义LED到P1.0端口,//LED是自己任意定义且容易记忆的符号sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉void Delay(unsigned int t); //函数声明void main (void){//此方法使用bit位对单个端口赋值unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1while (1) //主循环{for(i=0;i<10;i++) //加入for循环,表明for循环大括号中的程序循环执行10次{LED0=0; //将P1.0口赋值0,对外输出低电平Delay(5000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将P1.0口赋值1,对外输出高电平Delay(5000);}for(i=0;i<10;i++){LED0=0; //将P1.0口赋值0,对外输出低电平Delay(60000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将P1.0口赋值1,对外输出高电平Delay(60000);}//主循环中添加其他需要一直工作的程序}}void Delay(unsigned int t){while(--t);}不同频率闪烁多个LED#include<reg52.h> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉sbit LED0=P1^0;// 用sbit 关键字定义LED到P1.0端口,LED是自己任意定义且容易记忆的符号sbit LED1=P1^1;sbit LED2=P1^2;sbit LED3=P1^3;sbit LED4=P1^4;sbit LED5=P1^5;sbit LED6=P1^6;sbit LED7=P1^7;void Delay(unsigned int t); //函数声明void main (void){//此方法使用bit位对单个端口赋值unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1while (1) //主循环{for(i=0;i<10;i++) //加入for循环,表明for循环大括号中//的程序循环执行10次{LED0=0; //将P1.0口赋值0,对外输出低电平LED2=1;LED4=0;Delay(5000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将P1.0口赋值1,对外输出高电平LED2=0;LED4=1;Delay(5000);}for(i=0;i<10;i++){LED0=0; //将P1.0口赋值0,对外输出低电平LED2=1;LED4=0;Delay(60000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将P1.0口赋值1,对外输出高电平LED2=0;LED4=1;Delay(60000);}//主循环中添加其他需要一直工作的程序}}延时函数,含有输入参数 unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535void Delay(unsigned int t){while(--t);}双灯左移右移闪烁#include<reg52.h> //包含头文件,一般情况不需要改动,sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉sbit P35 = P3^5;//这是为了关闭开发板上的点阵实际应用去掉void Delay(unsigned int t); //函数声明void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围unsigned char temp;//定义临时变量用于转换P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉P20=0; //这是为了关闭开发板上的数码管实际应用去掉P21=0; //这是为了关闭开发板上的数码管实际应用去掉P35=0; //这是为了关闭开发板上的点阵实际应用去掉P1=0xFF;//P1口置1while (1) //主循环{temp=0xfc;P1=temp;for(i=0;i<7;i++) //加入for循环,表明for循环大括号//中的程序循环执行7次{Delay(50000); //调用延时程序;更改延时数字可//以更改延时长度;用于改变闪烁频率temp<<=1;temp=temp|0x01; //也可以直接把temp换成P1P1=temp; //之所以加入temp做中间变量,转换//完成后直接赋值到端口,防止直接//操作端口造成的短暂闪烁}temp=0x3f;P1=temp;for(i=0;i<7;i++) //加入for循环,表明for循环大括号//中的程序循环执行7次{Delay(50000); //调用延时程序;更改延时数字可以//更改延时长度;用于改变闪烁频率temp>>=1;temp|=0x80; //等效于temp=temp|0x80P1=temp;}for(i=0;i<3;i++) //加入for循环,表明for循环大括号//中的程序循环执行3次{P1=0xff;Delay(50000);P1=0x00;Delay(50000);} //主循环中添加其他需要一直工作的程序}}void Delay(unsigned int t){while(--t);}。

LED动态链接库函数说明

LED动态链接库函数说明

LED动态链接库函数说明VER 2.0void LEDAPI LED_Startup(void);该函数初始化LEDSender动态链接库void LEDAPI LED_Cleanup(void);该函数终止LEDSender动态链接库long LEDAPI LED_Open(const PDeviceParam param, long Notify, long Window, long Message);该函数打开一个指定的通讯设备参数:param:一个设备参数指针,该结构如下定义:typedef struct DEVICEPARAM{long devType; //device typelong speed; //speed only use for rs232long locPort; //rs232: COM port UDP: local portlong rmtPort; //remote port only use for UDPlong reserved[8];}TDeviceParam;typedef TDeviceParam * PDeviceParam;devType:DEV_COM: 通讯设备为RS-232DEV_UDP: 通讯设备为UDPSpeed:仅对RS-232有效,一般情况下主板的速度为SBR_115200locPort:对RS-232设备,该参数为串口号对UDP设备,该参数为本地端口号,一般该值为大于1024的数字Remote:仅对UDP方式有效,主板的固定端口为: 6666reserved:系统保留Notify:是否产生通知消息1=产生通知消息0=不产生通知消息window:接收通知消息的窗口句柄Message:消息标识返回值:如果设备打开正常,该函数返回一个大于等于0的数字备注:LED通讯是异步通讯模式,只能通过Window操作系统的消息机制来传递通讯状态,因此在用户程序中应该有一个消息处理模块,专门处理通讯消息该函数能构反复打开同一设备void LEDAPI LED_Close(long dev);该函数关闭已打开的通讯设备参数:dev:该参数是LED_Open函数的返回值void LEDAPI LED_Query(long dev, BYTE Group,BYTE ScrNo, char *Host, WORD port);该函数查询显示屏是否能够通讯参数:dev:该参数是LED_Open函数的返回值Group:显示屏组号ScrNo:显示屏屏号Host:显示屏IP地址(仅对UDP有效)port:显示屏端口号(如果是UDP通讯,该端口为6666)备注:如果在LED_Open调用中Notify=1,那么该函数会产生一个消息通知,向LED_Open中指定的Window 发送一个Message消息,通过分析该消息可得知该函数的执行结果void LEDAPI LED_AdjustTime(long dev, BYTE Group, BYTE ScrNo, char *Host, WORD port);该函数用计算机时钟校正显示屏内时钟void LEDAPI LED_SendToScreen(long dev, BYTE Group, BYTE ScrNo, char *Host, WORD port);该函数将形成的节目数据发送到显示屏void LEDAPI LED_SetPower(long dev, BYTE Group, BYTE ScrNo, char *Host, WORD port, DWORD Power); 该函数打开或关闭显示屏电源参数:Power:1 = 打开电源0 = 关闭电源void LEDAPI LED_GetPower(long dev, BYTE Group, BYTE ScrNo, char *Host, WORD port);该函数获取电源状态备注:如果在LED_Open调用中Notify=1,那么该函数会产生一个消息通知,向LED_Open中指定的Window 发送一个Message消息,通过分析该消息可得知该函数的执行结果void LEDAPI LED_SetBrightness(long dev, BYTE Group, BYTE ScrNo, char *Host, WORD port, BYTE Brightness);该函数用于调节显示屏亮度参数:Brightness: 0-7 0=最暗7=最亮void LEDAPI LED_SetIPAddress(long dev, BYTE Group, BYTE ScrNo, char *Host, WORD port, char *NewIP); 该函数用于修改显示屏IP地址参数:NewIP: IP地址格式必须如下:“192.168.0.99”备注:执行该函数后,显示屏会自动重新启动long LEDAPI LED_DownLoadFontSet(long dev, BYTE Group, BYTE ScrNo, char *Host, WORD port, char *filename);该函数下载字库文件到显示屏参数:filename: 字库文件名路径备注:字库文件有特殊的格式,目前只能支持16点阵和24点阵两种字库,可支持ASCII码和汉字内码long LEDAPI MakeRoot(long RootType, long ScreenType);该函数用于开始形成显示屏数据参数:RootType:可有ROOT_PLAY和ROOT_DOWNLOAD两种选择ROOT_PLAY: 仅用于播放ROOT_DOWNLOAD: 保存并播放,由于主板上有Flash芯片,因此可将显示内容保存在主板上,当断电重新启动时,显示屏可显示上次发送的数据(由于Flash有一定的写入次数限制,因此如果没有必要请不要用ROOT_DOWNLOAD)ScreenType:由于显示屏类型众多,每种显示屏的显示数据都不一样,因此必须指定相应的显示屏类型SCREEN_UNICOLOR: 单色显示屏SCREEN_COLOR: 双色显示屏SCREEN_FULLCOLOR: 全彩色显示屏SCREEN_GRAY: 256级灰度显示屏请与相应控制卡对应。

单片机原理流水灯实验

单片机原理流水灯实验

单片机原理流水灯实验单片机原理流水灯实验是一种十分基础的单片机实验,在学习单片机的初级阶段非常重要。

流水灯可以通过多个灯依次亮起,再逐个熄灭,形成灯光流动的效果。

下面将详细介绍单片机原理流水灯实验的步骤和实现原理。

首先,我们需要准备的材料和工具有:1. 单片机主板:例如STC89C52RC型号。

2. LED灯:我们需要7个LED灯,可以选择不同颜色和尺寸的。

3. 面包板:用于连接电路。

4. 连接线:用于连接单片机主板和面包板以及连接LED灯。

接下来,我们开始进行单片机原理流水灯实验的步骤:第一步:连接电路1. 将7个LED灯连接到面包板上,按照流水灯的顺序连接,可以使用杜邦线连接。

2. 在面包板上连接7个电流限制电阻,以保护LED灯,限制电流的大小根据具体LED灯的要求确定。

3. 将面包板的VCC和GND引线分别连接到单片机主板的VCC和GND引脚上。

第二步:编写程序1. 打开Keil C51编译器,新建一个项目。

2. 编写C语言程序,实现流水灯的效果,代码如下:c#include <reg52.h>声明I/O口函数void delay(unsigned int t);void ledFlow(void);程序入口void main(void){主循环while (1){LED流水灯效果ledFlow();}}延时函数void delay(unsigned int t)unsigned int i, j;for (i = 0; i < t; i++)for (j = 0; j < 120; j++);}LED流水灯效果函数void ledFlow(void){unsigned int i;unsigned char flowData = 0x01;for (i = 0; i < 8; i++){P0 = flowData; 将数据输出到P0口delay(500); 延时500msflowData <<= 1; 左移一位}delay(500); 延时500msflowData = 0x80; 数据复位for (i = 0; i < 8; i++){P0 = flowData; 将数据输出到P0口delay(500); 延时500msflowData >>= 1; 右移一位}delay(500); 延时500ms}第三步:烧录程序1. 将单片机主板连接到电脑上,并打开STC-ISP烧录软件。

[整理]LED指示灯循环控制

[整理]LED指示灯循环控制

一、实验内容1、按照教材P227的图A.32,绘制实验三电路原理图;2、根据功能要求,编写C51程序;3、练习μVision3程序动态调试方法,并最终实现8个LED灯依次点亮的功能:P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→P0.5→┅→P0.0的顺序,无限循环,间隔约50ms;4、观察仿真结果,完成实验报告。

六、实验要求实验步骤(1)在ISIS中绘制电路原理图,按照表A4.1将元件添加到编译环境中;(2)在uVision3中编写C51程序;(3)利用uVision3的编译调试功能检查语法和逻辑错误;(4)下载可执行文件,在Proteus中观察仿真结果,检查程序的正确性。

实验要求提交的实验报告中应包括电路的原理图和实验结果分析。

1、电路分析及原理图图12、编程思路及C51源程序编程思路1,P0口赋一初值,使D1灯亮,D2~D8灯灭2,调用函数delay,传入参数值为50(ms)3,采用while结构的无限循环体4,由上向下循环控制(变量i的初值为1,终值小于等于7,增量为+1)5,使P0中的数值向左移1位6,调用函数delay,传入参数值为50(ms)7,返回第二部继续进行源程序#include <reg51.h> //预处理命令,将reg51.h头文件包含进来void delay(unsigned int time ){ //无返回型延时函数delay,传入参数为1个无符号整形变量,timeunsigned int j=0; //定义1个初值为0的无符号整形变量,jfor (;time>0;time--) //采用for结构的外层循环,变量time的初值为time,终值大于0,增量为-1for (j=0;j<125;j++); //采用for结构的内层循环,变量j的初值为0,终值小于125,增量为+1}void main(){ //主函数unsigned char i; //定义1个位于data区的自动无符号字符型变量,iP0 = 0x01; //P0口赋一初值,使D1灯亮,D2~D8灯灭delay(200); //调用函数delay,传入参数值为50(ms)while( 1 ){ //采用while结构的无限循环体for(i=1;i<=7;i++){ //由上向下循环控制(变量i的初值为1,终值小于等于7,增量为+1)P0=P0<<1; //使P0中的数值向左移1位(左移符为" <<")delay(200); //调用函数delay,传入参数值为50(ms)}for(i=1;i<=7;i++){ //由下向下上循环控制(变量i的初值为1,终值小于等于7,增量为+1)P0=P0>>1; //使P0中的数值向右移1位(左移符为" >>")delay(200); //调用函数delay,传入参数值为50(ms)}3、调试过程简述1程序单步调试,如图2所示,当执行到delay子程序时,按下F10或stop over 键,调试光标不进入延时子程序直接到主程序的下一行。

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