⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display222.c

📁 好东西 关于单片机的一些重要的代码本程序是操作系统中比较典型的线程同步算法中的哲学家进餐问题,为防止死锁,采取了两个条件(筷子空闲)同时满足时再允许进餐的办法来解决。期望与大家一起学习交流!
💻 C
字号:
/******************************************************************************
实验C示例程序,已运行调试通过,仅提供参考。
     实验题目:在数码管上各位显示不同的数字 
    相关说明:程序依次在数码管上显示0-5这六个字符
******************************************************************************/
#include"at89x52.h"
#define uchar unsigned char
//------------------------显示字符码----------------------------------
//                   0    1    2    3    4    5    6    7  
const uchar Key_Number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
//                   8    9    a    b    c    d    e    f
                   ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//数码管各显示位: 0位  1位  2位  3位  4位
uchar dis_bit[6]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF}; 
uchar buffer_dis[6];                  //显示字符缓冲区
uchar ptr_bit=0x00;                  //当前显示位指针 
long int disdata=0; 
uchar counter=0;
void device_ini(void)                 //初始化系统
{ 
   TL0=0xD8;                     //置定时器初值0xB1DF
   TH0=0xF0;
   TMOD=0x01;                   //设定定时器/计数器0工作方式为1
   IE=0x82;                       //允许全局中断,允许定时器/计数器0溢出中断
   TR0=0x01;                     //启动定时器/计数器0
}
/******************************************************************************
显示缓冲区中的字符码
******************************************************************************/
void display(void)
{
  if(ptr_bit<=0x05)                  //在0-5位循环显示
  {
     P1=dis_bit[ptr_bit];             //设置当前显示位
     P0=buffer_dis[5-ptr_bit];         //在当前位显示显示缓冲区中的字符码
     ptr_bit++;                     //准备在下一位显示
  }
  else
     ptr_bit=0x00;                  //指针越界则清零
} 
//把当前要显示的数送缓冲区
void print(long disdata)               //将要输出的数按位分解成单独的数,送到各自对应

{                                 //最高为6位
    buffer_dis[0]=Key_Number[disdata&0x0f];           //分解个位
    buffer_dis[1]=Key_Number[(disdata>>4)&0x0f];      //分解十位
    buffer_dis[2]=Key_Number[(disdata>>8)&0x0f];       
    buffer_dis[3]=Key_Number[(disdata>>12)&0x0f];
    buffer_dis[4]=Key_Number[(disdata>>16)&0x0f];
    buffer_dis[5]=Key_Number[(disdata>>20)&0x0f];     //分解最高位
}
void timer0_over(void) interrupt 1      //定时器/计数器0中断服务程序
{
   TL0=0xD8;                     //置初值0xE0C0 f0d8
   TH0=0xF0;
   counter++;
   if(counter==0xff)
   {
     disdata++;
     print(disdata);
   }
   display();                        //调用显示函数

}
/**********************************主函数*************************************/
void main()
{
  device_ini(); //初始化系统
  print(0x123456); //送当前要显示的数到缓冲区
 while(1)
 ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -