[size=13.333333969116211px]1) 单个按键与多个数码管—点阵(位操作—输入与字节操作—输出)—动态 [size=13.333333969116211px]1. 多个按键 → 键盘与多个LED灯—最小系统—输出扩展与扫描输入口 [size=13.333333969116211px]a) 多个按键,单个LED灯—动态输入—扫描函数 [size=13.333333969116211px]b) 多个按键,多个LED灯—动态—扫描函数—数组对照 [size=13.333333969116211px]c) 多个按键,多个LED灯—单数码管—扫描函数—数组对照 [size=13.333333969116211px]d) 键盘,多个LED灯—单数码管 [size=13.333333969116211px]2. 多个按键 → 键盘与多个LED灯—最小系统—输出扩展与扫描输入口 [size=13.333333969116211px]1) 多个按键,单个LED灯—动态输入—扫描函数 [size=13.333333969116211px]2) 多个按键,多个LED灯—动态—扫描函数—数组对照 [size=13.333333969116211px]3) 多个按键,多个LED灯—单数码管—扫描函数—数组对照 [size=13.333333969116211px]4) 键盘,多个LED灯—单数码管 [size=13.333333969116211px]3. 多个按键 → 键盘、数码管与点阵—最小系统—输入与输出扫描 [size=13.333333969116211px]a) 多个按键,多个LED灯—多数码管—扫描函数—数组对照 [size=13.333333969116211px]b) 键盘,多个LED灯—单数码管—扫描函数—数组对照 [size=13.333333969116211px]c) 多个按键,多个LED灯—单点阵—扫描函数—数组对照 [size=13.333333969116211px]d) 键盘,多个LED灯—多点阵—扫描函数—数组对照 [size=13.333333969116211px]2. 多个按键→ 键盘、数码管与点阵—最小系统—输入与输出扫描 [size=13.333333969116211px]1) 多个按键,多个LED灯—多数码管—扫描函数—数组对照 [size=13.333333969116211px]LED灯是由发光二极管制成的,它的工作原理与标准或说普通二极管相同—单向导电性。将多个发光二极管按照8字形安排,则构成一个7段数码管;按照米字形则构成13段数码管。后者在字节处理方面不是8的倍数,则会带来一些麻烦。前者虽缺一位,但加上小数点位则恰到好处。 [size=13.333333969116211px]  [size=13.333333969116211px]//源程序—4个一组的数码管实现: [size=13.333333969116211px]#define LEDS 4 [size=13.333333969116211px]#include"reg51.h" [size=13.333333969116211px]//led T选iffl1号 [size=13.333333969116211px]//unsigned char code Select[]={0x01,0x02,0x04,0x08,0x10,0x20}; [size=13.333333969116211px]unsigned char code Select[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,}; [size=13.333333969116211px]unsigned char code LED_CODES[]= [size=13.333333969116211px]{ 0xc0,0xF9,0xA4,0xB0,0x99,//0-4 [size=13.333333969116211px]0x92,0x82,0xF8,0x80,0x90,//5-9 [size=13.333333969116211px]0x88,0x83,0xC6,0xA1 ,0x86,//A,b,C,d,E [size=13.333333969116211px]0x8E,0xFF,0x0C,0x89,0x7F,0xBF//F,空格,P,H,.,- [size=13.333333969116211px]}; [size=13.333333969116211px]void main() [size=13.333333969116211px]{ [size=13.333333969116211px]char i=0; [size=13.333333969116211px]long int j; [size=13.333333969116211px]long int n; [size=13.333333969116211px]while(1) [size=13.333333969116211px]{ [size=13.333333969116211px]P2=0; [size=13.333333969116211px]P2=LED_CODES[n]; [size=13.333333969116211px]//P1=1; [size=13.333333969116211px]P1=Select; [size=13.333333969116211px]for(j=3000;j>0;j--); //该LED 模型靠脉冲点亮,第 i 位靠脉冲点亮后,会自动熄来头。 [size=13.333333969116211px]//修改循环次数,改变点亮下一位之前的延时,可得到不同的显示效果。 [size=13.333333969116211px]i++; [size=13.333333969116211px]if(i>5) i=0; [size=13.333333969116211px]n++; [size=13.333333969116211px]if(n>16) n=0; [size=13.333333969116211px]} [size=13.333333969116211px]} [size=13.333333969116211px] [size=13.333333969116211px]l 多数码管循环移动 [size=13.333333969116211px] [size=13.333333969116211px]#include [size=13.333333969116211px]#include [size=13.333333969116211px]#define uchar unsigned char [size=13.333333969116211px]#define uint unsigned int [size=13.333333969116211px]uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, [size=13.333333969116211px]0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//0—F字符阳极管 [size=13.333333969116211px]uchar code DUA_CODE[]={0x08,0x04,0x02,0x01,0x08,0x04,0x02,0x01, [size=13.333333969116211px]0x08,0x04,0x02,0x01,0x08,0x04,0x02,0x01};//右向左移动 [size=13.333333969116211px]uchar code DUA_CODE[]={0x01,0x02,0x04,0x08 };//左向右移动 [size=13.333333969116211px] [size=13.333333969116211px]******关于移位函数的使用—P3=_crol_(P3,1);或P3=_cror_(P3,1);左右移位******* [size=13.333333969116211px]//延时 [size=13.333333969116211px]void DelayMS(uint x) [size=13.333333969116211px]{ [size=13.333333969116211px]uchar t; [size=13.333333969116211px]while(x--) for(t=0;t<120;t++); [size=13.333333969116211px]} [size=13.333333969116211px]//主程序 [size=13.333333969116211px]void main() [size=13.333333969116211px]{ [size=13.333333969116211px]uchar i; [size=13.333333969116211px]while(1) [size=13.333333969116211px]{ [size=13.333333969116211px]for(i=0;i<16;i++) [size=13.333333969116211px]{ [size=13.333333969116211px]P2=0x00; [size=13.333333969116211px]P2=DSY_CODE; //发送段码 [size=13.333333969116211px]P3=DUA_CODE; //发送位码 [size=13.333333969116211px]DelayMS(10); [size=13.333333969116211px]} [size=13.333333969116211px]} [size=13.333333969116211px]} [size=13.333333969116211px] [size=13.333333969116211px]2) 键盘,多个LED灯—单数码管—扫描函数—数组对照 [size=13.333333969116211px] [size=13.333333969116211px]3) 多个按键,多个LED灯—单点阵—扫描函数—数组对照 [size=13.333333969116211px] [size=13.333333969116211px]4) 键盘与点阵 [size=13.333333969116211px]字母输入与实现技术 [size=13.333333969116211px]文本显示技术 [size=13.333333969116211px]多个LED灯,多个按键 → 键盘 [size=13.333333969116211px]A) 单“位”—P口1位--单个灯—位输出,单个按键控制—硬控制与软控制 [size=13.333333969116211px]一个按键,一盏照明灯,一个继电器。硬件接口问题—线路连接、硬件硬驱动问题(程序称为软驱动)。 [size=13.333333969116211px] 说明: [size=13.333333969116211px]硬件特性,驱动与控制信号,程序编写 [size=13.333333969116211px]由继电器引出的强电驱动电器的控制问题,如电动机—交流电机、直流电机、步进电机、伺服电机;单项或多项 [size=13.333333969116211px]
|