自学单片机,买了一套开发板,进入学习的第 3 阶段:8 位共阴极数码管。刚刚接触了锁存器的用法,写在这儿用于备份……
程序就是利用锁存器,动态显示数字,使 8 位数码管看起来同时显示不同的字样……
附上源码:(初出茅庐,难免有写的不好的地方,仅作备份之用,欢迎指点,喷子退散……)
#include
#define DATA P1 // 定义 P1 为数据输入
sbit SEG = P0^0; // 定义 段锁存器
sbit BIT = P0^2; // 定义 位锁存器
unsigned char code SEG_CODE[ ] = {0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f}; // 段码 1-8
unsigned char code BIT_CODE[ ] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
// 位码 从 0 位至 7 位
void Delay(unsigned int t);
void main (void)
{
unsigned char i = 0;
while (1) {
SEG = 1; // 关段锁存
DATA = SEG_CODE[i]; // 送段码
SEG = 0; // 开段锁存,指定了某位具体显示什么数字
BIT = 1; // 关位锁存
DATA = BIT_CODE[i]; // 送位码
BIT = 0; // 开位锁存,指定了哪一位显示
Delay(200); // 经测试:200 为佳,过小出现重影,过大出现闪烁
// 20 重影,300 数字抖动,2000 扫描闪烁
i++;
if (i==8) i = 0; // 循环显示
}
}
void Delay(unsigned int t)
{
while (t--);
}
补充一个技巧:
突然某一位想显示小数点了,怎么办?
假如你正在使用 temp[i] 代表某一个显示字符,突然想显示小数点,可以使用temp[i] | 0x80,通过“或”运算实现加上小数点……
关键字:C51 共阴极数码管 基本显示
引用地址:
【C51】源码 2 -- 8 位共阴极数码管的基本显示
推荐阅读最新更新时间:2024-03-16 15:12
c51两个定时器中断冲突_(六)定时器/计数器
一、简介 定时器和计数器是两个名字,但是原理上来说是一样的,都是对脉冲进行计数,区别在于时钟来源,如果来自内部时钟信号,由于内部时钟通常是比较准确的,所以是定时器,如果来自外部引脚,而外部引脚的信号并一定准确,则只对其进行计数,所以是计数器。接下来主要以定时器为主进行简单介绍,计数器类同。 二、时间计算 顾名思义,定时器肯定是和时间有关系的,那么时间是怎么计算的呢,我们以普通51内核为例。如下图(图片来自百度,我觉得他和51不符,所以改了下),通常一个指令周期=2X机器周期=12X时钟周期。而时钟周期又来自晶振。因此晶振频率确定后,那么各个时间也就确定了。 1. 计算内部指令周期 假设晶振频率是12MHz,那么机器周期=1
[单片机]
Keil C51详细设置
一.target名更改 打开Keil后,左侧Project Workspace中的target可改,方法:右击Target——Manage Compnents——双击待修改项即可,若要添加,使用对话框内对应工具栏。 二.optionfor target 设置之TARGET项 1 MEMARY MODEL Small:变量存储在内部ram里. Compact:变量存储在外部ram里,使用页8位间接寻址 Large:变量存储在外部Ram里,使用16位间接寻址. 我们一般使用Small来存储变量,就是说单片机优先把变量存储在内部ram里,如果内部ram不够了,才会存到外部去.Compact的方式要自己通过程序来指定页的高
[单片机]
c51单片机 独立按键
用独立按键实现按一个按键时,数字从F到0递减的变化程序,即每按一次按键,数码管显示字符减一,减到0后重新显示。 #include reg52.h sbit ADDR0= P2^2; sbit ADDR1=P2^3; sbit ADDR2=P2^4; sbit key1=P3^0; unsigned char code ledchar = {0x00,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; bit keysta = 1; void main() { bit backup = 1;
[单片机]
C51单片机发光二极管实例程序集
1、 程序实现功能:让8个排列的LED来回流动着亮1—》...——》8 1《——...《——8 箭头代表LED流动方向,先从1-8然后从8到1依次循环。程序已经测试过,运行正常//大家如果用此代码测试的话注意你的LED接在单片机的那个端口,本代码用的是P2口 #include reg52.h #define uint unsigned int #define uchar unsigned char uchar a,b; uchar code led_array ={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f }; //led显示编码数组,从0xfe——0x7f为从第一个led管到第8个
[单片机]
单片机 msp430 与c51 的区别
一、特点: msp430系列单片机是一种新型的16位单片机,主要特点就是功耗小,速度快,主要开发语言是c。开发环境有iar集成开发环境。 msp430单片机有不同系列,有f系列,c系列。比如f系列msp 40f135表示的是rom是flash型的。常用的是f系列的13系列14系列。13系列的有msp430f133和msp430f135两种。14系列的有msp430f149等。 msp4301f149有60KB的flash和2KB的ram,比起51的算是很大了。如果你想跑操作系统的话就买现在ti公司的新系列的单片机,ram有10k。 c51单片机都被s52单片机代替了。 学习430单片机有了51的基础应该很容易入门。 二、区别: 首先
[单片机]
LED流星雨C51程序
P1口上接8个led灯可以实现流星雨效果,测试成功. #include reg52.h #define uchar unsigned char #define led P1 bit flag=0; uchar code lshift ={0x07,0x03,0x01}; uchar code shift ={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe}; //imitate PWM data uchar code sta0 ={ 0x0f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f, 0xcf,0xcf,0xcf,0x
[单片机]
【C51自学笔记】中断系统
中断 中断概念与中断触发: 中断的概念: CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。 引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统。 结构: 中断嵌套:在中断中再次响应一个中断。 引起CPU中断的根源,称为中断源。 TNT0、TNT
[单片机]
C51指针定义和应用小结
一. 指针变量的定义 指针变量定义与一般变量的定义类似,其形式如下: 数据类型 * 标识符; 表示被定义为基于存储器的指针,无此选项时,被定义为一般指针。这两种指针的区别在于它们的存储字节不同。一般指针在内存中占用三个字节,第一个字节存放该指针存储器类型的编码(由编译时由编译模式的默认值确定),第二和第三字节分别存放该指针的高位和低位地址偏移量。存储器类型的编码值如下: 存储类型I Idata/data/bdata xdata pdata Code 编码值 0x00 0x01 0xFE 0xFF 用于指定指针本身的存储器空间。 char * c_ptr; int * i_ptr; lon
[单片机]