精华内容
下载资源
问答
  • 51单片机按键控制点阵显示

    千次阅读 2020-08-16 19:37:39
    名称:按键控制 8X8LED 点阵屏显 示图形 说明:每次按下 K1 时,会使 8X8LED 点阵屏循环显示不同图形。本例同时使用外部中断和定 时中断 #include"reg52.h" #include"intrins.h" #define led P0 //宏定义 typedef ...

    名称:按键控制 8X8LED 点阵屏显 示图形

    说明:每次按下 K1 时,会使 8X8LED 点阵屏循环显示不同图形。本例同时使用外部中断和定 时中断

    #include"reg52.h"
    #include"intrins.h"
    #define led P0                //宏定义
    typedef unsigned int u16;
    typedef unsigned char u8;
    sbit src=P3^6;				//移位寄存器时钟输入
    sbit rc=P3^5;				//存储寄存器时钟输入
    sbit ser=P3^4;				//串行数据输入
    sbit key=P3^2;				//按键
    u8 duan[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; 
    u8 count=0;					
    u8 i;
    u8 flag=0;					//标志位
    
    void delay(u16 x)			//延时函数1us
    {
    	while(x--);
    }
    
    void tim_init()				//定时器初始化
    {
    	EA=1;					//中断总允许位
    	ET0=1;					//定时计数器中断允许位
    	TMOD=0X01;				//定时器0的方式1   0000 0001
    	TH0=0XD8;				//高八位
    	TL0=0XF0;				//低八位
    	TR0=1;					//开启定时
    }
    
    void int0_init()			//中断初始化
    {
    	EX0=1;					//外部中断允许位
    	IT0=1;					//下降沿触发
    }
    
    void c595(u8 date)			//c595芯片初始化
    {
    	u8 a;
    	src=0;     				//移位寄存器时钟输入
    	rc=0;					//存储寄存器时钟输入
    	for(a=0;a<8;a++)
    	{
    		ser=date>>7;		//选择最高位
    		date<<=1;			//向左移一位
    		src=1;				
    		_nop_();			//一个机器周期时间(在intrins头文件中)
    		_nop_();
    		src=0;
    	}
    	rc=1;
    	_nop_();
    	_nop_();
    	rc=0;
    }
    
    void main()
    {
    	led=0xcc;
    	c595(0x00);
    	tim_init();
    	int0_init();
    	while(1);
    }
    
    void int0() interrupt 0   //中断服务函数
    {
    
    	if(key==0)
    	{
    		delay(4);    //消抖
    		if(key==0)
    		{
    			while(key==0);    //判断是否松手
    			flag=1;
    
    		}
    	}
    }
    
    void tim0()  interrupt 1
    {
    	TH0=0XD8;      
    	TL0=0XF0;
    	count++;
    	if(count==50)
    	{
    		if(flag==1)
    		{
    			i++;
    			c595(duan[i]);
    			led=~led;
    			delay(100);
    			if(i==7) 
    			{
    				i=0;
    				flag=0;
    			}
    		}
    		count=0;
    	}
    }
    
    
    展开全文
  • 单片机按键控制8×8LED点阵屏显示图形
  • //T0 中断控制点阵屏显示void Show_Dot_Matrix() interrupt 1{TH0=(65536-2000)/256;//恢复初值TL0=(65536-2000)%256;P0=0xff; //输出位码和段码P0=~M[i][j];P1=_crol_(P1,1);j=(j+1)%8;}//INT0 中断(定时器由键盘...

    //T0 中断控制点阵屏显示

    void Show_Dot_Matrix() interrupt 1

    {

    TH0=(65536-2000)/256;//恢复初值

    TL0=(65536-2000)%256;

    P0=0xff;       //输出位码和段码

    P0=~M[i][j];

    P1=_crol_(P1,1);

    j=(j+1)%8;

    }

    //INT0 中断(定时器由键盘中断启动)

    void Key_Down() interrupt 0

    {

    P0=0xff;

    P1=0x80;

    j=0;

    i=(i+1)%3;    //i 在 0,1,2 中取值,因为只要 3 个图形

    TR0=1;

    }

    eafaf46629b861bb7690787669723960.png

    c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] 610626052e95c7fbe3d254abc769d9ad.gif

    本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

    展开全文
  • 利用键盘控制点阵进行十进制数字显示,利用键盘控制点阵进行十进制数字显示
  • /* 名称:按键控制8X8LED点阵屏显示图形说明:每次按下K1时,会使8X8LED点阵屏循环显示不同图形。本例同时使用外部中断和定时中断。*/#include#include#define uchar unsigned char#define uint unsigned int//待...

    /*        名称:按键控制8X8LED点阵屏显示图形

    说明:每次按下K1时,会使8X8LED点阵屏循环显示不同图形。

    本例同时使用外部中断和定时中断。

    */

    #include

    #include

    #define uchar unsigned char

    #define uint unsigned int

    //待显示图形编码

    uchar code M[][8]=

    {

    {0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00},                //图1

    {0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00},                //图2

    {0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00}                //图3

    };

    uchar i,j;

    //主程序

    void main()

    {

    P0=0xff;

    P1=0xff;

    TMOD=0x01;                                //T0方式1

    TH0=(65536-2000)/256;        //2ms定时

    TL0=(65536-2000)%256;

    IT0=1;                                        //下降沿触发

    IE=0x83;                                //允许定时器0、外部0中

    i=0xff;                                        //i的初值设为0xff,加1

    后将从0开始

    while(1);

    }

    //T0中断控制点阵屏显示

    void Show_Dot_Matrix() interrupt 1

    {

    TH0=(65536-2000)/256;        //恢复初值

    TL0=(65536-2000)%256;

    P0=0xff;                                //输出位码和段码

    P0=~M[ i][j];[ i]

    P1=_crol_(P1,1);

    j=(j+1)%8;

    }

    //INT0中断(定时器由键盘中断启动)

    void Key_Down() interrupt 0

    {

    P0=0xff;

    P1=0x80;

    j=0;

    i=(i+1)%3;                                //i在0,1,2中取值,因

    为只要3个图形

    问题如下

    1.P0=0xff;P1=0xff-------这条语句是端口初始化不?

    2.IE=0x83 ---- 1000 0011为什么是这个值?寄存器配置?

    3.P0=0xff;

    P0=~M[ i][j];

    P1=_crol_(P1,1);

    j=(j+1)%8;-----------------P0赋初值?P0给值?后面的就看不懂了

    4.我用proteus仿真试了下,只有在按键按下的时候,才会显示图形,这样就是外

    部中断。那定制器中断有何意义呢?

    5.i=(i+1)%3---------为什么要(i+1)%3这样一个表达式再赋值给i呢?

    展开全文
  • 实现按下一个按键,对应的数码管和点阵显示相应的数字 代码: /* *******************数码管按键综合项目********************* */ #include <reg52.h> int local(unsigned int i); sbit ADDR0 = P1^0; ...

    操作:

    实现按下一个按键,对应的数码管和点阵显示相应的数字

    代码:

    /*  *******************数码管按键综合项目********************* */

    #include <reg52.h>

    int local(unsigned int i);

    sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;

    sbit key1 = P2^4; sbit key2 = P2^5; sbit key3 = P2^6;

    unsigned char leds[] = {  0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,  0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E };

    unsigned char ledss[10][8]={  {0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55},  {0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3},  {0x81,0x81,0x9F,0x81,0x81,0xF9,0x81,0x81},  {0x81,0x81,0x9F,0x81,0x81,0x9F,0x81,0x81},  {0x8F,0x87,0x93,0x99,0x9C,0x00,0x00,0x9F},  {0x81,0x81,0xF9,0x81,0x81,0x9F,0x81,0x81},  {0x81,0x81,0xF9,0x81,0x81,0x99,0x81,0x81},  {0x83,0x83,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F},  {0x81,0x81,0x99,0x81,0x81,0x99,0x81,0x81},  {0x81,0x81,0x99,0x81,0x81,0x9F,0x81,0x81}, };

    unsigned int locals = 0;

    void main() {

     ADDR3 = 0;  

    ENLED = 0;

     EA = 1;  

    TMOD = 0x01;

     ET0 = 1;  

    TH0 = 0xFC;  

    TL0 = 0x67;  

    TR0 = 1;

     //开启九位输入键,其它键关闭

     P2 = 0xF1;

     while(1)  { 

    //得到键位所在KeyIn1输入列  

     if(key1==0)  

     {    locals = local(1);

       TR0 = 1;      

     }   

    //得到键位所在KeyIn2输入列  

     else if(key2==0)   {    

    locals = local(2);    

    TR0 = 1;    }   

    //得到键位所在KeyIn3输入列  

     else if(key3==0)   {   

     locals = local(3);    

    TR0 = 1;  

     }

     }

     //对应键位赋值数码管

    }

    void InterruptTimer0() interrupt 1 {

     static unsigned char i = 0;  

    TH0 = 0xFC;  TL0 = 0x67;  P0 = 0xFF;  ADDR3 = 0;

     switch(i)  {  

     case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0; P0 = ledss[locals][i];i++;break;  

     case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0; P0 = ledss[locals][i];i++;break;   

    case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0; P0 = ledss[locals][i];i++;break;   

    case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0; P0 = ledss[locals][i];i++;break;   

    case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1; P0 = ledss[locals][i];i++;break;  

     case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1; P0 = ledss[locals][i];i++;break;  

     case 6: ADDR0 = 0;ADDR1 = 1;ADDR2 = 1; P0 = ledss[locals][i];i++;break;   

    case 7: ADDR0 = 1;ADDR1 = 1;ADDR2 = 1; P0 = ledss[locals][i];i++;break;   

    case 8: ADDR3 = 1;ADDR0 = 0;ADDR1 = 0;ADDR2 = 0; P0 = leds[locals];i++;break;    

     case 9: ADDR3 = 1;ADDR0 = 1;ADDR1 = 0;ADDR2 = 1; P0 = leds[locals];i=0;break;   default: break;  } }

    int local(unsigned int i) {

     unsigned int b;  

    //判断当前键位

     switch(i)  {

    //得到键位所在KeyIn1输入列

     case 1:      

    P2 = 0xF7;  //仅仅开启out1    

     if(key1 == 0){      b = 1;     }     

    P2 = 0xFB;  //仅仅开启out2     

    if(key1 == 0){      b = 4;     }   

     P2 = 0xFD;  //仅仅开启out3    

     if(key1 == 0){      b = 7;     }   break;

    //得到键位所在KeyIn2输入列  

     case 2:      

    P2 = 0xF7;  //仅仅开启out1     

    if(key2 == 0){      b = 2;     }     

    P2 = 0xFB;  //仅仅开启out2     

    if(key2 == 0){      b = 5;     }    

    P2 = 0xFD;  //仅仅开启out3    

     if(key2 == 0){      b = 8;     }      

     break;

    //得到键位所在KeyIn3输入列   

    case 3:    

    P2 = 0xF7;  //仅仅开启out1    

     if(key3 == 0){      b = 3;     }    

     P2 = 0xFB;  //仅仅开启out2    

     if(key3 == 0){      b = 6;        }    

    P2 = 0xFD;  //仅仅开启out3     

    if(key3 == 0){      b = 9;     }   

     break;

      default: break;  }

     //重置开启九位输入键,其它键关闭

     P2 = 0xF1;  

    return b; }

     

    转载于:https://www.cnblogs.com/fire-7/p/7456919.html

    展开全文
  • 名称:按键控制 8X8LED 点阵屏显示图形 说明:每次按下 K1 时,会使 8X8LED点阵屏循环显示不同图形。本例同时使用外部中断和定时中断。
  • 点阵的简单控制按键控制字体移动,静态显示等。
  • 寸2位数码管厂家但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时流控制各个数码管的...
  • 单片机作为可编程器件,简化了电路的设计、方便了逻辑设计,从此再也不用使用一大堆电路做硬件逻辑了。拆开任何一件功能稍微复杂一点电子产品,里边都可以看到单片机的身影。学会单片机对找工作也很有利,而且待遇还...
  • 51单片机按键控制数码管加减和秒表

    万次阅读 多人点赞 2018-12-23 15:59:09
    //等待按键释放 } } if(k2==0) { delay_ms(10); if(k2==0) { if(num==0) num=60; num--; while(!k2); //等待按键释放 } } if(k3==0) { delay_ms(10); if(k3==0) { num=0; ...
  •  本文采用PIC 16F877A单片机为主要核心控制元件,设计了一个32×32 LED点阵模块的书写显示屏。它主要由光笔模块和点阵显示模块组成,光笔模块利用光敏电阻的光电特性,实现微亮检测功能。光笔反馈信号经放大器LM324...
  • 16x16点阵显点,采用单片机控制的简单点阵显示,具有卷动和滚动两种显示方式。
  •  本文采用PIC 16F877A单片机为主要控制元件,设计了一个32×32 LED点阵模块的书写显示屏。它主要由光笔模块和点阵显示模块组成,光笔模块利用光敏电阻的光电特性,实现微亮检测功能。光笔反馈信号经放大器LM324比较...
  • 单片机LED点阵控制

    2021-01-15 09:21:38
    文章目录系列文章目录前言一、74HC595芯片的说明及其使用二、LED点阵1![](https://img-blog.csdnimg.cn/20210115091732803.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9...
  •  //确定有按键按下,等待按键弹起,状态始终保持为3,直到按键弹起,状态归零,标志位清零  }  if(flag==1 && swit==1 && left==1 && right==1 && down==1 && reset==1)  {  flag = 0;  //led = 0;...
  • 本文采用PIC 16F877A单片机为主要核心控制元件,设计了一个32×32 LED点阵模块的书写显示屏。它主要由光笔模块和点阵显示模块组成,光笔模块利用光敏电阻的光电特性,实现微亮检测功能。光笔反馈信号经放大器LM324...
  • /* 名称:按键控制 8X8LED 点阵屏显示图形说明:每次按下 K1 时,会使 8X8LED点阵屏循环显示不同图形。本例同时使用外部中断和定时中断。*/#includereg51.h>#includeintrins.h>#define uchar unsigned char#...
  • 单片机控制数码管、点阵、矩阵键盘联合扫扫描,按下矩阵键盘上的键,数字显示在数码管和点阵上。
  • 【51单片机】LED点阵

    2020-09-10 10:08:22
    这次的程序是通过控制LED点阵,点亮一个+号。我们使用的是一个8×8的电子,需要操作16bit,实现对行和列的管理,这点其实和矩阵按键是有些类似,只不过一个是输入,一个是输出,都是通过逐行扫描实现的(矩阵按键...
  • 按键控制8×8LED点阵屏显示图形,附源代码,仿真图,实测可用
  • /* 名称:按键控制 8X8LED 点阵屏显示图形说明:每次按下 K1 时,会使 8X8LED点阵屏循环显示不同图形。本例同时使用外部中断和定时中断。*/#include#include#define uchar unsigned char#define uint unsigned int//...
  • 课程设计题二十二:点阵显示器显示设计 (1)上电后滚动显示学校名称。 (2)按键1按下,滚动显示班级。 (3)按键2按下,滚动显示姓名及学号。 (4)一键开关。 首先找一个差不多的设计 这个设计网上找的,是一个16...
  • 基于51单片机按键控制8×8LED点阵屏显示图形,有Proteus仿真,给初学单片机的同学参考。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,186
精华内容 474
关键字:

单片机按键控制点阵