c语言编程stc秒分小时,【分享】 STC15F104W 做的定时器,附原理图、PCB、C程序
由于热转印没腐蚀好,时间太长把一根10mil的线给蚀断了,跳了一根线
从上往下:
第一个按钮,开启、
开启模式下,4个按钮均无响应
第四个按钮,设置、
设置模式下,第二个按钮减时间,第三个按钮加时间, 再按第四个按钮将设置好的时间写入内部EEROM(写入部分程序没写),红、黄灯在下载时为串口数据指示灯,在工作时,黄灯为开启指示灯同时继电器吸合,定时完毕黄灯灭继电器分离,由于数码管冒号部分未做电路,红灯在开启时为读秒闪烁灯。
以下为C程序:
main.c:
#include"cfg.h"
#include"tm1650.h"
bool set,start,LED,b1,b2,y1,y2;
uchar t,timeout,t2;
void Timer0Init(void) //50毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值
TF0 = 0; //清除TF0标志
}
void Timer0() interrupt 1
{
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值
t++;
t2++;
if (t>=10){
b1=1;
t=0;
}
if (t2>=20){
b2=1;
t2=0;
}
}
void startvoid(){
uchar key;
uchar thetime,timeout2;
thetime=timeout;
t=10;
t2=20;
TR0=1;
P34=0;
P31=0;
thetime--;
timeout2=60;
led=0;
while (1){
if (b1){
b1=0;
P30=led;
led=~led;
}
if (b2){
b2=0;
if (timeout2==0){
if (thetime==0){
P31=1;
P30=1;
TR0=0;
P34=1;
start=0;
break;
}else{
thetime--;
}
timeout2=59;
}else{
timeout2--;
}
displaytm1650(1,LED7Code0[thetime/10]);
displaytm1650(2,LED7Code0[thetime%10]);
displaytm1650(3,LED7Code0[timeout2/10]);
displaytm1650(4,LED7Code0[timeout2%10]);
}
}
displaytm1650(1,LED7Code0[timeout/10]);
displaytm1650(2,LED7Code0[timeout%10]);
}
void setvoid(){
uchar key;
t=10;
TR0=1;
led=0;
while (1){
if (b1){
b1=0;
if (!led){
displaytm1650(0x48,0x08);
led=~led;
}else{
displaytm1650(0x48,(6<<4)|0x09);
led=~led;
}
}
key = getkeytm1650();
if (key==0x47 && set){
while (1){
key=getkeytm1650();
if (key!=0x47){
break;
}
}
TR0=0;
set=0;
displaytm1650(0x48,(6<<4)|0x09);
break;
}
if (key==0x46 && set){
while (1){
key=getkeytm1650();
if (key!=0x46){
break;
}
}
timeout++;
if (timeout>60){
timeout=60;
}
displaytm1650(1,LED7Code0[timeout/10]);
displaytm1650(2,LED7Code0[timeout%10]);
}
if (key==0x45 && set){
while (1){
key=getkeytm1650();
if (key!=0x45){
break;
}
}
timeout--;
if (timeout<1){
timeout=1;
}
displaytm1650(1,LED7Code0[timeout/10]);
displaytm1650(2,LED7Code0[timeout%10]);
}
}
}
void main() {
uchar key;
P3=0xff;
inittm1650();
timeout=1;
displaytm1650(1,LED7Code0[timeout/10]);
displaytm1650(2,LED7Code0[timeout%10]);
displaytm1650(3,LED7Code0[0]);
displaytm1650(4,LED7Code0[0]);
Timer0Init();
ET0=1;
EA=1;
while (1){
key=getkeytm1650();
switch (key){
case 0x44:
if (!set && !start){
start=1;
while (1){
key=getkeytm1650();
if (key!=0x44){
break;
}
}
startvoid();
}
break;
case 0x45:
break;
case 0x46:
break;
case 0x47:
if (!start && !set){
set=1;
while (1){
key=getkeytm1650();
if (key!=0x47){
break;
}
}
setvoid();
}
break;
default:
break;
}
}
}
TM1650驱动:
#ifndef __TM1650_H__
#define __TM1650_H__
//DIG1 = 0x68;
//DIG2 = 0x6A;
//DIG3 = 0x6C;
//DIG4 = 0x6E;
sbit TM1650_SCL = P3^3;
sbit TM1650_SDA = P3^2;
// sbit TM1650_ERROR = P3^5;
//亮度
uchar TM1650_LEVEL = 6;
uchar code TM1650_ADDRS[4] = {0x68,0x6a,0x6c,0x6e};
void displaytm1650(uchar addr,uchar dat);
uchar getkeytm1650(void);
void inittm1650(void);
void inittm1650() {
uchar i;
uchar length = sizeof(TM1650_ADDRS)/sizeof(TM1650_ADDRS[0]);
displaytm1650(0x48,(TM1650_LEVEL<<4)|0x09);
for (i=0; i
displaytm1650(TM1650_ADDRS,0x40);
}
}
void START1650() {
TM1650_SCL=1;
TM1650_SDA=1;
nops;
TM1650_SDA=0;
}
void STOP1650() {
TM1650_SCL=1;
TM1650_SDA=0;
nops;
TM1650_SDA=1;
}
void ask1650() {
uchar timeout = 1;
TM1650_SCL=0;
TM1650_SCL=1;
nops;
TM1650_SCL=0;
while((TM1650_SDA)&&(timeout<=100)) {
timeout++;
}
nops;
TM1650_SCL=0;
}
void wrbyte1650(uchar x) {
uchar i;
TM1650_SCL=0;
for(i=0; i<8; i++) {
TM1650_SDA = (x & 0x80)?1:0;
nops;
TM1650_SCL=1;
nops;
TM1650_SCL=0;
nops;
x <<= 1;
}
TM1650_SCL=0;
}
uchar getkeytm1650() {
uchar x,i;
START1650();
TM1650_SCL=0;
wrbyte1650(0x49);
ask1650();
for(i=0; i<8; i++) {
x <<= 1;
TM1650_SCL=1;
nops;
if(TM1650_SDA) {
x = x | 0x01;
}
TM1650_SCL=0;
nops;
}
TM1650_SCL=0;
ask1650();
STOP1650();
return x;
}
void displaytm1650(uchar addr,uchar dat) {
START1650();
switch(addr) {
case 1:
wrbyte1650(TM1650_ADDRS[0]);
ask1650();
wrbyte1650(dat);
ask1650();
break;
case 2:
wrbyte1650(TM1650_ADDRS[1]);
ask1650();
wrbyte1650(dat);
ask1650();
break;
case 3:
wrbyte1650(TM1650_ADDRS[2]);
ask1650();
wrbyte1650(dat);
ask1650();
break;
case 4:
wrbyte1650(TM1650_ADDRS[3]);
ask1650();
wrbyte1650(dat);
ask1650();
break;
default:
wrbyte1650(addr);
ask1650();
wrbyte1650(dat);
ask1650();
break;
}
STOP1650();
}
#endif
以下附件包含所有文件
https://bbs.elecfans.com/forum.php?mod=attachment&aid=NzA4NTY2fGI0ZjdiNjYzNjZjOWQ1Mjc1MTQwM2NlNGU1ZmJkOTU1fDE2MjEzMTk1NjU%3D&request=yes&_f=.rar
c语言编程stc秒分小时,【分享】 STC15F104W 做的定时器,附原理图、PCB、C程序相关推荐
- ISD1820c语言程序,DIY制作ISD1820语音录放/喊话器,附原理图/PCB/BOM/程序
本设计分享的是DIY制作ISD1820语音录放/喊话器全套资料,见附件下载其原理图/PCB/BOM/单片机控制ISD1820录放模块程序等.ISD1820语音录放/喊话器可用51单片机控制,使用方便的 ...
- c语言 称重系统设计,745【毕设课设】基于单片机智能电子秤称重系统设计(原理图 pcb 论文 程序)...
[资源下载]下载地址如下: https://docs.qq.com/doc/DTlRSd01BZXNpRUxl 1.研究的主要内容 设计一基于单片机的压力计,要求该电子称除了可以用LCD显示压力的大小 ...
- c语言编程幼儿园自动分班,C语言课件 第5章选择结构.ppt
C语言课件 第5章选择结构 第5章 选择结构程序设计 搜玛厚壶帛酒慈钝梢抽溢泣蒲滓桐惶移掣桩一森距埂蹋朴汛拇银瘴告逾符C语言课件 第5章选择结构C语言课件 第5章选择结构 主要内容:关系运算符和关系表 ...
- c语言编程单向链表排序,【分享】C语言 简单链表创建 排序 输出
[Asm] 纯文本查看 复制代码#include #include//为动态分配提供函数库 typedef struct node { int num;//数据域 struct node *next; ...
- 蔬菜信息配送系统c语言编程,[源码和文档分享]基于C语言的物流配送管理信息系统...
一 需求分析 系统需要实现的功能如下: (一)各种基本数据的录入 配送路线基本信息录入 路线经停站点基本信息录入 站点经停车辆基本信息录入 其它信息录入 (二)各种基本数据的修改 即:允许对已经录入的 ...
- c语言编程加密和解密,请问有学长做过这个程序设计的吗?C语言写加密解密问题,跪求代码!...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 加解密处理 1.系统的基本功能 编写一个对文件(由数字或字母组成)进行加密解密的程序.可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的 ...
- c语言编程测试char的整数生成,C语言编程实验
<C语言编程实验>由会员分享,可在线阅读,更多相关<C语言编程实验(30页珍藏版)>请在人人文库网上搜索. 1.C语言实验习题7-1输出图形(10分)编写程序输出图形.第一行输 ...
- c语言编程培训ppt,C语言入门经典-C语言编程.ppt
<C语言入门经典-C语言编程.ppt>由会员分享,可在线阅读,更多相关<C语言入门经典-C语言编程.ppt(27页珍藏版)>请在人人文库网上搜索. 1.第01章 C语言编程,C ...
- 编程入门c语言ppt,C语言入门经典-C语言编程.ppt
<C语言入门经典-C语言编程.ppt>由会员分享,可在线阅读,更多相关<C语言入门经典-C语言编程.ppt(27页珍藏版)>请在装配图网上搜索. 1.第01章 C语言编程,C语 ...
最新文章
- java.util.concurrent.locks.Condition 例子程序探讨
- 如何查找SAP Cloud for Customer UI页面对应的技术模型明细
- [翻译]More C++ Idioms - 类成员检测器
- oracle数据库全数据库名,Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释...
- mysql信息函数和加密函数_MYSQL 常用函数(数学、字符串、日期时间、系统信息、加密)...
- Linux基本操作(6)——Linux 重写rm 命令 实现回收站功能
- android开源进度条,Android github开源进度条类框架SmoothProgressBar的使用
- virtualbox窗口和win10窗口切换
- 树和二叉树的应用 -- ---哈夫曼(Huffman)树和哈夫曼编码
- lzg_ad: FBWF配置详解
- docker镜像编译与docker-compose部署与编排
- android 广告视频,Android开屏视频广告
- 嵌入式Linux开发教程:Linux常见命令(上篇)
- 打开网页弹出“出现了运行时间错误,是否要调试”的解决办法
- [Java 编程] -- style属性
- 银联Pos终端签到、签退、批结算、批上送、PinKey、MacKey、KEK、主密钥、工作密钥、TPDU、报文头
- 禁用IP的mysql+php设计
- 第5章【思考与练习2】将数据集划分为训练集与测试集,查看决策树分类器的性能。 将例5-3中的分类器保存到文件中,然后重新加载预测给出的新数据。
- 走进JavaWeb技术世界5:初探Tomcat的HTTP请求过程
- ctrl +z / pause键 出现 [1]+ Stopped 怎么解决
热门文章
- SSM图书管理系统(增强版,附源码)
- sklearn中的朴素贝叶斯#01
- 一道2023年数学分析真题
- 护眼灯防蓝光有用吗?2022开学季护眼台灯该这样选择
- 多标签学习:LIFT: Multi-Label Learning with Label-Specific Features
- 【粉丝投稿】海外留学生回国三面华为成功拿下offer,附上大佬的面经希望帮助到大家!
- numpy中的ndarray方法和属性详解
- 台式计算机软件安装的完整过程,台式电脑怎么自己动手组装 史上最全的组装电脑详细图文教程...
- WordPress主题的基本模板及常用函数
- python输入学生姓名_Python练习题:由用户输入学生学号与姓名,数据用字典存储,最终输出学生信息(按学号由小到大显示)。...