shizhong.rar

  • PUDN用户
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 20
    下载次数
  • 2009-11-23 20:12
    上传日期
我不是不知道也是不知道反正不知道你怎么猜就是什么了
shizhong.rar
  • shizhong.c
    5KB
内容介绍
/*********************************************************************** * 文件名:7SegLEDCounter.c * 功能:简易电子时钟,LED数码管显示 p32---时调整 p33---分调整,开机显示120000 * 入口参数:无 * 出口参数:无 * 硬件说明: * 1 接8位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0口JP51. * 2 接8位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的P2口JP52. * 3 接8位数码管的显示位线。将数码管部份的显示位口 JP48接到CPU部份的P3口JP53的p3.2,p3.3. ***********************************************************************/ #include <reg51.h> #include <intrins.h> unsigned char data dis_digit; unsigned char key_s, key_v; unsigned char code dis_code[11]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff}; unsigned char data dis_buf[8]; // dis_buf --- 显于缓冲区基地址 unsigned char data dis_index; unsigned char hour,min,sec; unsigned char sec100; sbit K1 = P3^2; sbit K2 = P3^3; bit scan_key(); void proc_key(); void inc_sec(); void inc_min(); void inc_hour(); void display(); void delayms(unsigned char ms); void main(void) { P0 = 0xff; P2 = 0xff; TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式 TH1 = 0xdc; TL1 = 0; TH0 = 0xFC; TL0 = 0x17; hour = 12; min = 00; sec = 00; sec100 = 0; dis_buf[1] = dis_code[hour / 10]; // 时十位 dis_buf[2] = dis_code[hour % 10]; // 时个位 dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 dis_buf[5] = dis_code[sec / 10]; // 秒十位 dis_buf[6] = dis_code[sec % 10]; // 秒个位 dis_digit = 0xfd; // dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, // 选通P2.0口数码管 dis_index = 1; // dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 TCON = 0x01; IE = 0x8a; // 使能timer0,1 中断 TR0 = 1; TR1 = 1; key_v = 0x03; while(1) { if(scan_key()) { delayms(10); if(scan_key()) { key_v = key_s; proc_key(); } } } } bit scan_key() { key_s = 0x00; key_s |= K2; key_s <<= 1; key_s |= K1; return(key_s ^ key_v); } /**************************************************************************** * 名称:proc_key() * 功能:按键控制时和分的整调 * 入口参数:key * 出口参数:无 ****************************************************************************/ void proc_key() { EA = 0; if((key_v & 0x01) == 0) // K1 { inc_hour(); } else if((key_v & 0x02) == 0) // K2 { min++; if(min > 59) { min = 0; } dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 } EA = 1; } /**************************************************************************** * 名称:inc_timer0() * 功能:定时器0中断服务程序, 用于数码管的动态扫描 * 入口参数:dis_buf[],dis_digit * 出口参数:无 ****************************************************************************/ void timer0() interrupt 1 { TH0 = 0xFC; TL0 = 0x17; P2 = 0xff; // 先关闭所有数码管 P0 = dis_buf[dis_index]; // 显示代码传送到P0口 P2 = dis_digit<<1; // dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管 dis_index++; // dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 } void timer1() interrupt 3 { TH1 = 0xdc; sec100++; if(sec100 >= 100) { sec100 = 0; inc_sec(); } } /**************************************************************************** * 名称:inc_sec() * 功能:控制秒的显示 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void inc_sec() { sec++; if(sec > 59) { sec = 0; inc_min(); } dis_buf[5] = dis_code[sec / 10]; // 秒十位 dis_buf[6] = dis_code[sec % 10]; // 秒个位 } /**************************************************************************** * 名称:inc_min() * 功能:控制分的显示 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void inc_min() { min++; if(min > 59) { min = 0; inc_hour(); } dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 } /**************************************************************************** * 名称:inc_hour() * 功能:控制时的显示 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void inc_hour() { hour++; if(hour > 23) { hour = 0; } if(hour > 9) dis_buf[1] = dis_code[hour / 10]; // 时十位 else dis_buf[1] = 0xff; // 当小时的十位为0时不显示 dis_buf[2] = dis_code[hour % 10]; // 时个位 } /**************************************************************************** * 名称:delayms() * 功能:延迟毫秒。 * 入口参数:ms * 出口参数:无 ****************************************************************************/ void delayms(unsigned char ms) { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } }
评论
    相关推荐
    • 数据库课程设计
      一个数据库课程设计,access管理工具实现,用的是窗体!
    • 数据库课程设计
      数据库课程设计十分完整有需要的请下载啊谢谢
    • 数据库课程设计
      广东工业大学数据库课程设计,可视化界面连接数据库,delphi7
    • 数据库课程设计
      数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述
    • 数据库课程设计
      数据库课程设计》由周爱武、汪海威、肖云编著,遵循数据库课程设计的具体要求,独立于具体的数据库教材,从实际应用系统的需求着手,引导读者逐步完成数据库设计全过程,重点讲解数据库系统的需求分析、概念设计、...
    • 数据库课程设计
      数据库课程设计人事管理系统 数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计...
    • 数据库课程设计
      数据库课程设计,基于visual basic自助银行管理系统,界面很清爽,实用。同学都说好,所以就上传了!!!
    • 数据库课程设计
      数据库课程设计 里面有详细的文档资料 包含数据库一切的图 以及生成的数据库表文件 期末得分为优秀
    • 数据库课程设计
      可以作为数据库课程设计,也可以作为Java的课程设计,内容全面。本资源转载的,非本人原创。用于交流学习,特此申明!
    • 数据库课程设计
      数据库课程设计蓝天大学学生管理系统 2.商店信息管理系统 3.实验室机房收费管理系统 4.图书馆资料检索系统 5.企业库存管理系统 6.仓库管理系统 7.工程项目管理系统 8.教材管理系统 9.企业人事管理系统 10.企业财务...