历史上的今天
今天是:2025年07月17日(星期四)
2020年07月17日 | 单片机2——动态数码管的一些实例
2020-07-17 来源:eefocus
1.8只数码管滚动显示单个数字
#include #include unsigned char code duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 显示段码值0~9 unsigned char code weima[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//分别对应相应的数码管点亮,即位码 unsigned char tempdata[8]; void delay(int ms) { unsigned char j; for(;ms>0;ms--) for(j=125;j>0;j--); } void main() { int i; P1=0x7f; for(i=0;i<8;i++) { P0=duanma[i]; delay(2000); P1=_cror_(P1,1); //cror在流水灯中实际效果是左移,而在数码管中就是右移 } } 2.数码管上显示12345,从右往左移动 实现这种功能有几种方法,此处列举两种原理 原理一:从数码管成像原理出发 #include #include unsigned char code duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 显示段码值0~9 unsigned char code weima[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//分别对应相应的数码管点亮,即位码 unsigned char tempdata[8]; void delay(int ms) { unsigned char j; for(;ms>0;ms--) for(j=125;j>0;j--); } void main() { int i,j,k; float K1=0xef,K2=0xef; for(i=0;i<8;i++) { for(k=0;k<50;k++) { for(j=1;j<6;j++) { P1=0xff; P1=K1; P0=duanma[j]; delay(5); K1=_cror_(K1,1); } K1=_crol_(K1,5); } K2=_crol_(K2,1); K1=K2; } 原理二:改变段码的值,使其循环可以首尾相接 #include void delay(unsigned char ms) { unsigned int j; for(;ms>0;ms--) { for(j=125;j>0;j--); } } unsigned char code DuanMa[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf9,0xa4,0xb0,0x99,0x92,0xff,0xff,0xff,0xf9,0xa4,0xb0,0x99,0x92,0xff,0xff,0xff,0xff,0xff,0xff,};// 改变段码的值 unsigned char code WeiMa[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //用于存放4位数码管显示数字的段码 void Display(unsigned char FirstBit,unsigned char Num) { unsigned char i; for(i=0;i P1=0xff; //清空数据,防止有交替重影 P0=TempData[i]; //取显示数据,段码 P1=WeiMa[i+FirstBit]; //取位码 delay(2); // 扫描间隙延时,时间太长会闪烁,太短会造成重影 } } void main() { unsigned int a=8,j; while(1) { j++; if(j==30) { j=0; a++; if(a==26) a=18; } TempData[0]=DuanMa[a-8]; TempData[1]=DuanMa[a-7]; TempData[2]=DuanMa[a-6]; TempData[3]=DuanMa[a-5]; TempData[4]=DuanMa[a-4]; TempData[5]=DuanMa[a-3]; TempData[6]=DuanMa[a-2]; TempData[7]=DuanMa[a-1]; Display(0,8); } }
史海拾趣
|
UC3842是美国Unltmde公司生产的一种性能优良的电流控制型脉宽调制芯片,它具有管脚数量少,外围电路简单等特点,因而得到了广泛的应用。但随着UC3842开关频率的提高,由它所构成的开关电源的保护电路也出现了很多问题。本文分析了UC3842保护电路的 ...… 查看全部问答> |
|
摘 要:针对一些恶劣的电磁环境对随机存储器(RAM)电路误码影响的情况,根据纠错编码的基本原理,提出简单实用的能检查两位错误并自动纠正一位错误的EDAC算法;通过VHDL语言编程设计,由FPGA器件来实现,并给出仿真结果。 关键词:错误检测与纠 ...… 查看全部问答> |
|
我现在有个问题,涉及软件可靠性的,描述如下: (1)当我把一个程序编好烧录好之后,在软件正常跑的过程中,要对保存软件的这片ROM进行安全检验,以保证数据没有发生更改,目前的单片机中都没有找到可以直接操作ROM区域的方式,不知 ...… 查看全部问答> |
|
有时候能加载进来,有时候就出错,,这是为什么呢? 代码如下: REG: [HKEY_LOCAL_MACHINE\\Drivers\\BallPen] \"Index\"=dword:1 \"Prefix\"=\"DAT\" \"Dll\"=\"DataDriver.dll\" \"Order\"=dword:0 加载代码: &n ...… 查看全部问答> |
|
我开发一个驱动程序.sys和一个应用程序.exe,应用程序可以调用加载到内核的驱动 程序,我看资料说驱动程序的派遣函数是运行在应用程序的进线程的上下文中了,那 么我可以获得应用程序的模式(PE加载到内核中)的资料么?然后再驱动里做点东西 可 ...… 查看全部问答> |
|
STM32F103VET62.8寸TFTLCDDriver问题。 #include "includes.h" #include "lcd204.h" #include "fonts.h" typedef struct { vu16 LCD_REG; vu16 LCD_RAM; } LCD_TypeDef; #define LCD_BASE ((u32 ...… 查看全部问答> |




