历史上的今天
今天是:2024年12月30日(星期一)
2021年12月30日 | 8051单片机驱动TM1620任意字符循环显示程序
2021-12-30 来源:eefocus
8051单片机驱动TM1620任意字符循环显示程序
本人亲写,亲测可用

时序图
/**************************************************
名称:STC51驱动TM1620 4位数码管显示
MCU: STC11F06
主频:11.0592晶振
*************************************************/
#include #include #include #define dissetmode 0x02 //显示模式设置 6位8段显示 #define writedatamode_z 0x40 //自动加一方式显存 写数据到显示寄存器 #define writeledmode_z 0x41 //自动加一方式写LED显存命令 #define readkeymode 0x42 //读按键命令 #define readswmode 0x43 //读SW命令 //#define writedatamode_g 0x40 //固定模式 //#define writeledmote_g 0x45 //固定模式写LED显存命令 #define startaddress 0xc0 //自动加1显示的起始地址设置,为00H #define disconmode 0x8F //显示控制,显示开 #define uchar unsigned char #define uint unsigned int uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F unsigned long TmData; // 定义无符号长整型变量TmData uint i; // 定义无符号整形变量 I uchar vol; // 定义无符号字符变量 vol sbit STB=P3^7; //定义端口 3个位声明 sbit CLK=P1^2; sbit DIN=P1^5; void delay(uint z) // 定义延时函数 {undefined uint x,y; for(x=1000;x>0;x–) for(y=z;y>0;y–); } void indate(uchar x) //送八位数据 高位先传 {undefined uchar i; // 这个I是传送数据个数变量 STB=0; for(i=0;i<8;i++) //先求解I=0(只求解一次),在求解I<8为真,然后执行下列语句,,共八次 0110 0101 {undefined CLK=0; // 上升沿传送数据 DIN=(bit)(x&0x01); // 求最右位然后赋值给DIN,对计算结果取位,只取最右边的一位 CLK=1; // 时钟准备下降,传送第一个数据位完毕 x>>=1; // 将传送数据转为二进制后,整体向右移动一位 } CLK=0; // 准备在上升沿传送数据 } void display() // 定义显示函数 {undefined uchar temp[4]; //定义四个变量,即要显示的四个数字 temp[0]=TmData%10000/1000; //先把TmData求余数后再求商,最后在赋值给temp[0],即取出TmData的千位数 temp[1]=TmData%1000/100; //同上 temp[2]=TmData%100/10; temp[3]=TmData%10; DIN=1; CLK=1; STB=1; //初始化 indate(dissetmode); //设置显示模式 STB=1; indate(writedatamode_z); //自动模式 自动加1模式 STB=1; //准备传输数据 for(i=0;i<4;i++) //此处I变量为地址,相当于打开四个位选 { indate(startaddress+i*2); //传地址 indate(a[temp[i]]); //传数据 STB=1; // 数据传输完毕,STB被拉高 } indate(disconmode); //显示控制命令 STB=1; } void main() {undefined while(1) { for(vol=0;vol<9;vol++) { TmData=vol; display(); delay(1000); } } }
上一篇:4个独立式按键控制LED移位
下一篇:51单片机驱动蜂鸣器发声教程
史海拾趣
|
2009年过去了,论坛在大家的努力中度过了,这个过程中管理员可是不分工作时间还是休息时间都在勤恳的为了论坛奉献自己的力量,我最先认识 的就是SOSO她的工作热情让我敬佩,对论坛来说她绝对是100%的努力,还有小志、小娜每天她们都工作台到很晚才 ...… 查看全部问答> |
|
by 千家网 jandar 作者按:面前已经陆续发表了若干个有关IP高清监控系统的基础介绍文章,与一些国外IPC产品的点评,现应一些朋友的要求,发一个IP高清监控系统的设计实例,里面有许多本人在设计过程中碰到的问题,和一些解决的方法,与广大安防从 ...… 查看全部问答> |
|
最近应用一款Onsemi的LED驱动电路,需要测试一下芯片性能,规格书说明该芯片能够在2.7V~5.5V内可以升压,但是我自己测试却只能当输入电压在2.5V~3V内起到升压的作用,如果输入电压再高的话输出电压就和输入电压接近相同,boost失效。 芯片的工作电 ...… 查看全部问答> |
|
我似乎在网上看到如果是双核的话,那每个处理器都有一个中断描述表IDT。那我想问一下每一个处理器他们的中断号都是统一的吗?也就是说第一处理器IDT[0x93]是键盘中断,那第二处理器0x93的IDT[0x93]也一定是键盘中断吗?… 查看全部问答> |
|
最近刚开始整DSP,帮老师调程序,使用TMS320F2812的SPI引脚读写SPI-E2PROM AT25320。由于网上没找着相关资料,对照着AT25320芯片手册自己编程。程序编写之后,开始调试,问题就出来了。我的SPI相关寄存器都设置的对的,是参照TI给的例 ...… 查看全部问答> |
|
小弟 我卡住了好几天了 希望前辈们指教啊我这个程序是产生相位互差90度 出来的波形是 一样的 怎么回事啊 #include <msp430x14x.h>unsigned int flag1=0,flag2=0,num=0; 全局变量void Init_Clock(void) &n ...… 查看全部问答> |
|
在线仿真C8051F021的板子,出现target failed to respond system is being disconnected,请问是怎么回事? KEIL3的环境,用老程序仿真就没问题,没发现新程序哪块改动能影响到这。再说我觉得新程序也不至于影响到仿真啊?仿真中一run就跳出,求达人 ...… 查看全部问答> |




