c语言显示00-99程序,求双段共阳数码管显示00-99循环,要有C语言

2023-05-16

here is the code. enjoy.

#include

#include "gpio.h"

#define LED_PORT                P2

#define LED_DDR                        P2

#define LED_PINs                0xff                //led connected to P3.0 -> P3.7

#define LED_ON(val)                IO_CLR(LED_PORT, val)        //output val on led_port

#define LED_OFF(val)        IO_SET(LED_PORT, val)        //clear val

#define DIG_PORT                P3

#define DIG_DDR                        P3

#define DIG0                        (1<<0)                //digit 0 on P3.0

#define DIG1                        (1<<3)                //digit 1 on P3.3

#define DIG2                        (1<<7)                //digit 2 on P3.7

#define DIGs                        (DIG0 | DIG1 | DIG2)

#define DIG_ON(digs)        IO_CLR(DIG_PORT, digs)        //turn on digs

#define DIG_OFF(digs)        IO_SET(DIG_PORT, digs)        //turn off digs

unsigned char val_disp=90;                        //value to be displayed. 00..99

unsigned char dig_disp=0;                        //dig to be displayed. 0 or DIG_MAX

//a simple multi-tasking OS

//each task has a pre-define time slot (XOS_slot), + an idle slot

//user can add up to 255 tasks (including the idle task).

//each task has to take less than the time slot to finish.

//the os uses tmr0 so no task can utilize tmr0

#define MSB(word_t)                                ((word_t) >> 8)                //highest byte of a word type

#define LSB(word_t)                                ((word_t) & 0xff)        //lowest byte of a word type

//XOS configuration

unsigned char XOS_state;                                //xos state indicator

unsigned char XOS_state_prev;                        //previous state

unsigned short XOS_slot;                                //xos time slot, in terms of timer ticks (1tick=1us for 12Mhz xtal)

void XOS_isr(void) interrupt 1 {                //xos interrupt on tmr0

TF0=0;                                                                //clear flag - done by hardware

//TH0=0xff-(XOS_slot >> 8);                        //reset th0, carry over timing errors

TH0+=-MSB(XOS_slot);

//TL0=0xff-(XOS_slot & 0x00ff);                //reset tlo, carry over timing errors

TL0+=-LSB(XOS_slot);

//XOS_state=(XOS_state==XOS_STATE_MAX)? 0: XOS_state+1;        //update state indicator

XOS_state++;                                                //increment XOS_state;

}

void XOS_init(unsigned short slot) {        //initiate xos to run at slot ticks

//set tmr0 to 16 bit timer operation (mode 1)

TMOD &= 0xf0;                                                //clear tmod's lower 4 bits

TMOD |= 0x01;                                                //not gated, tmr operation, mode 1

TF0=0;                                                                //clear flag - done by hardware

//define slot size, in tmr ticks

XOS_slot=slot;                                                //define xos time slot

//set tmr0

//TH0=0xff-(XOS_slot >> 8);                        //reset th0

TH0=-MSB(XOS_slot);

//TL0=0xff-(XOS_slot & 0x00ff);                //reset tlo

TL0=-LSB(XOS_slot);

//set interrupt

ET0=1;                                                                //enable tmr0 interrupt

EA=1;                                                                //enable all  interrupt

TR0=1;                                                                //turn on tmr0

//set XOS state variables

XOS_state=0;                                                //reset xos_state

XOS_state_prev=XOS_state;                        //reset xos_state_prev

}

//end XOS configuration

void mcu_init(void) {                                        //initiate the mcu

DIG_OFF(DIGs);                                                //all digits off

IO_OUT(DIG_DDR, DIGs);                                //digs as output

LED_OFF(LED_PINs);                                        //all leds off

IO_OUT(LED_DDR, LED_PINs);                        //led_pins as output

}

//dummy task 0 - display digits

void XOS_task0(void) {

//7-segment display data

const unsigned char LED_7SEG[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98};

unsigned char dig;                                        //the dig to be turned on

unsigned char val;                                        //value (0..9) to be displayed

DIG_OFF(DIGs);                                                //turn off all digits

switch (dig_disp) {

case 0:        val=val_disp % 10; dig = DIG0; dig_disp+=1; break;

case 1: val=val_disp / 10; dig = DIG1; dig_disp=0; break;

//put more digs here if you have more than 2 7-segment displays

}

LED_PORT = LED_7SEG[val];                        //display val

DIG_ON(dig);                                                //turn on the current dig display

}

//xos task 1 - increment val_disp

void XOS_task1(void) {

static unsigned char task1_count=0;        //how many times task1 has run

task1_count++;                                                //update task1_count

if (task1_count==10) {                                //val_disp increments on every 10th run of XOS_task1

task1_count=0;                                        //reset task count

val_disp+=1;                                        //if task1 has run 10 times, increment val_disp

if (val_disp==100) val_disp=0;        //make sure val_disp between 0..99

}

}

//xos task2 - not used

void XOS_task2(void) {

}

int main(void) {

mcu_init();                                                        //initiate the mcu

XOS_init(10000);                                        //time slot to be 10ms (10000us)

while (1) {

//each slot has a fixed length

switch (XOS_state) {

case 0:                XOS_task0(); break;                //run task0

case 1:         XOS_task1(); XOS_state=0; break;                //run task1

//case 2:                XOS_task2(); /*XOS_state=0;*/ break;                //run task2 /*, and reset XOS_state to eliminate the idle process*/

//add additional user tasks here

default:        XOS_state=0; break;                //reset XOS_state

}

//idle till the next tmr0 interrupt / xos time slot to run out

while (XOS_state == XOS_state_prev) continue;

XOS_state_prev=XOS_state;                                //update xos_state_prev

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言显示00-99程序,求双段共阳数码管显示00-99循环,要有C语言 的相关文章

  • 第九章、Vue3中<script setup>语法糖

    摘要 xff1a lt script setup gt 语法糖 xff1a https cn vuejs org api sfc script setup html 一 lt script setup gt 语法糖用法 1 1 基本语法 要
  • python生成器及应用场景

    概念 xff1a 生成器是一个特殊的程序 xff0c 可以被用作控制循环的迭代行为 xff0c 是一边循环一边计算的机制 xff0c 称为generator 生成器是迭代器的一种 xff0c 使用yield返回值函数 xff0c 每次调用y
  • 关于while循环终止循环的三种方式

    1 不满足while循环条件 xff0c 直接跳出循环 xff1b 2 利用break xff1a break是跳出整个循环 xff0c 直接执行跳出循环后的下面的代码 xff1b 3 利用continue xff1a continue是终
  • 【Spring Boot组件集成实战】集成支付宝支付服务

    更多精彩内容 xff0c 请访问 Spring Boot组件集成实战专栏 xff01 推荐项目 xff1a 一套基于Spring Boot 43 Layui的内容管理系统 快速开发脚手架 xff08 含完整的开发文档 演示网址等 xff09
  • 字符指针char*用法总结

    1 char 指向单个字符 char ch 61 39 w 39 char pc1 61 amp ch cout lt lt pc1 lt lt endl w 2 char 指向字符数组 char arr 61 34 abcdef 34 c
  • 二维数组传参(二维数组作为函数参数)

    传递参数是二维数组 二维数组传参 xff0c 函数形参的设计只能省略第一个 的数字 xff1b 因为对于二维数组 xff0c 可以不知道有多少行 xff0c 但必须知道一行多少个元素 xff1b include lt iostream gt
  • c++ new一个结构体 初始化

    new和delete运算符是用于动态分配和撤销内存的运算符 xff0c 必须成对适用 xff1b new用法 开辟单变量地址空间 开辟数组空间 xff1b new作用 使用new运算符时必须已知数据类型 xff0c new运算符会向系统堆区
  • linux分区(详细介绍)

    有20G大小的空间 xff0c linux至少要分3个分区 xff1a 根分区 swap区交换空间 boot区 1 点击 空闲 xff0c 标准分区 xff0c 点击 创建 2 创建一个boot分区 xff1a linux启动时需要一些引导
  • ubuntu系统拷贝到另外一台电脑上的VMware上(详细简单)

    1 找到原始电脑上ubuntu的文件夹 xff0c 并将整个文件夹拷贝至U盘 打开VMware 右键原电脑中的ubuntu系统 设置 选项 工作目录 回到windows打开E盘找到文件夹ubuntu进行拷贝 2 将U盘内容拷贝到另一台电脑
  • drawio使用

    复制样式 格式刷 选定图形A的样式 ctrl 43 shift 43 c xff0c 选定另一个待处理图形B按 xff08 ctrl 43 shift 43 v xff09 xff0c 即将图形A的样式复制到图形B上了 xff1b 微调线条
  • c++ STL stack容器

    先进后出 include lt iostream gt include lt stack gt using namespace std 基本数据类型 void test stack lt int gt s 入栈 for int i 61 0
  • 类模板-----定义、调用、做函数参数、派生子类(c++)

    类模板的定义 调用 类模板做函数参数 include lt iostream gt using namespace std 类模板定义 template lt typename T gt class person public person
  • c语言中结构体数组的引用,【C语言入门教程】7.2 结构体数组的定义和引用

    7 2 结构体数组的定义和引用 当需要使用大量的结构体变量时 xff0c 可使用结构体定义数组 xff0c 该数组包含与结构体相同的数据结构所组成的连续存储空间 如下例所示 xff1a struct student stu a 50 声明长
  • OpenStack保姆级别安装教程

    安装步骤 OpenStack简介准备工作安装NTP服务安装yum库 xff08 所有节点 xff09 提前设置一下环境变量安装MySQL安装RabbitMQ安装Menmcached 安装etcd xff1a 安装OpenStack Serv
  • 【Spring Boot组件集成实战】集成微信支付服务

    更多精彩内容 xff0c 请访问 Spring Boot组件集成实战专栏 xff01 推荐项目 xff1a 一套基于Spring Boot 43 Layui的内容管理系统 快速开发脚手架 xff08 含完整的开发文档 演示网址等 xff09
  • 使用itext创建PDF文档-导出大表格-每页显示标题-项目实战

    导出PDF文件 下载 itext jar 包 开源中国 的地址 xff1a https www oschina net p itext import java io import java util import java util Lis
  • Linux系列之——更改语言为中文

    查看当前系统语言环境 xff1a echo LANG 查看安了哪些中文语言包 locale a grep 34 zh CN 34 没有输出 xff0c 说明没有安装 xff0c 输入下面的命令安装 yum groupinstall 34 f
  • 回调函数介绍和使用方法以及使用例子

    回调函数在日常开发中使用广泛 xff0c 什么是回调函数 xff0c 为什么要使用回调函数 xff0c 如何使用回调函数 xff0c 本文将结合一个例子说明 什么是回调函数 xff1f 回调函数也是函数 xff0c 通俗的来说回调函数是由开
  • mysql mingw_使用mingw编程,如何操作mysql 数据库,最好有例程。

    展开全部 下载一个mingw的utils包 xff0c 用0 3版本 xff0c 0 41版本有问题 拷贝mysql lib opt下的62616964757a686964616fe59b9ee7ad9431333332623332libm

随机推荐