b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

LED点阵写显示屏的程序电路图

电脑杂谈  发布时间:2020-07-31 01:04:05  来源:网络整理

led点阵书写显示屏原理_led点阵书写屏程序_led点阵书写显示屏程序

LED驱动板PCB:

LED驱动板:

光笔PCB:

光笔原理图:

主控板PCB:

主控板原理图:

//////////////////////////////////自己归档h./////// // //////////////////////////////////////// ///

#include

#define写0x01 //写写作

#define擦除0x00 //擦除

#define key_enter 1 //确定

#define key_esc 2 //退出/取消

#define key_words_modle 3 //多词连接

#define key_light_level 4 //屏幕亮度级别

#define key_sleep_time 5 //超时待机时间设置

#define key_fanxian 6 //反向显示操作

#define key_cachu 7 //擦除操作

#define key_tuoyi 8 //拖动对象

#define key_all_screen_del 9 //整个屏幕擦除

#define key_tuoyi_quxiao 10 //选择对象的拖动内容后取消

#define key_crease 11 //数据加一(待机时间,亮度级别)

#define key_decrease 12 //数据减一

// 24M晶体振荡器

#define _TH0_TL0_(65536-50000)

#define HI(_TH0_TL0_ / 256)//将值分配给高8位

#define LO(_TH0_TL0_%256)//将值分配给低8位

#define M 40 //(2000/50)1秒内累积50个中断

typedef char(* size)[4]; //将大小定义为指向32X4二维数组第一个地址的类型

typedef unsigned char uchar;

外部尺寸点[4];

外部uchar LED_CODE [5] [4];

外部uchar LED_ROW,LED_LINE;

外部uchar ROW_TEMP;

外部uchar键;

led点阵书写显示屏程序_led点阵书写显示屏原理_led点阵书写屏程序

extern uchar li_level;

外部uchar N;

extern uchar men_lig;

外部uchar sleepmin;

外部uchar分钟,秒;

外部uchar xdata LEDDATA0 [32] [4],LEDDATA1 [32] [4],LEDDATA2 [32] [4],LEDDATA3 [32] [4],LEDDATA4 [32] [4];

void LED_GAI(uchar obj_mem [32] [4],uchar Opera,uchar LED_ROW,uchar LED_LINE);

void one_word(uchar dat_addr [32] [4],uchar caozuo);

void sys_init();

void one_word(uchar dat_addr [32] [4],uchar caozuo);

uchar getkey();

void lightlev(uchar显示[32] [4]);

void sleeptim(uchar表示[32] [4]);

void fanxian(uchar LEDDATA [32] [4]);

void delay_us(int us);

void LEDcachu(uchar LEDDATA [32] [4]);

void obj_move(uchar led_data [32] [4]);

void fourwords();

void fou_show();

void dis_play(uchar show_obj [32] [4]);

void del_all(uchar obj [32] [4]);

void shu_ma_g();

// void daiji();

void digital_show(uchar行,uchar行);

void output();

无效输入(uchar字);

void saomiao();

void light();

// void input(uchar word);;

////////////////////////////////// END ////////// // ////////////////////////////////////////

/////////////////////////////////文件main.c ////////// ////////////////////////////////////////// //

// ********************************************* **********************************

//工作方式: LED书写点阵显示屏

//作者: 陈玉玺,黄晓光,唐敏健

//时间: 2010/04〜2010/05

///主控制器: IAP12C5A62S2(STC12系列)

//晶体: 24MHZ

//功能模块分析:

//系统具有4个功能模块:

// 1.点亮并绘制灯光(即写入功能,默认启动)

led点阵书写显示屏原理_led点阵书写屏程序_led点阵书写显示屏程序

// 2.多字符连接

// 3.自动调光功能

// 4.超时待机功能

//以上功能的操作是:

// 1.反向显示(可用于功能1和功能2模块)

// 2.整个屏幕被删除(可用于功能1和功能2模块)

// 3.擦除光笔(可用于功能1和功能2模块)

// 4.拖动对象(可用于功能1和功能2模块)

// 5.编写文字(可用于功能1和功能2模块)PS: 由于时间问题,

//并且此功能主题没有要求,暂时将其保留

// 6.自动调光参数设置,即调整用户喜欢的屏幕亮度级别,

//同时,系统将根据环境光强度的变化自动使LED屏幕在此级别变暗

// 7.超时待机时间设置

//

//联系人: 唐敏健(15014225360/380467850@qq.com)

//

// ********************************************* **** ***********************************

#includemyself.h

#include

#include

uchar LED_CODE [5] [4] = / * LED灯的列代码,每个LED灯的代码为5位数据(0到2 ^ 5),每次需要输出1位用于同时显示32列LED灯的数据,共5次. * /

{/ *由于工作频率高,这些数据在内部RAM中定义* /

0X00,0X00,0XFF,0XFF,

0X00,0XFF,0X00,0XFF,

0X0F,0X0F,0X0F,0X0F,

0X33,0X33,0X33,0X33,

0X55,0X55,0X55,0X55

};

uchar LED_ROW,LED_LINE,N; //存储当前光笔坐标的全局变量,在系统初始化时将其设置为99(大于32的任何数字)

uchar ROW_TEMP; //扫描过程中行坐标的“临时变量”(全局变量),以便在输入中断后LED_ROW = ROW_TEMP进行保存

uchar KEYS = 0; //存储按下的键的编号,初始化为0,

uchar li_level = 10;

uchar men_lig = 10;

uchar min = 0,sec = 0;

uchar sleepmin = 5; //默认超时为5分钟待机状态

//位pen_key = P3 ^ 3; //光笔按键P3 ^ 3为INT0,因此在初始化阶段应关闭外部中断0

//位OUT_EN = P1 ^ 7;

uchar xdata LEDDATA0 [32] [4],LEDDATA1 [32] [4],LEDDATA2 [32] [4],LEDDATA3 [32] [4],LEDDATA4 [32] [4];

//用于存储整个屏幕数据的数组,屏幕数据量为32/8 * 32字节

大小点[4]; //二维数组的指针数组

led点阵书写屏程序_led点阵书写显示屏原理_led点阵书写显示屏程序

void delay_us(int us)

{

while(us> 0)

{

_nop _(); _ nop _(); _ nop _(); _ nop _();

_nop _(); _ nop _(); _ nop _(); _ nop _();

_nop _(); _ nop _(); _ nop _(); _ nop _();

_nop _(); _ nop _(); _ nop _(); _ nop _();

_nop _(); _ nop _(); _ nop _(); _ nop _(); // 24无操作指令是1US,现在有20个

我们-;

}

}

void main()

{

uchar light_T;

N = 3;

light_T = 0;

继电器= 0;

point [0] = LEDDATA1; point [1] = LEDDATA2;

point [2] = LEDDATA3; point [3] = LEDDATA4;

// **********************

//定时器1初始化

TL0 = _TH0_TL0_%256;

TH0 = _TH0_TL0_ / 256 +(char)CY;

TR0 = 1;

// *****************

// sys_init(); //系统初始化,将4个数组的第一个地址放入point [4]

while(1)

{

one_word(LEDDATA0,写); //扫描一个点并显示它

KEYS = getkey(); // AD扫描键,实际上,在一秒钟之内进行10次键扫描就足够了,无需遵循此dis_play()来扫描至少20次,

//因为人的手不可能在一秒钟内按下10次以上.

//如果在调试过程中发现LED屏幕对光笔的反应较慢,则需要在一秒钟内修改getkey()的时间占用率,

//这也意味着一秒钟内getkey()的执行次数. 可能是这样的: 设置一个计数器,每次dis_play()+1,初始值

//为0,达到1时清除,并调用get_key(),否则不执行get_key().

if(KEYS)// getkey()在检测到按下键时返回键的值,如果没有按下键则返回0

{

切换(键)

{

case key_enter: 中断; //“ OK”在这里毫无意义

led点阵书写屏程序_led点阵书写显示屏程序_led点阵书写显示屏原理

case key_esc: 中断; //不需要退出,已经是最底层了

case key_words_modle: fourwords(); break; //输入多词连接功能

case key_light_level: lightlev(LEDDATA0); break; //调整屏幕亮度等级的参数

case key_sleep_time: sleeptim(LEDDATA0); break; //调整超时待机的超时时间

case key_fanxian: fanxian(LEDDATA0); break; //反向显示操作

case key_cachu: LEDcachu(LEDDATA0); break; //擦除操作

case key_tuoyi: obj_move(LEDDATA0); break; //拖动对象

case key_all_screen_del: del_all(LEDDATA0); break; //

case key_tuoyi_quxiao: 中断; //“在确认对象选择后取消”在这里毫无意义

case key_crease: 中断; //“ Data + 1”在这里毫无意义

case key_decrease: 中断; //“ Data-1”在这里毫无意义

默认值: break; //如果没有匹配的键,则直接退出. 尽管此处没有发生,但出于安全原因添加它

}

}

KEYS = 0;

light_T ++;

if(light_T> 5){light_T = 0; light();} //一秒钟自动变暗约4次

}

}

void one_word(uchar dat_addr [32] [4],uchar caozuo)//秒的一部分,大约为1/20秒. 扫描一个点并将其显示在LED屏幕上,

//并更新数码管的显示

{

如果(!pen_key)

{saomiao(); //当按下光笔上的按钮时,它将进行扫描. 发光笔在这里占用时间. 笔也是大笔,3DU33

//大约需要5uS来计算响应时间保险点. 这样,在最坏的情况下都需要进行每次扫描

//长度为: T =(5 + 5)* 32 * N +(5 + 5)* N = 330N(uS). N是32列LED的高->低转换时间,也是<

//计数器溢出的次数.

LED_GAI(dat_addr,caozuoled点阵书写显示屏程序,LED_ROW,LED_LINE); //修改当前屏幕数据内容以更新下面的显示,文字表示LED_GAI()函数

//对LEDDATA1 [LED_ROW] [LED_LINE / 8]中LED_LINE%的第8位数据执行“和0”操作.

//因为74HC595输出端口的低电平对应于选通此列.

//相反,如果参数为擦除,则对数据的同一位执行“或1”操作

//此外,如果未按下pen_keyled点阵书写显示屏程序,则不进行更改就不会更新数据.

}

其他

{LED_ROW = 99; LED_LINE = 99;} //当不按下光笔上的按钮时,即,当用户不打算书写时,光笔的当前坐标值显示为99 ,99.

shu_ma_g(); //数码管更新静态显示

dis_play(dat_addr); // LED更新显示,无论是否执行扫描,都必须显示LED屏幕,这会占用时间并占用大部分CPU时间

//使得人眼无法检测到闪烁,如果显示时间比率不是>>扫描时间比率,则人眼会感觉到LED闪烁或光线暗淡扫描

//(“无突出显示”)太亮,显示内容(“突出显示”)不够亮

//此功能主要分配时间以达到每秒至少扫描20次的效果

}

void LED_GAI(uchar obj_mem [32] [4],uchar Opera,uc


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-289309-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...